将数据传输到新工作表时检测我的最后一行

问题描述 投票:0回答:1

所以我在第一张纸上开了一张收据表格。我想要的是,当我按下打印按钮时,收据表上的项目(基于已填充的行数从A10-A19行开始)被转移到称为交易历史记录的新表中。我的代码的问题在于,它不会检测到最后填充的行(在本例中为第14行),因此直到表单的最底部转移到“事务历史记录表”。有人可以修复我的代码吗?谢谢

invoice sheet

transaction history sheet

代码:

Private Sub CB_Print_Click()
Dim rng1, rng2, cell1, cell2, cell As Range
Dim lastRow1 As Long
Dim lr4 As Long

'Buat caritau baris terakhir ada dimana
lastRow1 = Sheets("NotaTandaTerima").Range("B" & Rows.Count).End(xlUp).Row
Set rng1 = Worksheets("NotaTandaTerima").Range("B10:B" & lastRow1)
'Error handling kalau sheet ga ada isinya gbsa print
If Sheets("NotaTandaTerima").Range("B10") = "" Then
    MsgBox "TRANSAKSI GABOLEH KOSONG", vbCritical, "Error"
    Cancel = True
Else
    For Each cell1 In rng1
        ' Buat taro data ke sheet daftar transaksi
        lr4 = Sheets("DaftarTransaksi").Range("B" & Rows.Count).End(xlUp).Row + 1
        Sheets("DaftarTransaksi").Range("A" & lr4).Value = Sheets("NotaTandaTerima").Range("C3")
        Sheets("DaftarTransaksi").Range("B" & lr4).Value = "1"
        Sheets("DaftarTransaksi").Range("C" & lr4).Value = Sheets("NotaTandaTerima").Range("B6")
        Sheets("DaftarTransaksi").Range("D" & lr4).Value = cell1.Offset(0, 0)
        Sheets("DaftarTransaksi").Range("E" & lr4).Value = cell1.Offset(0, 1)
        Sheets("DaftarTransaksi").Range("F" & lr4).Value = cell1.Offset(0, 2)
        Next cell1

End If
'Sheets("NotaTandaTerima").PrintOut
Sheets("NotaTandaTerima").Range("D4").Value = Sheets("NotaTandaTerima").Range("D4").Value + 1
End Sub
excel vba
1个回答
0
投票

[不确定这是否行得通,但是如果您的数据的最后一行是保存值(.......)的行,并且该行之前的单元格为空,并且此空白前的单元格包含一个值,则表示您的最后一行始终为real last row -3,所以也许可以使用

Private Sub CB_Print_Click()
Dim rng1 As Range, rng2 As Range, cell1 As Range, cell2 As Range, cell As Range
Dim lastRow1 As Long
Dim lr4 As Long
Dim RealLR As Long

'Buat caritau baris terakhir ada dimana
RealLR = Sheets("NotaTandaTerima").Range("B" & Rows.Count).End(xlUp).Row
lastRow1 = RealLR - 3

Do
    With Worksheets("NotaTandaTerima").Range("B" & lastRow1)
       If Len(.Value) <> 0 And .Value <> "Total" Then
           Exit Do
       Else
           lastRow1 = lastRow1 - 1
       End If
    End With
Loop

Set rng1 = Worksheets("NotaTandaTerima").Range("B10:B" & lastRow1)
'Error handling kalau sheet ga ada isinya gbsa print
If Sheets("NotaTandaTerima").Range("B10") = "" Then
    MsgBox "TRANSAKSI GABOLEH KOSONG", vbCritical, "Error"
    Cancel = True
Else
    For Each cell1 In rng1
        ' Buat taro data ke sheet daftar transaksi
        lr4 = Sheets("DaftarTransaksi").Range("B" & Rows.Count).End(xlUp).Row + 1
        Sheets("DaftarTransaksi").Range("A" & lr4).Value = Sheets("NotaTandaTerima").Range("C3")
        Sheets("DaftarTransaksi").Range("B" & lr4).Value = "1"
        Sheets("DaftarTransaksi").Range("C" & lr4).Value = Sheets("NotaTandaTerima").Range("B6")
        Sheets("DaftarTransaksi").Range("D" & lr4).Value = cell1.Offset(0, 0)
        Sheets("DaftarTransaksi").Range("E" & lr4).Value = cell1.Offset(0, 1)
        Sheets("DaftarTransaksi").Range("F" & lr4).Value = cell1.Offset(0, 2)
        Next cell1

End If
'Sheets("NotaTandaTerima").PrintOut
Sheets("NotaTandaTerima").Range("D4").Value = Sheets("NotaTandaTerima").Range("D4").Value + 1
End Sub

这样,lastrow1将是22而不是25。然后向后循环,直到找到带有值的第一个单元格(且值不得为单词Total)。

查看您的图像,该循环将在第14行(您希望的那一行)处停止。

希望这会有所帮助

重要:请注意,.Value <> "Total" 区分大小写

© www.soinside.com 2019 - 2024. All rights reserved.