【问题标题】:Paste and on Error display msgbox using with statement使用 with 语句粘贴并打开错误显示 msgbox
【发布时间】:2020-10-01 21:02:07
【问题描述】:

我需要一些建议来纠正下面的代码。我有这段代码可以将粘贴行复制到另一张表以进行数据编译。而且我使用下面的 with 语句运行良好,问题是,当没有数据要粘贴时,我不知道如何用消息框结束代码。 我在上面看到了类似的问题,但是如何将代码符合下面的VBA的With语句?

以下是我从其他用户那里读到的代码,如果出错则返回消息框。 If Err Then MsgBox "没有可粘贴的内容!" 错误清除 结束如果

我的原始代码,没有返回消息框。

*Sub FnLstRow()
Application.ScreenUpdating = False
Dim LR As Long
ThisWorkbook.Worksheets("Data").Select
LR = Cells(Rows.Count, "AO").End(xlUp).Row
Cells(LR, 1).Offset(1, 0).EntireRow.Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
With Sheets("LatestData")
    .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues

End With
Application.CutCopyMode = False


Range("A1").Select
Application.ScreenUpdating = True
End Sub**

【问题讨论】:

    标签: excel vba with-statement


    【解决方案1】:

    这是一个可能不起作用的次优解决方案,但您可以尝试:我创建了一个动态数组并尝试将您的整个选择传递给它。如果选择没有值,它将选择工作表中所有剩余的单元格,并且可能太大而无法传递到数组中,从而导致运行时错误。除了创建数组和添加错误处理部分之外,我没有触及您的代码。我希望它有效大声笑

    Sub FnLstRow()
    Application.ScreenUpdating = False
    Dim LR As Long
    Dim Arr() As Variant
    
    ThisWorkbook.Worksheets("Data").Select
    LR = Cells(Rows.Count, "AO").End(xlUp).Row
    Cells(LR, 1).Offset(1, 0).EntireRow.Select
    Range(Selection, Selection.End(xlDown)).Select
    
    On Error GoTo Handler
    Arr = Selection
    On Error GoTo 0
    
    Selection.Copy
    With Sheets("LatestData")
        .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
    End With
    Application.CutCopyMode = False
    Range("A1").Select
    Application.ScreenUpdating = True
    
    Exit Sub
    
    Handler:
    
    MsgBox "Nothing to paste!"
    
    End Sub
    

    【讨论】:

    • 嗨 Winuth,非常感谢,这正是我所需要的。它现在解决了我的问题。代码运行流畅。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多