VBA下标超出范围,代码9

时间:2015-03-11 08:12:47

标签: excel excel-vba vba

我正在进行我的第一个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编辑器打印屏幕:

VBA editor print screen

1 个答案:

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