Цикл и вставка между книгами с VBA

Мне нужно скопировать и вставить значения из книги 1 в книгу 2, если в последнем столбце книги 1 написано «да».

Затем мне нужно перейти к следующей строке в книге 1 и вставить значения в НОВЫЙ лист в книге 2 и сделать то же самое, пока в последнем столбце книги 1 не перестанет отображаться «да».

Пока у меня есть следующий код. Как переключаться между строками в книге 1?

Dim InputFile As Workbook
Dim OutputFile As Workbook
'other code here not relevant 
Set InputFile = Workbooks.Open(filepath)
Set OutputFile = ThisWorkbook

Dim Lastname As String
Dim Firstname As String
Dim InvEntityname As String
Dim Commitment As Long
Dim InvoiceAmount As Long

Dim Col As Range

For Each Col In Range("U5", Range("U" & Rows.Count).End(xlUp))
        If Col.Value = "Yes" Then

        Lastname = ActiveCell.Offset(1, 0)
        Firstname = ActiveCell.Offset(1, 1)
        InvEntityname = ActiveCell.Offset(1, 2)
        Commitment = ActiveCell.Offset(1, 6)
        InvoiceAmount = ActiveCell.Offset(1, 15)

 ThisWorkbook.Sheets(1).Activate
        Range("c24") = Lastname
        Range("D24") = Firstname
        Range("B13") = InvEntityname
        Range("E41") = Commitment
        Range("G41") = InvoiceAmount

End If
    Next Col

ActiveSheet.Name = Range("b13")
Worksheets.Copy After:=ActiveSheet

Сначала замените ActiveCell на Col. Во-вторых, я бы посоветовал квалифицировать все ваши переменные Range, чтобы сделать изображение ясным (что позволяет избежать выделения).

JohnyL 07.12.2018 19:02

<Для каждого столбца в диапазоне ("U5" & ":" & Range ("U" & Rows.Count) .End (xlUp) .Address)>. Вы назначили ThisWorkbook для OutPutFile. Почему тогда ты им не пользуешься? Вы должны потерять '.Activate' и ',', перед следующими 'Range'ами. Неясно, с какого листа, например, Переменная Lastname получает свое значение.

VBasic2008 07.12.2018 19:52
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
2
46
1

Ответы 1

Строки в листы

Поскольку здесь есть много предположений, будьте осторожны, как использовать его, чтобы не потерять данные.

Этот код открывает книгу и в ее Activesheet просматривает столбец U и каждый раз, когда он находит «Да» в найденной строке, копирует некоторые ячейки на первый (1) лист ThisWorkbook, затем создает копию листа сразу после него и переименовывает копию; таким образом создавая столько рабочих листов, сколько найдено «Да» -е.

Option Explicit

Sub RowsToSheets()

  Dim wsInput As Worksheet
  Dim Col As Range

  'other code here not relevant

  Set wsInput = Workbooks.Open(filepath).ActiveSheet

  For Each Col In wsInput.Range("U5" & ":" _
      & wsInput.Range("U" & Rows.Count).End(xlUp).Address)

    If Col.Value = "Yes" Then

      With ThisWorkbook.Worksheets(1)

        ' Copy data from found row to ws.
        .Range("C24") = Col.Offset(1, 0)   ' Lastname
        .Range("D24") = Col.Offset(1, 1)   ' Firstname
        .Range("B13") = Col.Offset(1, 2)   ' InvEntityname
        .Range("E41") = Col.Offset(1, 6)   ' Commitment
        .Range("G41") = Col.Offset(1, 15)  ' InvoiceAmount

        ' Create a copy after itself.
        .Copy after:=.Parent.Worksheets(1)

'        ' I Would prefer here after the last worksheet: 
'        .Copy after:=.Parent.Worksheets(.Parent.Worksheets.Count)
'        ' Rename the copy.
'        .Parent.Worksheets(.Parent.Worksheets.Count).Name = .Range("B13")     

        ' Rename the copy.
        .Parent.Worksheets(.Index + 1).Name = .Range("B13")

      End With

    End If

  Next

  Set Col = Nothing
  Set wsInput = Nothing

End Sub

Другие вопросы по теме