我有一张使用 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 上进行操作,运行没有任何问题。
几个问题:
- 您是否在代码中的某个时刻关闭了 Application.EnableEvents?
- 您提供的代码中没有 End Sub,我假设这是在复制和粘贴到 SU 时丢失的,但请仔细检查。
- 在 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