したがってInvoice_Form
、ExcelワークブックInvoiceForm.xlsmのシートに次のような請求書フォームがあります。
およびInvoice Database
ExcelワークブックInvoiceDatabase.xlsmのシートにある請求書レコードのデータベース:
フォームから請求書データベースにレコードをリンクできるVBAコードを作成しましたが、コードが現在実行できるのは、請求書フォームの最初の行のみを記録することです。
コードは次のようになります。
Sub Submit_Invoice()
Dim LastRow As Long, ws As Worksheet
Set ws = Sheets("InvoiceDatabase")
LastRow = ws.Range("I" & Rows.Count).End(xlUp).Row + 1
ws.Range("K" & LastRow).Value = Worksheets("Invoice Form").Range("C9:C16").Value
ws.Range("L" & LastRow).Value = Worksheets("Invoice Form").Range("D9:D16").Value
....
End Sub
したがって、問題は、請求書フォームに追加の製品がある場合に、この1つのフォームに基づいて異なる行に複数のレコードを作成できるようにコードを変更するにはどうすればよいですか?
ありがとう!
フォームから配列を作成し、その配列をInvoiceDatabaseにダンプします。
Sub Submit_Invoice()
Dim lr As Long, ws As Worksheet
dim arr as variant, i as long
with Worksheets("Invoice Form")
lr = .cells(16, "C").end(xlup).row - 8
redim arr(1 to lr, 1 to 6)
for i=lbound(arr,1) to ubound(arr, 1)
arr(i, 1) = .cells(5, "D").value
arr(i, 2) = .cells(6, "D").value
arr(i, 3) = .cells(i+8, "C").value
arr(i, 4) = .cells(i+8, "D").value
arr(i, 5) = .cells(i+8, "E").value
arr(i, 6) = .cells(i+8, "F").value
next i
end with
WITH WORKSheets("InvoiceDatabase")
lr = .Range("I" & .Rows.Count).End(xlUp).Row + 1
.cells(lr, "I").resize(ubound(arr, 1), ubound(arr, 2)) = arr
end with
End Sub
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加