У меня есть книга под названием " INVOICE.xls " с листом " INVOICE " и другая книга под названием " DATABASE.xls " с листом " БАЗА ДАННЫХ ».
У меня есть два диапазона данных в Рабочей книге " INVOICE.xls " Лист " INVOICE ", который предполагает rngA- (от A13 до I29) и rngB- (от B23 до I29) у обоих из которых есть заголовки над ними, которые я передаю в книгу " DATABASE.xls " Sheet " DATABASE " с использованием Код VBA . Диапазон rngB имеет данные время от времени. Код, который у меня есть, теперь успешно переносится, только если есть строка с данными в rngB . В случаях, когда в rngB нет данных, он копирует строку выше указанного диапазона, то есть метки заголовка. Вставка кода ниже. Я не эксперт, я только что вставил коды с разных форумов, чтобы заставить его работать до сих пор. Снимок экрана-Invoice.xls Снимок экрана Database.xls
РЕДАКТИРОВАТЬ - Есть еще одна ошибка, где мне нужна помощь. Когда оба диапазона rngA & rngB заполнены данными, этот диапазон не вставляется. Вместо этого он вставляет диапазон A3: I3 из "INVOICE.xls" лист "INVOICE" в "DATABASE.xls" лист «БАЗА ДАННЫХ» столбец в диапазоне J: R . Пожалуйста, помогите.
Sub SavingData()
Dim rngA As Range
Dim rngB As Range
Dim i As Long
Dim a As Long
Dim b As Long
Dim rng_dest As Range
Application.ScreenUpdating = False
Windows("DATABASE.xls").Activate
'Check if invoice # is found on sheet "DATABASE"
i = 2
Do Until Sheets("DATABASE").Range("A" & i).Value = ""
If ActiveWorkbook.Sheets("DATABASE").Range("A" & i).Value = Workbooks("INVOICE").Sheets("INVOICE").Range("H8").Value Then
'Ask overwrite invoice #?
If MsgBox("Invoice Number Already Exists - Do you want to overwrite?", vbYesNo) = vbNo Then
Exit Sub
Else
Exit Do
End If
End If
i = i + 1
Loop
i = 1
Windows("INVOICE.xls").Activate
Windows("DATABASE.xls").Activate
Set rng_dest = Sheets("DATABASE").Range("J:R")
'Delete rows if invoice # is found
Do Until Sheets("DATABASE").Range("A" & i).Value = ""
If Workbooks("DATABASE").Sheets("DATABASE").Range("A" & i).Value = Workbooks("INVOICE").Sheets("INVOICE").Range("H8").Value Then
Workbooks("DATABASE").Sheets("DATABASE").Range("A" & i).EntireRow.Delete
i = 1
End If
i = i + 1
Loop
' Find first empty row in columns B:I on sheet Sales
Windows("INVOICE").Activate
Do Until WorksheetFunction.CountA(rng_dest.Rows(i)) = 0
i = i + 1
Loop
'Copy range A13:I20 on sheet Invoice
With Sheets("INVOICE")
Dim lastRowA As Long
Dim lastRowB As Long
lastRowA = .Cells(20, 1).End(xlUp).Row
lastRowB = .Cells(29, 1).End(xlUp).Row
Set rngA = .Range(.Cells(13, 1), .Cells(lastRowA, 9))
Set rngB = .Range(.Cells(23, 1), .Cells(lastRowB, 9))
End With
' Copy rows containing values to sheet Sales
For a = 1 To rngA.Rows.Count
If WorksheetFunction.CountA(rngA.Rows(a)) <> 0 Then
rng_dest.Rows(i).Value = rngA.Rows(a).Value
'Copy Field 1
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("A" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("H8").Value
'Copy Field 2
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("B" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("C9").Value
'Copy Field 3
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("C" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("B10").Value
'Copy Field 4
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("D" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("E8").Value
'Copy Field 5
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("E" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("G10").Value
'Copy Field 6
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("F" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("C11").Value
'Copy Field 7
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("G" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("E11").Value
'Copy Field 8
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("H" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("H11").Value
'Copy Field 9
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("I" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("I11").Value
i = i + 1
End If
Next a
For b = 1 To rngB.Rows.Count
If WorksheetFunction.CountA(rngB.Rows(b)) <> 0 Then
rng_dest.Rows(i).Value = rngB.Rows(b).Value
'Copy Field 1
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("A" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("H8").Value
'Copy Field 2
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("B" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("C9").Value
'Copy Field 3
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("C" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("B10").Value
'Copy Field 4
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("D" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("E8").Value
'Copy Field 5
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("E" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("G10").Value
'Copy Field 6
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("F" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("C11").Value
'Copy Field 7
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("G" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("E11").Value
'Copy Field 8
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("H" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("H11").Value
'Copy Field 9
Workbooks("DATABASE.xls").Sheets("DATABASE").Range("I" & i).Value = Workbooks("INVOICE.xls").Sheets("INVOICE").Range("I11").Value
i = i + 1
End If
Next b
Application.ScreenUpdating = True
End Sub