ExecuteExcel4Macro方法在Mac上的Excel 2011中失败,并显示1004错误

所以我是另一个想要使用ExecuteExcel4Macro方法调用从特定的单元格和查找范围在封闭的工作簿中检索数据。 我在这里和其他地方见过很多的例子和答案。 我正在(或将要)使用John Walkenbachlogging的一个例程,并在这里和其他论坛上引用。 (请参阅9311188的主题)

对ExecuteExcel4Macro的调用失败,出现错误“1004 – 对象'_Global'失败”的方法'ExecuteExcel4Macro'。 对我来说,这并不是什么好事。 我已经双重检查了目录path,文件和表名,所有这一切。 DIR()函数find文件没问题。 我甚至把这些文件放在根目录中,以消除path的复杂性,或者消除Method的参数。 一个复杂的是,我在OS 10.8的Mac上,并使用Excel 2011. Mac OS的目录分隔符使用“:”而不是“\”。

但是我并不需要深入了解这个问题,因为这个问题似乎是关于单元参考寻址的基础。 我无法使ExecuteExcel4Macro在同一个工作表中使用Excel函数成功执行,这个Excel函数可以处理任何单元格或范围,不必介意远程closures的工作表引用。 所以我已经将我的示例代码压缩到基本要素 – 没有远程引用,只是在一个工作表中的单元格上的函数。

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

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;
arg = "SUM(2,5,8)"好吧,15;
arg = "INFO(""directory"")" ,带macros的活动工作簿的目录path;
arg = "INFO(""numfile"")"工作簿中的工作表数量(加上1?无论如何)。

所以从这我知道我正确访问方法; 它确实有效; 你不要在参数中使用“=” 和两个INFO()函数告诉我,它能够访问有关此工作簿的信息; 即它不需要明确的完整目录path来查找自己。

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

arg = "SUM(A32:A34)" 13 – types不匹配
正如所料,该方法需要R1C1样式引用。

arg = "SUM(ValList)" 13 – types不匹配
好吧,不要太惊讶,所以它不会用命名的范围。 太糟糕了,我在指望。

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

arg = "SUM(R32C1:R34C1)" 1004 – 对象'_Global'的方法'ExecuteExcel4Macro'失败
用R1C1风格明确地设置参数将失败。

如果这是由于一些简单而明显的事情,我会感到非常尴尬。 但我会冒这个风险,因为我很难过。
如果这不是那么简单,那么,大师,就有了。 如果我得到这个简单的引用寻址问题,那么远程文件引用也应该落实到位。

我将特别感谢任何能够在Windows版本中testing这些内容的人,并让我知道你得到了什么。 这是我最担心的问题 – 我不能解决的Mac兼容问题。

感谢所有提前。
PS:我希望我已经正确地标记了所有上述内容,我试了一下。

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

引用:

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

这是什么为我工作(MS Excel 2010在Windows smthg):你必须指定工作簿+工作表之前引用单元格; 并进行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 

你有没有尝试将arg定义为Variant而不是String