如何根据B6单元格内容为D15:D54区域设置不同货币单位?
问题排查与修复方案
你代码里存在3个核心错误,修复后即可正常运行:
- 事件名称错误:VBA工作表事件没有
Worksheet_Auto这个定义,需要使用Worksheet_Change事件,才能在工作表内容修改时自动触发执行 - 对象调用错误:Else分支里错误使用
Columns("D15:D54"),Columns方法用于选中整列,不能传入区域范围,应该和前面对齐使用Range("D15:D54") - 触发逻辑冗余:原代码不管修改哪个单元格都会全量执行,建议加判断只在B6内容被修改时运行,减少不必要的性能消耗
修复后代码(直接填入单位文本)
如果你的需求是直接在D15:D54单元格内显示单位文本,直接使用以下代码即可:
Private Sub Worksheet_Change(ByVal Target As Range) ' 仅修改B6单元格时才触发逻辑 If Not Intersect(Target, Me.Range("B6")) Is Nothing Then If Me.Range("B6").Value = "San Francisco" Then Me.Range("D15:D54").Value = "Dollars ($)" Else Me.Range("D15:D54").Value = "Euros (€)" End If End If End Sub
可选方案(不覆盖原有数值,仅添加单位后缀)
如果你需要保留D15:D54原有的数值,只给数值追加单位显示,可以修改为设置单元格数字格式:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Me.Range("B6")) Is Nothing Then If Me.Range("B6").Value = "San Francisco" Then ' 可根据需要调整数字格式规则,比如把0.00改成0就不会显示小数 Me.Range("D15:D54").NumberFormat = "0.00 ""Dollars ($)""" Else Me.Range("D15:D54").NumberFormat = "0.00 ""Euros (€)""" End If End If End Sub
注意:上述代码需要放在对应工作表的代码模块中,不要放在普通模块或者ThisWorkbook模块,否则无法正常触发。
内容的提问来源于stack exchange,提问作者Nini_CoS
相关产品推荐
相关产品推荐

