我在使用 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