excel VBA代码不工作

我有一个如下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(启用macros的excel文件)并在另一个文件中打开。这个代码在我的机器上工作得很好。 不要在任何其他机器。 我启用了marco,并允许信任使用VBA ojbect模型。 有人找出这个问题。 两个机器中的Excel版本也是一样的 在这里输入图像说明

我想详细说一下我的意见,这是正确的build议。

首先让我重复一下 – 你需要以这种方式开启事件

 Application.EnableEvents = true 

您可以在VBA / IDE编辑器的立即窗口中运行一次。 现在我们知道了!

其次,如果您决定使用任何其他子程序(或事件,但是很奇怪)开启事件,请记住可能还有一些其他子程序,函数或加载项需要closures事件。 只要你不确定为什么事件不能正常工作,在你的macros不需要它们之后,你应该让它们不能正常工作。 因此,我的build议是每次closures文件时closures事件。 因此,您可以将此事件添加到ThisWorkbook module

 Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.EnableEvents = False End Sub 

额外的提示 。 最好的select是在开始时读取事件状态,保存这些信息直到closures文件。 你可以通过以下步骤来完成:

A)在你的文件中声明公共variables

 Public boEventsStatus as Boolean 

B)打开文件时读取状态(你需要弄清楚把这行代码放在哪里)

 boEventsStatus = Application.EnableEvents 

C)按照开始所述开启事件

D)使用这个BeforeClose事件:

 Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.EnableEvents = boEventsStatus End Sub