【发布时间】:2021-05-12 23:03:52
【问题描述】:
已开始掌握 Excel VBA 编程技能,尝试在较旧的 32 位和 64 位 Windows 10 之间共享代码,并在 Mac 上模拟 Office 365 Windows:其中一个平台无法识别最近添加的动态数组“{ }”(多单元格数组)和“@”(隐式交集运算符),而另一个平台无法识别带有 Formula2 构造的“Cells.Replace”命令,但正在使用“间接”和“&”(连接)作为变量唯一标识符(标准查找函数失败的地方),但 Excel 将它们视为数组。一个平台需要 Formula2(Mac 跳过指令),另一个甚至不使用它编译(完全停止),没有它,宏代码崩溃(Mac 必须“读取”工作表上的公式来检索值,由于其沙盒问题,不是来自已声明的变量)。我正在尝试进行预编译查询以绕过如图所示的错误测试,但它失败了。建议进行预编译测试以阻止 Excel 自动添加花括号“{}”或符号“@”?
#If IsError(Cells.Replace What:=WhatNow, Replacement:=Whatzit, LookAt:=xlPart, FormulaVersion:=xlReplaceFormula2) Then
【问题讨论】:
-
在不知道您的代码的情况下,我猜您正在将公式写入工作表?为什么不先检查版本并根据版本编写相应的代码?或者根本不写公式。只需在 VBA 中进行计算即可。
-
是的,将公式写入工作表(根据 Mac 环境的要求)。但是,也有预先写好的公式。回复:运行版本检查:如果它那么容易,我会这样做。同样,Mac 上模拟的 Office 365 Windows 10 环境与实际操作系统没有区别,任何版本测试都出现在 Office 365 Windows 10 上。
-
现有工作表上的公式与VBA中的宏代码一样多,而且太多了。所以,答案是 VBA 检查。请仅提供建议。
-
嗯。 VBA 版本的版本检查返回
Office 365 Windows 10?你是怎么做到的?我没有要测试的 Mac。我会做更多的研究。 -
哦。操作系统模拟器是 Parallels,它创建一个虚拟驱动器来伪装成 Win10,让 Ofc365 运行。因此,具有 "If Application.OperatingSystem Like ""Mac""" 的 VBA 失败,因为它在模拟的 Windows 中运行。该命令之后的任何版本检查都会被忽略(例如,“If Val(Application.Version)
标签: excel excel-formula cross-platform dynamic-arrays precompile