【发布时间】:2018-11-07 12:53:18
【问题描述】:
如果将在“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
我的第二个问题是我已将值格式化为“货币”,但无论如何我都会收到此错误消息(在英语中,单元格被格式化为文本)。此外,通过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
我不知道为什么,但是现在不会任何 msgbox 显示?! 此外,价格现在只会插入一次,如果我在另一个单元格中再次输入代码(一个单元格向下),代码似乎不再运行了?!
我需要重新打开 excel 才能让它再次工作。
【问题讨论】:
-
致您的编辑:问题是您的错误处理程序是静默的。如果发生错误,它会跳转到
Handler:,但什么也没有发生(根本没有消息)。因此,您不会注意到任何错误。注释掉On Error GoTo Handler以对其进行调试并稍后实施适当的错误处理:请参阅VBA Error Handling – A Complete Guide
标签: excel vba formatting msgbox