我已经制作了一些VBA代码来解决这个问题:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Value <> Empty Then
Target.Value = UCase(Target.Value)
End If
End Sub
但是当我尝试在字段中输入一些数据时,Excel会在没有单个错误消息的情况下停止工作。
有谁知道这个问题可以来自哪里?
答案 0 :(得分:1)
您可能已将Application.EnableEvents设置为False。在VBA编辑器中打开立即窗口,然后输入application.EnableEvents = True
,然后按ENTER键重新打开它们。
此外,如果您不想导致更改工作表并重新触发事件的循环,则需要禁用事件。 ISEMPTY函数在VBA中略有不同,您的代码可以更新为以下内容,这也将处理更改不仅仅1个单元格
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim cell As Variant
Application.EnableEvents = False
For Each cell In Target
If Not IsEmpty(cell.Value) Then
cell.Value = UCase(cell.Value)
End If
Next cell
Application.EnableEvents = True
End Sub
或者如果您想将此限制仅限制为1个单元格更改,请将每个循环替换为If Target.rows.count = 1 AND Target.columns.count = 1....
答案 1 :(得分:0)
您可能没有正确的回调函数:
来自Events And Event Procedures In VBA
对于工作表(工作表和图表工作表)级别事件,事件过程代码必须放在与该工作表关联的工作表模块中。工作簿级别事件必须放在ThisWorkbook代码模块中。如果事件过程不在适当的模块中,VBA将无法找到它,并且不会执行事件代码。