使用 Excel Visual Basic 对每一行进行 MsgBox 循环

MsgBox loop for each row using Excel Visual Basic

这是第一次与 VBA 和 Excel 合作。我正在练习使用公式并通过使用 Excel 单元格和 MsgBoxes 来显示值。

我当前的问题很可能是一个简单的修复,但尚未解决。

我想让我的 MsgBox 在填充每一行后显示以下内容:

消息弹出窗口

Socks Gross Sale is 56.37

消息弹出窗口

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

您可以使用数组保存工作表中的值,然后遍历两个数组的每个元素,在每次迭代中使用它们的索引来生成您想要的消息。

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”的原因。希望这有帮助。

您不能将范围发送到 Msgbox ..它正在寻找一个字符串..您每次都需要构建该字符串...我推荐这样的东西:

For i = 14 To 21

    MsgBox Range("a" & i).Value & " Gross Sale is " & Range("F" & i).Value

Next i

这将遍历您想要的 ROWS(又名行)...并将单元格拼接到您想要从中提取值的位置...

For Each Cell

循环遍历每个单元格...而不是行..

附带说明,我进行了以下更新以在 MsgBox 上显示两位小数:

MsgBox Range("a" & i).Value & " Gross Sale is $" & FormatNumber(Round(Range("F" & i).Value, 2), 2)

我添加了 FormatNumber,因为当我使用 Round 时,它会删除任何小数点后第二位是 0 的数字。使用 FormatNumber 它保持 0

添加到@Ditto