如何在VBA中使用单元格中的文件路径?

3

我正在运行一个VBA脚本,以便在选择的文件夹中计算每个文件的行数,然后在活动工作簿中显示它。

 Option Explicit
Sub CountRows()
    Dim wbSource As Workbook, wbDest As Workbook
    Dim wsSource As Worksheet, wsDest As Worksheet
    Dim strFolder As String, strFile As String
    Dim lngNextRow As Long, lngRowCount As Long

    Application.ScreenUpdating = False

    Set wbDest = ActiveWorkbook
    Set wsDest = wbDest.ActiveSheet

    strFolder = Dir(Range("C7").Value)
    strFile = Dir(strFolder & "*.xlsx")
    lngNextRow = 11
    Do While Len(strFile) > 0
        Set wbSource = Workbooks.Open(Filename:=strFolder & strFile)
        Set wsSource = wbSource.Worksheets(1)
        lngRowCount = wsSource.UsedRange.Rows.Count
        wsDest.Cells(lngNextRow, "F").Value = lngRowCount
        wbSource.Close savechanges:=False
        lngNextRow = lngNextRow + 1
        strFile = Dir
    Loop

    Application.ScreenUpdating = True

End Sub

选择一个文件夹,我想使用插入到活动工作簿单元格“C7”中的目录,而不是在脚本中编写目录。 我尝试进行替换:

strFolder = "C:\Users\user\Desktop\"

使用

 strFolder = Dir(Range("C7").Value)

但它无法正常工作。也许有人有什么想法?谢谢!


尝试将完全限定名称添加到您的“Range”中,如下所示: Workbooks("wbName").Worksheets("shName").Range("C7") - Dmitry Pavliv
@Thomas Stracke 是的,预计从单元格F11开始,我们可以看到所选文件夹中文件的行数(如果文件只有1个,则在F11中只会有1个数字)。但是,如果我将文件夹路径放在C7中并定义strFolder = Dir(Range(“C7”).Value),对我来说它不起作用。 - Ale
@Ale,在strFolder = Dir(Range("C7").Value)这行代码之前,尝试添加MsgBox Range("C7").Value。会出现什么提示信息? - Dmitry Pavliv
你能否尝试描述一下具体发生了什么?在不更改您上面的代码的情况下,它对我起作用了。也许是单元格格式问题? - Thomas Stracke
@simoco会显示我在C7中插入的目录消息。 - Ale
显示剩余5条评论
2个回答

2

这一行代码 strFolder = Dir(Range("C7").Value) 会在目录中查找第一个文件(从单元格C7开始),然后将该文件的路径写入变量strFolder中(比如说,C:\temp\somefile.txt)。

你的代码的下一行:strFile = Dir(strFolder & "*.xlsx"),会将这个路径和*.xlsx结合起来。结果你会得到 strFile = Dir("C:\temp\somefile.txt*.xlsx"),这是错误的。

因此,请更改此代码:

strFolder = Dir(Range("C7").Value)
strFile = Dir(strFolder & "*.xlsx")

转到下一个:

strFolder = Range("C7").Value
strFile = Dir(strFolder & "*.xlsx")

顺便提一下,我建议你像这样为Range("C7")指定工作表:wsDest.Range("C7")


1
谢谢!使用 'strFolder = Range("C7").Value' 它可以正常工作! :) - Ale

1

试试这个

dim strPath as string
strPath = CurDir + "NameofFile.xls"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接