如何在Excel中自动将小写字段转换为大写字段?
我已生成一些VBA代码来解决此问题:如何在Excel中自动将小写字段转换为大写字段?,excel,vba,Excel,Vba,我已生成一些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 Private子工作簿\u SheetChange(ByVal Sh作为对象,ByVal Target作为范围)
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
Private子工作簿\u SheetChange(ByVal Sh作为对象,ByVal Target作为范围)
如果Target.Value为空,则
Target.Value=UCase(Target.Value)
如果结束
端接头
但当我尝试在字段中输入一些数据时,Excel会停止工作,而不会显示一条错误消息
有人知道这个问题是从哪里来的吗?您可能没有正确的回调函数: 从 对于工作表(工作表和图表工作表)级别的事件,事件程序代码必须放在与该工作表关联的工作表模块中。工作簿级别的事件必须放在ThisWorkbook代码模块中。如果事件过程不在适当的模块中,VBA将无法找到它,并且事件代码将不会执行
您的回调函数可能不在正确的位置: 从 对于工作表(工作表和图表工作表)级别的事件,事件程序代码必须放在与该工作表关联的工作表模块中。工作簿级别的事件必须放在ThisWorkbook代码模块中。如果事件过程不在适当的模块中,VBA将无法找到它,并且事件代码将不会执行
您可能已将Application.EnableEvents设置为False。在VBA编辑器中打开即时窗口,键入
application.EnableEvents=True
,然后输入以重新启用它们
此外,如果不想导致更改工作表和重新触发事件的循环,则需要禁用事件。ISEMPTY函数在VBA中稍有不同,您的代码可以更新为以下内容,这也将处理多个单元格的更改
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
或者,如果要将此运行限制为仅更改一个单元格,请将for each循环替换为
如果Target.rows.count=1和Target.columns.count=1….
您可能已将Application.EnableEvents=False。在VBA编辑器中打开即时窗口,键入application.EnableEvents=True
,然后输入以重新启用它们
此外,如果不想导致更改工作表和重新触发事件的循环,则需要禁用事件。ISEMPTY函数在VBA中稍有不同,您的代码可以更新为以下内容,这也将处理多个单元格的更改
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
或者,如果您想将此运行限制为仅更改一个单元格,请将for each循环替换为
if Target.rows.count=1和Target.columns.count=1….
实际上它位于正确的位置,我将它放在“this Worbook”MSExcel对象中,以便它适用于所有工作簿,而不仅仅是第一个工作表。无论如何,我试着把它放在你说的地方,在一个空白的Excel项目中,但它不起作用。实际上,它在正确的位置,我把它放在“This Worbook”MSExcel对象中,这样它就适用于所有工作簿,而不仅仅是第一个工作表。不管怎样,我试着把它放在你说的地方,在一个空白的Excel项目中,但它不起作用有趣的是,代码在Excel停止之前就起作用了……你把enableEvents设置为false了吗?否则,它将再次自触发(或任何其他事件处理程序)。有趣的是,代码在Excel停止之前工作……您是否将enableEvents设置为false?在完整的代码中,我这样做了:如果Target.Cells.Count=1和(Target.Column=1或Target.Column=4)。。。但是你可能是对的,可能有一个触发事件的循环,我检查了这个,感谢在完整的代码中,我这样做了:如果Target.Cells.Count=1和(Target.Column=1或Target.Column=4)。。。但你可能是对的,可能有一个触发事件的周期,我检查一下,谢谢