0

我有一个带有 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 模型。任何人都可以在这里解决这个问题。两种机器中的 Excel 版本也相同 在此处输入图像描述

4

1 回答 1

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
于 2013-10-07T10:49:10.807 回答