我在将数据从其他工作簿合并到主工作簿并使用文件名和路径名是变量的同时陷入VBA问题,该变量在循环中动态变化,但是我只找到硬编码的路径,因此我以下是我的代码。
Sub Append()
'Append data from other files
Path = "E:\NPM PahseIII\"
Dim c As Range
'find the first empty cell in ColA
Set c = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(2, 0)
Filename = Dir(Path & "*.xlsx")
Do While Filename <> ""
If InStr(Filename, ".") > 0 Then
Filenamenoext = Left(Filename, InStr(Filename, ".") - 1)
End If
c.Value = Filenamenoext
Set c = c.Offset(1, 0)
Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
Windows("Master sheet").Activate
Selection.Consolidate Sources:=Array("'Path & [Filename]Sheet1'!$B$2:$B$5"),
Function:=xlSummary
Workbooks(Filename).Close
Filename = Dir()
Loop
End Sub
第一个问题是该程序给我错误
Object doesn't support this property or method
在此行
Selection.Consolidate Sources:=Array("'Path & [Filename]Sheet1'!$B$2:$B$5"),
Function:=xlSummary
第二,我希望当其他文件数据没有变化时,如果再次通过运行代码再次添加数据,那么代码不应再次添加重复项。
答案 0 :(得分:0)
请注意,在该字符串"'Path & [Filename]Sheet1'!$B$2:$B$5"
中,Path
和Filename
不会被视为变量,而是硬编码字符串!
您必须使用类似
"'" & Path & "[" & Filename & "]Sheet1'!$B$2:$B$5"
如果要使用变量值。
根据Range.Consolidate method的文档,xlConsolidationFunction的常量不是Function:=xlSummary
而是Function:=xlSum
。
还要注意,Selection
的定义非常不确定,可以在工作表中的任何位置。我建议您阅读How to avoid using Select in Excel VBA并参考您的范围,工作簿等,而完全不使用.Activate
和.Select
或Selection.
。