使用 VBA 自动化<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />这是一个后续 VBA 自动化问题:
我需要使用 VBA 自动化从 Excel 填充 jmp 数据表。
目前,我正在使用“SetDataVector”执行此操作并循环遍历源数组的每个元素。 所有使用矢量形式“SetDataVector”的尝试均未成功。
我们将非常感谢您帮助正确使用“SetDataVector”功能。
谢谢,
皮特
回复:使用 VBA 自动化当我沿着 VBA 自动化路径前进时,了解 Excel 和 JMP 之间的通信中存在数据类型的隐式转换会很有帮助。 谢谢!
回复:使用 VBA 自动化感谢您的跟进。
看来“SetDataVector”需要其源数组为 double 类型或字符串才能工作。 如果它是变体,则该过程将执行,但不会将任何内容传输到表中。 按顺序将数组元素传输到第二个数组,同时将它们转换为 double 类型 (CDbl),效果很好。
还应该注意的是,数组必须是 base0 才能按预期工作。 如果它是 base1,那么它会移动数据并错过第一行/添加无效的最后一行。
谢谢
回复:使用 VBA 自动化大多数变量使用 VB/VBA 中的基础变体类型。我认为,如果您使用循环在 VB 端填充数组,然后传递该数组,而不是单独设置单元格值,您会发现性能要快得多。使用单个单元格情况时,自动化调用之间的进程间通信时间将导致速度急剧下降。
在我引用的示例中,我确实将数组创建为 Double 或 String。但是,它们作为变体数组传递(转换是隐式的)。如果您在对象浏览器中查看 SetDataVector 的方法签名,您将看到 JMP 实际上需要一个变体数组。因此,您至少应该尝试将变体数组从 Excel 范围传递到 JMP。如果类型无法隐式转换,则必须单独复制元素。
布赖恩·科科伦
JMP开发
回复:使用 VBA 自动化是的,这有帮助。 我现在可以成功使用函数“SetDataVector”(前提是数组类型为“Double”或“String”)。 不幸的是,要在数组和 Excel 范围之间传递数据,数组必须是“Variant”。 因此,“SetCellVal”和循环遍历数组可能仍然是我的情况下的最佳选择。
谢谢。
回复:使用 VBA 自动化JMP 安装中包含的数据表自动化示例程序包含语法示例。如果您查看“设置矢量”按钮后面的代码,您就会看到它。实在太长了,无法将整个内容发布到这里。示例程序位于安装目录下。对于 JMP 11,这将为 C:\Program Files\SAS\JMP\11\Samples\Automation\Visual Basic Samples\Data Table .NET 。
我希望这有帮助。
布赖恩·科科伦
JMP开发