Вставьте скопированный диапазон данных во все открытые книги, используя цикл - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь настроить макрос VBA для циклического просмотра всех открытых файлов и вставки одинакового диапазона ячеек в каждую рабочую книгу в цикле.По сути, я смог сделать обратное этому процессу с помощью простого макроса ниже (LoopEachOpenWorkbook). Я скопировал диапазон из каждой открытой рабочей книги и вставил его в центральную рабочую книгу, чтобы собрать все данные.

 Sub LoopEachOpenWorkbook()

Dim wb As Workbook

 For Each wb In Workbooks

      If wb.Name <> "FILE NAME.xlsm" Then

              wb.Activate

              ActiveWindow.WindowState = xlNormal

              Sheets("Sheet1").Select

              Range("A2:S20").Select

              Selection.Copy

              Windows("FILE NAME.xlsm").Activate

              Range("A1").Select

              Selection.End(xlDown).Select

              ActiveCell.Offset(1).Select

             ActiveSheet.Paste Link:=True

    End If
    Next wb
    End Sub

Я подумал, что смогу использовать аналогичный метод для обновления каждой книги новым набором данных.Я попытался сделать это с помощью макроса, указанного ниже (Обновление матрицы).Я надеялся, что смогу просто скопировать нужные данные, чтобы они были в буфере обмена, а макрос просто вставил то, что уже было в буфере обмена.Я также попробовал это с включением копии в макрос, но до цикла.Независимо от того, что я пытаюсь, я все равно получаю сообщение об ошибке в строке кода для вставки.Я пробовал разные способы вставки, и я все еще получаю сообщение об ошибке.

Sub Update Matrix()

Dim wb As Workbook





For Each wb In Workbooks

  If wb.Name <> "FILE NAME.xlsm" Then



          wb.Activate

          ActiveWindow.WindowState = xlNormal

          Sheets("Sheet 1").Select

          ActiveSheet.Unprotect "password"

          Range("A5").Select

          Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

          ActiveSheet.Protect "password", True, True

          Sheets("Sheet 2").Select



  End If

Next wb

Нужно ли включать копию в макрос и, кроме того, в цикл?Нужно ли мне возвращаться к исходной рабочей книге и переписывать диапазон при каждом добавлении в новую рабочую книгу в цикле?Любая помощь будет принята с благодарностью.

Спасибо.

1 Ответ

0 голосов
/ 12 декабря 2018

Вам не нужно копировать и вставлять, вы можете передавать значение напрямую, но вам нужно указать источник (если ваш код не обращается к буферу обмена).

Sub UpdateMatrix()

Dim wb As Workbook

For Each wb In Workbooks
    If wb.Name <> "FILE NAME.xlsm" Then
        With wb.Sheets("Sheet 1")
            .Unprotect "password"
            'in the line below you need to specify the source cell (and sheet)
            .Range("A5").Value = Workbooks("FILE NAME.xlsm").Sheets(1).Range("A1").Value
            .Protect "password", True, True
        End With
    End If
Next wb

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...