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

时间:2012-10-04 09:01:10

标签: excel-vba vba excel

我已经制作了一些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会在没有单个错误消息的情况下停止工作。

有谁知道这个问题可以来自哪里?

2 个答案:

答案 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将无法找到它,并且不会执行事件代码。