gpt4 book ai didi

excel - 在本例中如何避免 VBA 中的 select/active 语句?

转载 作者:行者123 更新时间:2023-12-02 05:05:56 27 4
gpt4 key购买 nike

需要导出一个PDF文件中的所有工作表,所以我找到了这段代码,它有效(导出一个PDF,每个工作表一个页面)。但我不想使用 select/active 语句,我更喜欢使用存储对象的变量。

问题:如何避免在此代码中选择/ActiveSheet?

ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")).Select

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\tempo.pdf", Quality:= xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True

最佳答案

TL;DR:你无法避免Select在这种情况下,因为您需要 ActiveSheet.ExportAsFixedFormat 的后期绑定(bind)行为,这显然考虑了选定的纸张 - 早期装订 Worksheet.ExportAsFixedFormat不行。

<小时/>

ExportAsFixedFormatExcel.Worksheet 的成员.

ActiveSheet不是Excel.Worksheet不过,这是一个 Object (因此任何成员的反对意见都必然是后期绑定(bind)的)。这是一个重要的细节。

当你这样做时:

ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")).Select

.Select成员调用不是针对 Worksheet 进行的对象:给定工作表名称数组,Sheets (或 Worksheets )属性返回 Excel.Sheets集合对象,就是.Select正在被援引反对。这也是一个重要的细节。

您可能知道,您在 Excel 对象模型中处理的对象是 COM 对象。在 COM 中,接口(interface)是可扩展的,除非另有说明:这就是您可以这样写的:

Debug.Print Application.Sum(2, 2)

并获得输出 - 即使 Sum不是 Application 的编译时成员类:成员调用在运行时解析(这就是“后期绑定(bind)”),并且因为 COM 对象是通过特定选择 WorksheetFunction 进行扩展的。成员(member),Application.Sum在运行时工作得很好,尽管你没有得到任何编译时验证:你基本上是蒙着眼睛编码,并且成员名称中的任何拼写错误都会在运行时引发错误 438 (但即使使用Option Explicit 指定),参数中的任何错误(类型错误、顺序错误、参数数量错误)都会在运行时引发错误 1004。

这就是为什么您通常希望避免隐式后期绑定(bind),因此针对 ActiveSheet 进行编码和Selection :因为这些Object对象(对 Variant 的成员调用相同)没有定义编译时接口(interface),使用它们就是蒙着眼睛编写代码,而且非常容易出错。

但是早期绑定(bind)代码并不总是 100% 等同于后期绑定(bind)替代方案。

这是一个这样的案例:ExportAsFixedFormat当早期绑定(bind)时,成员在运行时的行为方式是一种,而当后期绑定(bind)时,成员的行为方式不同。通过后期绑定(bind)调用,您可以导出单个 PDF 文档,其中包含 Sheets 中每个工作表的页面。集合,同时对 Worksheet.ExportAsFixedFormat 进行早期绑定(bind)调用仅导出工作表,因为没有 Sheets.ExportAsFixedFormat ,您不能直接对 Sheets(Array(...)) 进行后期绑定(bind)调用避免 .Select通话及后续ActiveSheet后期绑定(bind)成员(member)调用。

还有许多其他成员,特别是 WorksheetFunction成员,在晚绑定(bind)和早绑定(bind)时表现不同。

关于excel - 在本例中如何避免 VBA 中的 select/active 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59107554/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com