【问题标题】:I need to show a msgbox saying "Please select a maximum of 8 data." when the user selected more than 8 cells in the worksheet我需要显示一个消息框,上面写着“请选择最多 8 个数据”。当用户在工作表中选择超过 8 个单元格时
【发布时间】:2019-02-07 00:50:21
【问题描述】:

所以在另一个工作表中最多允许复制8个数据。每次用户选择超过8个数据时,都会发生错误。如何显示我自己的 msgbox 而不是 VBA 提供的默认 msgbox。

我对 VBA 完全陌生。

这是我的代码。它有效,但我认为它适用于用户可能遇到的所有错误。

Sub CopySelectedCells()

    On Error GoTo EncounteredError

        Worksheets("3inch_OD7133KS ").Activate
        Selection.Resize(, 4).Copy Destination:=Worksheets("Form").Range("b7")
        Selection.Resize(, 4).Copy Destination:=Worksheets("Form").Range("b27")
        Selection.Resize(, 4).Copy Destination:=Worksheets("Form").Range("b47")

    Exit Sub

EncounteredError:

    MsgBox "ERROR OCCURED: Please choose a MAXIMUM of 8 data."


End Sub

【问题讨论】:

  • 可以探索Worksheet_SelectionChange 事件并使用Target.Cells.Count 来确定如何选择单元格。 (但只有在您熟悉事件每次触发时的效果时才使用该事件)
  • 您能否分享您的代码 - 现在我们只能为您提供通用解决方案,这些解决方案总是会出现后续问题/请求的编辑,只需分享您的代码就可以避免
  • 请将代码添加到您的问题中 - 完成后我会查看 :)
  • 嗨@urdearboy。我已经编辑了帖子并添加了我的代码。非常感谢您抽出宝贵的时间。
  • 应该选择8行吗? 8列?您需要的选择大小是多少? 8X1?

标签: excel vba msgbox


【解决方案1】:

On Error GoTo Handler 通常被认为是不好的做法。您应该始终尽可能尝试编码出预期的错误以提高可靠性。在这种情况下,我们可以在使用.Rows.Count.Columns.Count 执行任何操作之前简单地检查.Selection 的大小。我们需要将 sub 限制为仅在返回 8 x 1 范围时才起作用。


如果这就是你的潜艇所做的一切,那么这应该没问题....

Sub Selections()

If Selection.Rows.Count <> 8 Or Selection.Columns.Count <> 1 Then
    MsgBox "Error Message Here"
    Exit Sub
Else
    Selection.Resize(, 4).Copy
        With Worksheets("3inch_OD7133KS ")
            .Range("B7").PasteSpecial xlPasteValues
            .Range("B27").PasteSpecial xlPasteValues
            .Range("B47").PasteSpecial xlPasteValues
        End With
End If

End Sub

如果您在验证所选范围的大小后还有更多代码要添加,您可以像这样嵌套您的测试....

Sub Selections()

If Selection.Rows.Count <> 8 Or Selection.Columns.Count <> 1 Then
    MsgBox "Error Message Here"
    Exit Sub
End If

Selection.Resize(, 4).Copy
    With Worksheets("Sheet1")
        .Range("B7").PasteSpecial xlPasteValues
        .Range("B27").PasteSpecial xlPasteValues
        .Range("B47").PasteSpecial xlPasteValues
    End With

'More code here....

End Sub

【讨论】:

  • 这太棒了!非常感谢。 @urdearboy 将尝试代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
相关资源
最近更新 更多