这是第一次使用Excel与VBA合作。我正在练习使用公式并使用Excel单元格和MsgBoxes显示值。
我目前的问题很可能只是一个简单的解决方法,但尚未弄明白。
我想在填充每一行后让我的MsgBox显示以下内容:
MSG popup
Socks Gross Sale is 56.37
MSG popup
Lotion Gross Sale is 59.12
..etc
但是,当我第一次尝试运行已注释掉的代码行MsgBox Range("A14:A21").Value & " Gross Sale is " & Range("F14:F21").Value
时,它会出现错误Run-time error '13': Type mismatch
,因此无效。
因此,到目前为止,我正在使用我的代码行MsgBox Range("A14:A21").Value & " Gross Sale is " & Range("F14:F21").Value
,它只在循环中连续填充Sock行。有什么建议吗?
For Each Cell In Worksheets("Sheet1").Range("B14:E21").Cells
Range("F14:F21").Formula = "=SUM((B14*D14)-((B14*D14)*E14))"
'MsgBox Range("A14:A21").Value & " Gross Sale is " & Range("F14:F21").Value
'Gives me first line only and makes pop up show twice as many times as (all)total rows
MsgBox Range("A14").Value & " Gross Sale is " & Range("F14").Value
Next
答案 0 :(得分:1)
您可以使用数组来保存工作表中的值,然后循环遍历两个数组的每个元素,在每次迭代中使用它们的索引来生成您所追求的消息。
Sub produceMsg()
Dim i As Byte
Dim arrProductName As Variant
Dim arrGrossSale As Variant
arrGrossSale = Range("F2:F9").Value
arrProductName = Range("A2:A9").Value
For i = 1 To UBound(arrGrossSale, 1)
MsgBox (arrProductName(i, 1) & " Gross sale is " & arrGrossSale(i, 1))
Next i
End Sub
从工作表填充数组时,无论您是否仅为数组提供1维,都始终生成2维数组。这就是为什么我们必须将第二维度指定为' 1'在循环数组时。希望这会有所帮助。
答案 1 :(得分:1)
你不能向Msgbox发送一个范围..它正在寻找一个字符串..你需要每次构建字符串......我推荐这样的东西:
For i = 14 To 21
MsgBox Range("a" & i).Value & " Gross Sale is " & Range("F" & i).Value
Next i
那将循环通过您想要的ROWS(又名行)...并将单元格拼接在一起,以便从中提取值......
For Each Cell
循环遍历每个Cell ......不是行..
答案 2 :(得分:0)
在旁注中,我进行了以下更新,以在MsgBox上显示两位小数:
MsgBox Range("a" & i).Value & " Gross Sale is $" & FormatNumber(Round(Range("F" & i).Value, 2), 2)
我添加了FormatNumber
,因为当我使用Round
时,它会删除第二个小数位为0
的任何数字。使用FormatNumber
保留0
加入@Ditto