скопировать из открытой рабочей книги в ThisWorkbook без повторного открытия второй рабочей книги - ошибка VBA 9 - PullRequest
0 голосов
/ 25 января 2019

У меня возникают некоторые трудности с фрагментом кода, когда я пытаюсь скопировать некоторые данные из открытой рабочей книги с именем ("petros20190118.xlsm") в рабочую книгу, в которой я запускаю макрос (Thisworkbook).

Ячейка C4 содержит строку "20190118".

Я получаю сообщение об ошибке «Ошибка времени выполнения 9»: нижний индекс вне диапазона »в строке« Установить x = рабочие книги («petros» & filedate & «.xlsm») »

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 голосов
/ 28 января 2019

Дата файла верна.

Я нашел ошибку, она выдает ошибку 9, потому что вторая книга открыта в новом окне Excel и не совпадает с первой. Когда я нахожусь в «ThisWorkbook» и нажимаю на открытый файл, код VBA работает без каких-либо проблем. Я использую Excel 2016.

Итак, теперь мне нужно выяснить, как поместить оператор, который ищет открытые книги, независимо от того, находится он в том же окне или нет. Если кто-то знает, не стесняйтесь, помогите мне. Спасибо - Петрос

0 голосов
/ 25 января 2019

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

Еслиу вас есть открытая книга, которая не показывается этим кодом, она открывается другим экземпляром.Тогда посмотрите здесь, пожалуйста: Может ли VBA охватить экземпляры Excel?

...