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