Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Excel中自动将小写字段转换为大写字段?_Excel_Vba - Fatal编程技术网

如何在Excel中自动将小写字段转换为大写字段?

如何在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作为范围)

我已生成一些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作为范围)
如果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)。。。但你可能是对的,可能有一个触发事件的周期,我检查一下,谢谢