使用Excel VBA复制数据而不打开工作簿

使用Excel VBA复制数据而不打开工作簿,vba,excel,Vba,Excel,我打算通过宏将数据从一个工作簿复制到另一个工作簿。但是,我使用的是我公司创建的加载项,它禁止同时打开多个工作簿 Application.ScreenUpdating = False CurrentYear = Year(Date) CurrentMonth = Month(Date) StartDate = DateAdd("m", MonthOffset, Date) MonthNo = Month(StartDate) YearNo = Year(StartDate) path2 = II

我打算通过宏将数据从一个工作簿复制到另一个工作簿。但是,我使用的是我公司创建的加载项,它禁止同时打开多个工作簿

Application.ScreenUpdating = False
CurrentYear = Year(Date)
CurrentMonth = Month(Date)
StartDate = DateAdd("m", MonthOffset, Date)
MonthNo = Month(StartDate)
YearNo = Year(StartDate)

path2 = IIf(MonthNo >= 10, Dir("C:\path\filename " & YearNo & "-" & MonthNo & ".xlsx"), Dir("C:\path\filename " & YearNo & "-0" & MonthNo & ".xlsx"))
p2file = "C:\path"

Varrr = IIf(MonthNo >= 10, p2file & path2 & "[filename.xlsx " & YearNo & "-" & MonthNo & ".xlsx]Sheetname!", p2file & path2 & "[filename.xlsx " & YearNo & "-" & MonthNo & ".xlsx]Sheetname!") 
i = 0
Do While Len(path2) > 0
    Varrrcell = Cells(3,4+i).Address(RowAbsolute:=False, ColumnAbsolute:=False)        
    Varrr = Varrr & Varrrcell  
    currentWb.Sheets("Blad1").Cells(27, 2 + i + 12 * (YearNo Mod 2015)).Formula= "=Varrr"


    i = IIf(i > 12, 1, i + 1)  
    YearNo = IIf(i > 12, YearNo + 1, YearNo)    
    path2 = IIf(i >= 10, Dir("C:\path\filename " & YearNo & "-" & i & ".xlsx"), Dir("C:\path\filename" & YearNo & "-0" & i & ".xlsx"))
    Varrr = IIf(i >= 10, p2file & path2 & "[filename.xlsx " & YearNo & "-" & MonthNo & ".xlsx]Sheetname!", p2file & path2 & "[filename.xlsx " & YearNo & "-" & MonthNo & ".xlsx]Sheetname!") 
Loop
Application.ScreenUpdating = True
编辑:我已重新编码我的工作,直接使用公式引用工作簿。这个解决方案实际上返回了我想要复制的正确路径、文件和单元格,以便按预期工作。但是,它在每个单元格中返回Varrr。如何使其返回值而不是变量名

EDIT2:我还将路径2和p2file之前的=。。当创建和更新Varrr时,简单地说

 currentWb.Sheets("Blad1").Cells(27, 2 + i + 12 * (YearNo Mod 2015)).Formula= Varrr
但这会导致错误1004

编辑3:我还在工作表的名称前加了一个结束语。这没有帮助

EDIT4:我也试着省略等号,并认为Varrr=Varrr&Varrcell

然后提出:

  currentWb.Sheets("Blad1").Cells(27, 2 + i + 12 * (YearNo Mod 2015)).Formula = "=" & varrr
但它在同一代码段中给出了代码1004。应用程序定义或对象定义错误

编辑5: 尝试合并ExecuteExcel4Macro我尝试了以下解决方案,其中Dim返回字符串形式的值:

    Varrr = "'" & p2file & "[filename.xlsx " & YearNo & "-" & MonthNo & ".xlsx]Sheetname!'"
    ReturnedValue = Varrr & Range("D3").Adress(True,True,-4150)
    MsgBox ExecuteExcel4Macro(ReturnedValue)

其中,MsgBox给出函数错误1004。在这里,我对它进行了一些精简,以省略IIf语句和Do循环,因为我认为它们在上下文中是多余的

调用工作簿。打开可以清楚地打开工作簿,因为名称非常清楚。如果不打开工作簿,就无法从工作簿中复制数据,正如如果不先打开工作簿,就无法阅读书本中的第100页一样。可以使用ADO或ExecuteExcel4Macro从关闭的工作簿中获取数据,也可以使用公式,然后在必要时将其转换为值。哪一个最好取决于您的环境。您可以编写一个vbs来打开每个工作簿,一次一个,将信息存储到变量中或从变量中取出。这可能很棘手,但我希望这是一种方法。@Rory感谢这些例子。一直在谷歌上搜索ADO,看起来很有希望!启动excel的新实例并打开该实例中的源文件。