MS VB Копировать с одного листа на другой с пустыми ячейками - PullRequest
0 голосов
/ 18 января 2019

У меня есть макрос MS Visual Basic для моего листа Excel, у меня есть дочерняя книга и родительская книга. Я хочу скопировать ячейки из дочерней таблицы «account» в родительскую таблицу «account». ячейки на дочернем листе имеют несколько пустых ячеек, в настоящее время с этим кодом, он останавливается на пустой ячейке, я хочу, чтобы он пропустил пустую ячейку и перешел к следующей ячейке со значениями, а затем продолжил копирование.

    Sub Button1_Click()
    'Field Name
    Windows("childsheet.xlsm").Activate
    Range("A3").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows("parentsheet.xlsm").Activate
    Range("A3").Select
    ActiveSheet.Paste

    'API Name
    Windows("childsheet.xlsm").Activate
    Range("B3").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Windows("parentsheet.xlsm").Activate
    Range("B3").Select
    ActiveSheet.Paste

'Type
Windows("childsheet.xlsm").Activate
Range("C3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("parentsheet.xlsm").Activate
Range("C3").Select
ActiveSheet.Paste

'Length
Windows("childsheet.xlsm").Activate
Range("D3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("parentsheet.xlsm").Activate
Range("D3").Select
ActiveSheet.Paste

'Required
Windows("childsheet.xlsm").Activate
Range("E3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("parentsheet.xlsm").Activate
Range("E3").Select
ActiveSheet.Paste

'Read Only?
Windows("childsheet.xlsm").Activate
Range("F3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("parentsheet.xlsm").Activate
    Range("F3").Select
    ActiveSheet.Paste
    End Sub

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

1 Ответ

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

вместо

Windows("childsheet.xlsm").Activate
Range("A3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Windows("parentsheet.xlsm").Activate
Range("A3").Select
ActiveSheet.Paste

Используйте что-то вроде

With Workbooks("childsheet.xlsm").ActiveSheet
    .Range("A3", .Cells(.Rows.Count, "A").End(xlUp)).Copy Destination:=Workbooks("parentsheet.xlsm").ActiveSheet.Range("A3")
    .Range("B3", .Cells(.Rows.Count, "B").End(xlUp)).Copy Destination:=Workbooks("parentsheet.xlsm").ActiveSheet.Range("B3")
    '… and so on …
End With

Дальнейшее улучшение - заменить .ActiveSheet именем листа, таким как .Worksheets("YourSheetName"), чтобы ваш код был более надежным.

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