使用Excel Visual Basic为每行的MsgBox循环

时间:2015-07-10 13:25:46

标签: vba excel-vba foreach msgbox excel

这是第一次使用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

enter image description here

3 个答案:

答案 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