从打开的工作簿复制到ThisWorkbook而不重新打开第二个工作簿-VBA错误9

时间:2019-01-25 16:32:06

标签: vba ms-error-9

我在一段代码上遇到了一些困难,试图将名称为“ petros20190118.xlsm”的打开的工作簿中的某些数据复制到运行宏(Thisworkbook)的工作簿中。

单元格C4包含字符串“ 20190118”。

我遇到的错误是“设置x = Workbooks(“ petros”&filedate&“ .xlsm”)“行中的“运行时错误'9':下标超出范围”

Sub Copy_Paste()

    Dim x As Workbook
    Dim filedate As String

    filedate = ThisWorkbook.Sheets("Instructions").Range("C4")
    ThisWorkbook.Sheets("Sheet0").Range("A2:V1000").ClearContents
    Set x = Workbooks("petros" & filedate & ".xlsm")
    x.Sheets("Sheet5").Range("A2:V1000").Copy
    ThisWorkbook.Sheets("Sheet1").Range("A2").PasteSpecial xlPasteValues
    x.Sheets("Sheet2").Range("A:S").Copy
    ThisWorkbook.Sheets("Sheet3").Range("A:S").PasteSpecial xlPasteValues

End Sub

谢谢!

2 个答案:

答案 0 :(得分:0)

ThisWorkbook,ActiveWorkbook和几乎所有其他

  • ThisWorkbook始终是活动VBA代码所在的工作簿。
  • 如果选择或打开另一个工作簿,则
  • ActiveWorkbook会发生变化。
  • 您也可以通过工作簿的文件名来寻址

通过这种方法,您可能会找到Excel实例的所有打开的工作簿名称:

Private Sub DebugAllOpenedWorkbookNames()
    Dim wb As Workbook
    Dim i As Integer

    For Each wb In Application.Workbooks
        Debug.Print "Normal Workbook: " & wb.Name
    Next wb

    For i = 1 To Application.ProtectedViewWindows.Count
        Debug.Print "Protected Workbook: " & _
            Application.ProtectedViewWindows(i).Workbook.Name
    Next i
End Sub

如果打开的工作簿未由该代码显示,则该工作簿由另一个实例打开。然后请看这里:Can VBA Reach Across Instances of Excel?

答案 1 :(得分:0)

文件日期正确。

我发现了错误,它给出了9错误,因为第二个工作簿在新的excel窗口中打开,并且与第一个工作簿不同。当我在“ ThisWorkbook”上并单击打开的文件时,VBA代码可以正常工作。我正在使用Excel 2016。

因此,现在我必须弄清楚如何放置一个语句来搜索打开的工作簿,而不管它是否在同一窗口中。如果有人知道,请随时帮助我。谢谢– Petros