我正在进行我的第一个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编辑器打印屏幕:
1 回答
尝试使用
ActiveWorkbook
而不是ThisWorkbook
.ThisWorkbook指代码所在的工作簿 . ActiveWorkbook指的是当前处于活动状态的工作簿,即Excel应用程序中的"on top" . 它看起来像你的情况,代码驻留在不同的工作簿中;所以你想要的是
ActiveWorkbook
.你可以从最后一行省略
.value
.currentWb.Sheets("Indata").Range("A1") = openWs.Range("A3")
你的代码对我来说很好,这就是为什么我不能确定它是否有用 .
打开openWs时可能会出现问题 . 可以在openWs实际打开之前评估错误行 . 然后可能添加一行:
Application.Wait(Now TimeValue(“00:00:03”))'这是从现在开始的3秒
在设置openWb = Workbooks.Open(路径)之后 .