【问题标题】:ExecuteExcel4Macro Method fails in Excel 2011 on Mac with 1004 ErrorExecuteExcel4Macro 方法在 Mac 上的 Excel 2011 中失败,出现 1004 错误
【发布时间】:2014-12-10 22:59:17
【问题描述】:

因此,我是另一个希望使用 ExecuteExcel4Macro 方法调用从特定单元格中检索数据并在已关闭工作簿中查找范围的人。我在这里和其他地方看到了很多例子和问题的答案。我正在(或将要)使用约翰·沃肯巴赫(John Walkenbach)的一个变体例程,并在此处和其他论坛上引用。 (请参阅 9311188 的线程。)

对 ExecuteExcel4Macro 的调用失败并出现错误“1004 - 对象 '_Global' 的方法 'ExecuteExcel4Macro' 失败”。对我来说,这不是很多事情要做。我已经仔细检查了目录路径、文件和工作表名称,所有这些。 DIR() 函数发现文件正常。我什至将文件放在根目录中以消除路径复杂性或方法参数过长。一个复杂的问题是我在一台装有 OS 10.8 并使用 Excel 2011 的 Mac 上。Mac OS 使用“:”而不是“”作为目录分隔符。

但我真的不需要深入探讨所有这些,因为问题似乎与单元格引用寻址有关。我无法让 ExecuteExcel4Macro 在同一个工作表中成功执行,并使用一个 Excel 函数来处理任何单元格或范围,更不用说远程、封闭的工作表引用了。因此,我将示例代码浓缩为基本要素——没有远程引用,仅在一个工作表中的单元格上运行。

在下面的示例中,我有一个简单的例程,它执行一些示例 Excel 函数并显示带有成功结果或错误消息的 MessageBox,以及方法调用的参数。还有一个函数可以在需要时将 A1 样式引用转换为 R1C1。函数列表在例程中,只需根据需要注释/取消注释以执行要测试的任何一个。

Function MakeR1C1(A1Formula As String) As String

MakeR1C1 = Application.ConvertFormula( _
    Formula:=A1Formula, _
    fromReferenceStyle:=xlA1, _
    toReferenceStyle:=xlR1C1, _
    ToAbsolute:=xlAbsolute)

End Function

Sub TestExcel4Macro()
    On Error GoTo ErrorTrap
    Dim arg As String

'    arg = "GET.CELL(42)"
'    arg = "CHAR(65)"
'    arg = "LEN(""ABCDE"")"
'    arg = "SUM(2,5,8)"
'    arg = "INFO(""directory"")"
'    arg = "INFO(""numfile"")"
'    arg = "SUM(A32:A34)"
'    arg = "SUM(ValList)"
'    arg = MakeR1C1("SUM(A32:A34)")
'    arg = "SUM(R32C1:R34C1)"

    Rtn = ExecuteExcel4Macro(arg)

        MsgBox "COMPLETED" & Chr(13) & _
                    "arg: " & arg & Chr(13) & _
                    "Return Value: " & Rtn
Exit Sub

ErrorTrap:
    Beep
    MsgBox "FAILED" & Chr(13) & _
                    "arg: " & arg & Chr(13) & _
                    "Error number: " & Err & Chr(13) & _
                    Error(Err)
End Sub

前六个都可以正常工作,返回您期望的值:

arg = "GET.CELL(42)"         这将返回左边距,或者其他任何内容;
arg = "CHAR(65)"             很好,你得到一个“A”;
arg = "LEN(""ABCDE"")"       很好,这是 5;
@ 987654325@ 好的,15;
arg = "INFO(""directory"")"  是的,带有宏的活动工作簿的目录路径;
arg = "INFO(""numfile"")"    以及工作簿中的工作表数(加 1?随便)。

因此,我知道我正在正确访问该方法;它确实有效;您不要在参数中使用“=”;并且两个 INFO() 函数告诉我它能够访问有关此工作簿的信息;即它不需要明确的完整目录路径来找到自己。

现在一些函数引用了工作表中的单元格。这些都可以作为工作表中单元格中的公式正常工作。 但它们作为对方法的调用失败,并带有相应的错误代码:

