Excel VBA вопрос - Синтаксис для копирования индексированного диапазона - PullRequest
1 голос
/ 26 февраля 2020

Привет. Я пытаюсь скомпилировать данные из нескольких листов для определенного условия c в один лист. Я хочу, чтобы это пошагово перебирало рабочие листы с номера 5 до x и выполняло следующие действия: - найдите строки, в которых значение в диапазоне исходного листа E13: E37 пустое, скопируйте и вставьте значения из (RowSource, 2) в (RowSource) , 5) к целевому листу в (RowTarget, 2) - (RowTarget, 5) - скопировать и вставить значение в ячейке исходного листа «C2» в каждую целевую строку У меня возникли 2 проблемы с кодом: 1. Я получаю ошибка в копировании вставки диапазона. Я пробовал кучу разных синтаксисов, и я не понимаю его правильно. 2. Это на самом деле не перебирает все листы Может кто-нибудь помочь мне? СПАСИБО

Sub Get_Activities()
    Dim c As Range 'count for blank
    Dim j As Integer 'target sheet row
    Dim w As Integer ' sheet number
    Dim Source As Worksheet
    Dim Target As Worksheet
    Dim SheetCount As Integer

    Set Target = ActiveWorkbook.Worksheets("Report") 'where the data is going

    j = 4     ' Start copying to row 4 in target sheet

    w = 5     'start at 5th Worksheet in file which should be the first Plant

    If w <= ActiveWorkbook.Sheets.Count Then

    Set Source = ActiveWorkbook.Worksheets(w) 'where the data is coming from

    For Each c In Source.Range("E13:E37")   ' Look at all the tasks
        If c = "" Then
         Source.Cells(2, 3).Copy Target.Cells(j, 1)
         Source.Range(Cells(c.Row, 2), Cells(c.Row, 5)).Copy
         Target.Range(Cells(j, 2)).PasteSpecial Paste:=xlPasteValues ' Getting an invalid operator error for j.Row

        j = j + 1
        End If

    Next c

  w = w + 1

 End If

End Sub

1 Ответ

0 голосов
/ 27 февраля 2020

Проблема 1 возникает из-за неправильного или, по крайней мере, проблемного синтаксиса: Вы должны добавить идентификатор 'Source' перед обоими 'Cells'

Source.Range(Cells(c.Row, 2), Cells(c.Row, 5)).Copy

Вы также должны избавиться от 'Range' для кода вставки, поскольку он не нужен и, вероятно, также вызывает проблемы. Оба эти изменения были сделаны в блоке кода ниже.

 Target.Range(Cells(j, 2)).PasteSpecial Paste:=xlPasteValues

Более подробное описание, чем я, могу предоставить о необходимости дополнительных идентификаторов при использовании Range и Cells, можно найти здесь - VBA копирование и вставка работают только в том случае, если я активирую лист

Проблема 2 заключается в том, что вы никогда не пролистываете листы oop, код заканчивается после if, если я выбрал go с пометкой "Сделать" В то время как 'l oop для этого случая, вы можете выбрать любую понравившуюся вам форму зацикливания, пока вы l oop!

Do While w <= ActiveWorkbook.Sheets.Count

Set Source = ActiveWorkbook.Worksheets(w) 'where the data is coming from

For Each c In Source.Range("E13:E37")   ' Look at all the tasks
    If c = "" Then
     Source.Cells(2, 3).Copy Target.Cells(j, 1)
     Source.Range(Source.Cells(c.Row, 2), Source.Cells(c.Row, 5)).Copy
     Target.Cells(j, 2).PasteSpecial Paste:=xlPasteValues ' Getting an invalid operator error for j.Row

    j = j + 1
    End If

Next c

w = w + 1

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