Excel 2010 32 位模式下的 VBA 宏

Excel 2010 32 位模式下的 VBA 宏

我有一张使用 Excel 2010 64 位保存的 Excel 表。它的代码如下

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 17 Then
Dim iRet As Integer
    Dim arr As Variant
    If Not IsEmpty(Range("B2").Value2) Then
        Exit Sub
    End If
    'Clear the values in columns
    Range("S:AZ").ClearContents

    arr = Split(Target, ",")
    Range("S15:AZ15").NumberFormat = "@"
    Range("S15", Cells(15, UBound(arr) + 19)) = WorksheetFunction.Transpose(WorksheetFunction.Transpose(arr))
    Range("AZ1").Value2 = Target

    Worksheets("MasterPage").Range("X3:X1000").ClearContents
    Worksheets("MasterPage").Range("X3:X1000").NumberFormat = "@"
    Worksheets("MasterPage").Range("X3:X" & UBound(arr) + 3) = WorksheetFunction.Transpose(arr)
End If

子目录结束

如果我尝试在 Excel 2010 32 位模式下执行保存的文件,它将被执行。有人能告诉我原因吗?谢谢

答案1

您的评论表明,要么由于某种原因未触发此特定事件,要么根本没有触发任何代码(我知道 Excel 有时可以默认阻止代码执行,因此请注意这一点)

尝试查看是否有任何代码被执行。您可以尝试将宏连接到按钮以明确触发代码,以帮助您找出问题所在。

答案2

我尝试在 32 位 Excel 2010 上进行操作,运行没有任何问题。

几个问题:

  1. 您是否在代码中的某个时刻关闭了 Application.EnableEvents?
  2. 您提供的代码中没有 End Sub,我假设这是在复制和粘贴到 SU 时丢失的,但请仔细检查。
  3. 在 worksheet_change 事件上是否会运行任何东西?

此外,我会对您的代码进行一些更改,以帮助它更高效地运行。目前,每次您的程序更改另一个单元格时,它都会再次运行。我添加了几行代码来关闭事件触发器并再次打开它们,以防止程序多次运行。

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Row = 1 And Target.Column = 17 Then
        Dim iRet As Integer
        Dim arr As Variant
        If Not IsEmpty(Range("B2").Value2) Then
            Application.EnableEvents = True
            Exit Sub
        End If
        'Clear the values in columns
        Range("S:AZ").ClearContents

        arr = Split(Target, ",")
        Range("S15:AZ15").NumberFormat = "@"
        Range("S15", Cells(15, UBound(arr) + 19)) = WorksheetFunction.Transpose(WorksheetFunction.Transpose(arr))
        Range("AZ1").Value2 = Target

        Worksheets("MasterPage").Range("X3:X1000").ClearContents
        Worksheets("MasterPage").Range("X3:X1000").NumberFormat = "@"
        Worksheets("MasterPage").Range("X3:X" & UBound(arr) + 3) = WorksheetFunction.Transpose(arr)
    End If
    Application.EnableEvents = True
End Sub

相关内容