我有一张带有VBA代码的excel表格如下
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 5 Then
Dim iRet As Integer
If Not IsEmpty(Range("AZ1").Value) Then
iRet = MsgBox("You have already selectd a Size Template", _
vbOKOnly, "Select Size Template")
Exit Sub
End If
Dim arr As Variant
arr = Split(Target, ",")
Range("R14:AZ14").ClearContents
Range("R14:AZ14").NumberFormat = "@"
Range("R14", Cells(14, UBound(arr) + 18)) = WorksheetFunction.Transpose( _
WorksheetFunction.Transpose(arr))
Range("AZ1").Value2 = Target
End If
End Sub
我将excel文件保存为.xlsm(启用宏的excel文件)并在另一个文件中打开。这个代码在我的机器上工作正常。不在任何其他机器上。我启用了marco并允许Trust访问VBA ojbect模型。任何人都可以在这里找出问题所在。两个mahcines中的Excel版本也相同
答案 0 :(得分:2)
我想详细说明我的评论,这是正确的建议。
首先,让我再说一遍 - 你需要以这种方式开启事件
Application.EnableEvents = true
您可以在VBA / IDE编辑器的立即窗口中运行一次。现在我们知道就是这样!
第二,如果您决定使用任何其他子程序(或事件,但这很奇怪)打开事件,请记住可能有一些其他子程序,函数或加载项要求关闭事件。只要您不确定为什么事件不起作用,您应该在宏不再需要它们之后让它们不能正常工作。因此,我的建议是每次关闭文件时关闭事件。因此,您可以将此事件添加到ThisWorkbook module
:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.EnableEvents = False
End Sub
额外提示。最好的选择是在开始时读取事件状态,保留此信息直到您关闭文件。您可以按以下步骤执行此操作:
A)在您的文件中声明公共变量
Public boEventsStatus as Boolean
B)打开文件时读取状态(你需要弄清楚这行代码的位置)
boEventsStatus = Application.EnableEvents
C)按开头所述开启事件
D)使用此BeforeClose
事件:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.EnableEvents = boEventsStatus
End Sub