我正在进行我的第一个VBA宏,并且我在使用这个看似简单的代码时遇到了一些困难,这些代码将数据从已关闭的工作簿读取到我当前打开的工作簿中。
Sub KAuto()
Dim path As String
path = "C:\files\Utfall.xlsx"
Dim currentWb As Workbook
Set currentWb = ThisWorkbook
Dim openWb As Workbook
Set openWb = Workbooks.Open(path)
Dim openWs As Worksheet
Set openWs = openWb.Sheets("March")
currentWb.Sheets("Indata").Range("A1").Value = openWs.Range("A3").Value
End Sub
我遇到的问题是我得到的代码9,下标超出范围。但我已经检查过A1和A3分别存在于当前工作簿和导入的工作簿中。
我试图做的是在所有组合中省略“.Value”,因为这是原作者所做的。
谷歌搜索这个问题我遇到过人们滥用我不使用的功能,例如windows(),或者省略“”来引用工作表,或者只是拼写错误的东西。我认为我没有这些,所以我需要进一步的帮助。
如何更正我的下标超出范围?有没有更好的方法来实现这种细胞复制?将来我要导入10个文件,这会不会过时? (我记得有人在openWb = [file1,file2,file3]的行中发布了一些东西并循环遍历它们,但我找不到它;有没有人有链接?
编辑:我已经从其属性复制了文件的路径,所以它应该是正确的。EDIT2:
currentWb.Sheets("Indata").Range("A1").Value = openWs.Range("A3").Value
代码段提供错误
EDIT3:VB编辑器打印屏幕:
答案 0 :(得分:1)
尝试使用ActiveWorkbook
代替ThisWorkbook
。
Set currentWb = ActiveWorkbook
ThisWorkbook
指的是代码所在的工作簿。 ActiveWorkbook
指的是当前处于活动状态的工作簿,即"在顶部"在Excel应用程序中。它看起来像你的情况,代码驻留在不同的工作簿中;所以你想要的是ActiveWorkbook
。
你可以从最后一行省略.value
。
currentWb.Sheets("Indata").Range("A1") = openWs.Range("A3")
你的代码对我来说很好,这就是为什么我不能确定它是否有用。
打开openWs时可能会出现问题。可以在openWs实际打开之前评估错误行。然后可以添加一行:
Application.Wait (Now + TimeValue("00:00:03")) 'this is 3 seconds from now
Set openWb = Workbooks.Open(path)
。