用于公式和复制的变量中的文件名

时间:2016-03-11 15:29:14

标签: excel vba excel-vba

我正在尝试使用通配符文件名作为变量,因此我可以使用它来复制并执行一些公式。然后我想要弄平所有的公式。

看起来像这样:

这第一部分有效(第一部分从单元格公式打开通配符文件,第二部分只分配文件名而没有路径到变量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格式(日期),它会很棒。

谢谢,

2 个答案:

答案 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