Excel VBA 格式化和变量输出并不总是有效
Excel VBA formatting and variable output not always working
如果要在行 "A" 中输入特定值,则应将特定价格插入行 "D",然后输入的价格应显示在消息框中。
第一部分只是一个简单的设置,但是对于 msgbox 我实际上遇到了一些问题。
也许是因为代码的过程?!价格就在单元格内的这一刻,我的代码已经在尝试在空单元格中获取这个价格?! - 不确定。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Handler
Dim price As String
If Target.Column = 1 And Target.Value = "XY01" Then
Application.EnableEvents = False
Target.Offset(0, 3) = Format(0.7, "currency")
Application.EnableEvents = True
price = ActiveCell.Offset(0, 3).Value
MsgBox "The price is now " & price
End If
Handler:
End Sub
真正奇怪的是,在第一行内,它会显示为例外:
就在每隔一行,它会像这样显示(它只是空的):
我的第二个问题是,我已将值格式化为 "currency",但无论如何我都会收到此错误消息(在英语中,单元格被格式化为文本)。此外,通过 excel 工具格式化单元格,错误消息不会消失。
有解决这个问题的想法吗?
谢谢你们。
==============
编辑
我已将我的代码更新为以下内容,因此我能够解决关于我的值只是文本的注释的第二个问题。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Handler
Dim price As String
If Target.Column = 1 And Target.Value = "XY01" Then
Application.EnableEvents = False
Target.Offset(0, 3).Value = 0.7
Target.Offset(0, 3).NumberFormat = "currency"
Application.EnableEvents = True
price = Target.Offset(0, 3).Text
MsgBox "The price is now " & price
End If
Handler:
End Sub
不知道为什么,现在 any msgbox 都不会显示了?!
此外,如果我在另一个单元格(向下一个单元格)中再次输入代码,价格现在只会插入一次,代码似乎不会再次 运行?!
我需要重新打开 excel 才能再次运行。
Format function总是returns一个string/text.
所以这里:Target.Offset(0, 3) = Format(0.7, "currency")
你写的不是数值,而是文字。
改为写入值并设置单元格的数字格式:
Target.Offset(0, 3).Value = 0.7
Target.Offset(0, 3).NumberFormat = "#,##0.00 $"
然后您可以读取单元格的 .Text
(而不是 .Value
)以将其格式化为单元格中所示:
Dim price As Sting
price = Target.Offset(0, 3).Text
MsgBox "The price is now " & price
或读取单元格的值并根据需要设置格式:
Dim price As Double
price = Target.Offset(0, 3).Value
MsgBox "The price is now " & Format(price, "#,##0.00 $")
你能试试改一下这行吗:
Dim price As Double
祝你好运
如果要在行 "A" 中输入特定值,则应将特定价格插入行 "D",然后输入的价格应显示在消息框中。
第一部分只是一个简单的设置,但是对于 msgbox 我实际上遇到了一些问题。 也许是因为代码的过程?!价格就在单元格内的这一刻,我的代码已经在尝试在空单元格中获取这个价格?! - 不确定。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Handler
Dim price As String
If Target.Column = 1 And Target.Value = "XY01" Then
Application.EnableEvents = False
Target.Offset(0, 3) = Format(0.7, "currency")
Application.EnableEvents = True
price = ActiveCell.Offset(0, 3).Value
MsgBox "The price is now " & price
End If
Handler:
End Sub
真正奇怪的是,在第一行内,它会显示为例外:
就在每隔一行,它会像这样显示(它只是空的):
我的第二个问题是,我已将值格式化为 "currency",但无论如何我都会收到此错误消息(在英语中,单元格被格式化为文本)。此外,通过 excel 工具格式化单元格,错误消息不会消失。
有解决这个问题的想法吗?
谢谢你们。
==============
编辑
我已将我的代码更新为以下内容,因此我能够解决关于我的值只是文本的注释的第二个问题。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Handler
Dim price As String
If Target.Column = 1 And Target.Value = "XY01" Then
Application.EnableEvents = False
Target.Offset(0, 3).Value = 0.7
Target.Offset(0, 3).NumberFormat = "currency"
Application.EnableEvents = True
price = Target.Offset(0, 3).Text
MsgBox "The price is now " & price
End If
Handler:
End Sub
不知道为什么,现在 any msgbox 都不会显示了?! 此外,如果我在另一个单元格(向下一个单元格)中再次输入代码,价格现在只会插入一次,代码似乎不会再次 运行?!
我需要重新打开 excel 才能再次运行。
Format function总是returns一个string/text.
所以这里:Target.Offset(0, 3) = Format(0.7, "currency")
你写的不是数值,而是文字。
改为写入值并设置单元格的数字格式:
Target.Offset(0, 3).Value = 0.7
Target.Offset(0, 3).NumberFormat = "#,##0.00 $"
然后您可以读取单元格的 .Text
(而不是 .Value
)以将其格式化为单元格中所示:
Dim price As Sting
price = Target.Offset(0, 3).Text
MsgBox "The price is now " & price
或读取单元格的值并根据需要设置格式:
Dim price As Double
price = Target.Offset(0, 3).Value
MsgBox "The price is now " & Format(price, "#,##0.00 $")
你能试试改一下这行吗:
Dim price As Double
祝你好运