我正在尝试使用通配符文件名作为变量,因此我可以使用它来复制并执行一些公式。然后我想要弄平所有的公式。
看起来像这样:
这第一部分有效(第一部分从单元格公式打开通配符文件,第二部分只分配文件名而没有路径到变量Prod - 悬停在变量prod上给出了它应该是什么)
Dim wbProd As Workbook
Windows("SB.xlsm").Activate
Set wbProd = Workbooks.Open(FileNAME:=Sheets("refs").Range("B48").Value)
Dim Prod As String
Windows("SB.xlsm").Activate
Prod = Worksheets("refs").Range("B49").Value
Windows("Weekly.xlsx").Activate
With Workbooks(" & Prod & ").Sheets("Report 1")
.Range("A2:BG10", .Range("A2:BG10").End(xlDown)).Copy Workbooks("WeeklyData X.xlsx").ActiveSheet.Range("A2")
End With
Windows("WeeklyData X.xlsx").Activate
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Report 1")
ws.UsedRange.Value = ws.UsedRange.Value
我在复制的第一部分出现错误:使用工作簿(“& Prod&”)。表(“报告1”)。当我使用这种复制方法而不使用变量中的文件名时,它可以正常工作,当我使用变量文件名来执行Vlookup时,它也能工作。我不知道什么是不在这里工作的原因。 此外,如果你有更好的方法来展平所有的公式和preseve格式(日期),它会很棒。
谢谢,
答案 0 :(得分:3)
快速解决方法是创建工作簿变量(Dim myWB as Workbook
),
然后做Set myWB = Workbooks(Prod)
。然后就做With myWB.Sheets("Sheet1")
。
问题在于Excel需要工作表名称中的引号,因此您的书籍实际上被理解为标题为& Prod &
。因此,为了保持您当前的想法,您只需在每个引号中添加一个额外的引用:With Workbooks("" & Prod & "").Sheets("Report 1")
。
我个人建议设置一个工作簿变量,但要么有效!
编辑:
@drLecter - 非常欢迎!在尝试设置包含引号的公式时,您还会遇到“双引号”问题。 IE工作表公式=Vlookup("myText",A1:D1,2,False)
将在VBA中变为
Cells(1,1).Formula = "=Vlookup(""myText"",A1:D1,2,False)"
。
如您所见,如果我没有使用双引号,VBA将停止阅读
中的公式 Cells(1,1).Formula = "=Vlookup(
答案 1 :(得分:0)
使用dir()
!
Microsoft Documentation link - dir() function
- 返回一个字符串,表示与指定的模式或文件属性或驱动器的卷标签匹配的文件,目录或文件夹的名称。
只需改编这样的东西::
Sub LoopThroughFiles()
Dim MyObj As Object, MySource As Object, file As Variant
file = Dir("c:\testfolder\")
While (file <> "")
If InStr(file, "test") > 0 Then
MsgBox "found " & file
Exit Sub
End If
file = Dir
Wend
End Sub