使用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的新实例并打开该实例中的源文件。