arg = "SUM(A32:A34)"            13 - 类型不匹配
正如预期的那样,该方法需要 R1C1 样式引用。

arg = "SUM(ValList)"            13 - 类型不匹配
好的,这并不奇怪,所以它不适用于命名范围。太糟糕了,我指望着那个。

arg = MakeR1C1("SUM(A32:A34)")  1004 - 对象“_Global”的方法“ExecuteExcel4Macro”失败
现在的困惑。 MakeR1C1() 将 A1 寻址转换为“SUM(R32C1:R34C1)”。

arg = "SUM(R32C1:R34C1)"       1004 - 对象“_Global”的方法“ExecuteExcel4Macro”失败
并且使用 R1C1 样式显式设置参数也会失败。

如果这是因为一些简单明了的事情,我会非常尴尬。但我会冒险,因为我被难住了。
如果它不是那么简单,那么,大师们,就去做吧。如果我解决了这个简单的引用寻址问题,那么远程文件引用也应该到位。

我会特别感谢任何可以在 Windows 版本中测试这些并告诉我你得到什么的人。这就是我最担心的问题——我无法修复的 Mac 不兼容问题。

在此先感谢大家。
PS:我希望我已经正确标记了以上所有内容,我试过了。

编辑:也许我应该提到要运行我的 TestExcel4Macro() 子例程,我只是在 VBA 编辑器中按 F5 键。

【问题讨论】:

  • 嗨,我在使用 MS Excel 2010 的 Windows 中遇到完全相同的错误。

标签: excel vba excel-2011 excel-4.0


【解决方案1】:

引用:

Microsoft Excel 4.0 宏不在 当前工作簿或工作表。这意味着任何引用都应该是 external 并且应该指定一个明确的工作簿名称。例如,要 在 Book1 中运行 Microsoft Excel 4.0 宏“My_Macro”,您必须使用 “Book1!My_Macro()”。如果您不指定工作簿名称,则此
方法失败。

【讨论】:

  • 嗨 J 巴克。感谢您的快速回复。如果我理解你在说什么,那么我会恭敬地不同意。可以在该工作簿中调用存储在工作簿代码模块中的宏,而无需显式名称前缀或说明符。其工作表中的按钮或其他控件似乎不需要它,用户定义的函数也不需要。如果它是存储在调用者之外的另一个工作簿中的宏,那么,是的。无论如何,我不认为这是我的问题。我的问题是调用内置的 ExecuteExcel4Macro VBA 方法。但也许我理解错了。
  • 我直接从该方法的 MS 帮助中粘贴了文本。如果您认为自己比微软了解更多,我和其他任何人都无法帮助您。
  • 哇。对不起。我真的不是想激怒你。不,我认为我知道的并不比 MS 多。我确实认为你或其他人可以帮助我。是的,我在该方法的页面上看到了该段落,但我无法看到它在此处如何应用。但我会更努力地考虑它。冒着让事情变得更糟的风险,您能否在我的示例代码中描述我需​​要做什么才能使其正常工作?
  • 您只需将工作簿和工作表引用添加到您的范围。
【解决方案2】:

您是否尝试将 arg 定义为 Variant 而不是 String?

【讨论】:

    【解决方案3】:

    这对我有用(Windows smthg 下的 MS Excel 2010):您必须在引用单元格之前指定工作簿 + 工作表;并进行 R1C1 转换。

    Sub TestExcel4Macro()
        On Error GoTo ErrorTrap
        Dim arg As String
        Dim this_workbook As String
        ' workbook named "myBook" having a sheet called "mySheet" where my data is
        this_workbook = "[myBook.xlsm]mySheet!"
    
        arg = "SUM(" & this_workbook & "A32:A34)"
        arg = MakeR1C1("SUM(A32:A34)")
    
        Rtn = ExecuteExcel4Macro(arg)
        MsgBox "COMPLETED" & Chr(13) & _
                     "arg: " & arg & Chr(13) & _
                     "Return Value: " & Rtn
    Exit Sub
    
    ErrorTrap:
        Beep
        MsgBox "FAILED" & Chr(13) & _
                        "arg: " & arg & Chr(13) & _
                        "Error number: " & Err & Chr(13) & _
                        Error(Err)
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多