在 VBA 中不循环打印 MsgBox 内的范围值

在 VBA 中不循环打印 MsgBox 内的范围值

我在使用 Excel vba 时遇到一个问题,我想在消息框中打印范围值,例如

MsgBox "Sheets("sheet1").Range("A1:D1")

我知道使用像单元格这样的循环是可能的

for i=1 to 4
MsgBox "Sheets("Sheet1").Cells(1,i)
next i

有什么方法可以在 VBA 中不循环地执行此操作吗

谢谢

答案1

你不需要循环:

Sub test()
    Dim r As Range, ary
    Set r = Sheets("Sheet1").Range("A1:D1")
    ary = Application.Transpose(Application.Transpose(r.Value))
    MsgBox Join(ary, " ")
End Sub

在此处输入图片描述

或者:

Sub test()
    Dim r As Range, ary
    Set r = Sheets("Sheet1").Range("A1:D1")
    With Application
         MsgBox Join(.Transpose(.Transpose(r)), " ")
    End With
End Sub

编辑#1:

如果你有Excel 365你可以使用:

Sub test365()
    Dim r As Range, ary
    Set r = Sheets("Sheet1").Range("A1:D1")
    With Application
         MsgBox .TextJoin(" ", True, r)
    End With
End Sub

答案2

如果您希望范围内的每个单元格都有一个消息框,那么最好的办法是一个循环。

您提供的循环可以工作,但以下可能更好,因为它还处理由多行组成的范围:

Dim var As Variant

For Each var In Sheets("sheet1").Range("A1:D2")
    MsgBox var
Next var

相关内容