尝试从变量范围复制值并使用该范围来确定要添加到表中的行数

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

我的 VBA 经验极其有限。我在 M19:T39 的名为“Daily Dashboard”的工作表中有数据。这些需要每天作为条目复制到名为“报告工具”的工作表上名为“报告日志”的表中,以作为历史记录。要复制的行数是可变的。因此,我需要代码帮助来确定有多少行,将它们添加到表中,然后复制数据。以下是我到目前为止所想到的,当我只复制一行时这非常容易,但现在我陷入了困境。我在遇到问题的地方打了问号。

Sub Dispatch_Report_Save()

'Confirm with user

    If MsgBox("WARNING: Continuing will add a new date entry to the Dispatch Report Log and should only be used once per day. Update Button should be used to make changes once already saved. Would you like to continue? ", vbYesNo) = vbNo Then Exit Sub
    
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    
    Set sh1 = ActiveWorkbook.Sheets("Daily Dashboard")
    Set sh2 = ActiveWorkbook.Sheets("Reporting Tool")
    
'Set active worksheet
    Worksheets("Reporting Tool").Activate
    
'Add new Rows to Tables
    Set newrow = Sheets("Reporting Tool").ListObjects("ReportingLog").ListRows.Add(?????????)

'Copy values
    sh2.Range("?????????").Select
    Selection.Copy
    sh2.Range("?????????").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

'Set active worksheet
    Worksheets("Daily Dashboard").Activate
    
'Select Cell
    sh1.Range("E6").Select
    
'Success Message
    MsgBox "Daily Dispatch Statistics have been saved."

End Sub
excel vba
1个回答
0
投票

值得一读:

如何避免在 Excel VBA 中使用 Select

Sub Dispatch_Report_Save()
    'Confirm with user
    If MsgBox("WARNING: Continuing will add a new date entry to the Dispatch Report Log and should only be used once per day. Update Button should be used to make changes once already saved. Would you like to continue? ", vbYesNo) = vbNo Then Exit Sub
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Set sh1 = ActiveWorkbook.Sheets("Daily Dashboard")
    Set sh2 = ActiveWorkbook.Sheets("Reporting Tool")
    Dim lastRow As Long: lastRow = sh1.Cells(sh1.Rows.Count, "M").End(xlUp).Row
    Dim srcRng As Range, RowCnt As Long, ColCnt As Long
    Set srcRng = sh1.Range("M19:T" & lastRow)
    RowCnt = srcRng.Rows.Count
    ColCnt = srcRng.Columns.Count
    Dim rCell As Range
    With Sheets("Reporting Tool").ListObjects("ReportingLog")
        Set rCell = .Range.Columns(1).Cells(.Range.Columns(1).Cells.Count + 1).Resize(RowCnt, 1)
        rCell.Value = Date ' Col date
        rCell.Offset(, 1).Value = srcRng.Columns(1).Value ' Col Job
        rCell.Offset(, 2).Resize(, ColCnt - 2).Value = srcRng.Columns(4).Resize(, ColCnt - 2).Value ' Other Cols
        .Resize sh2.Range("A2").CurrentRegion ' expand table
    End With
    'Success Message
    MsgBox "Daily Dispatch Statistics have been saved."
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.