首页 文章

VBA下标超出范围,代码9

提问于
浏览
1

我正在进行我的第一个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 回答

  • 1

    尝试使用 ActiveWorkbook 而不是 ThisWorkbook .

    Set currentWb = ActiveWorkbook
    

    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(路径)之后 .

相关问题