当前位置: 首页 > 知识库问答 >
问题:

本例中如何避免VBA中的SELECT/ACTIVE语句?

凌和悦
2023-03-14

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

问题:在这段代码中如何避免select/ActiveSheet?

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

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

共有1个答案

殳宸
2023-03-14

TL;DR:在这种情况下,您无法避免select,因为您需要activesheet.exportasfixedformat的后期绑定行为,这显然考虑了所选的工作表--而早期绑定的worksheet.exportasfixedformat没有这样做。

ExportasFixedFormatExcel.Worksheet的成员。

ActiveSheet不是Excel.Worksheet但它是对象(因此对其进行的任何成员调用都必须是后期绑定的)。这是一个重要的细节。

当您执行此操作时:

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

不针对工作表对象进行.select成员调用:给定工作表名称数组,sheets(或worksheets)属性将返回Excel.sheets集合对象,而这正是对.select进行调用的对象。这也是一个重要的细节。

您可能知道,在Excel对象模型中处理的对象是COM对象。在COM中,接口是可扩展的,除非另有规定:这就是您如何编写的:

Debug.Print Application.Sum(2, 2)

这就是这样一种情况:exportasfixedformat成员在运行时早期绑定时的行为是一种方式,而在晚期绑定时的行为是不同的。使用后期绑定调用,您可以导出Sheets集合中每个工作表的一个页面的单个PDF文档,而针对worksheet.ExportAsFixedFormat的早期绑定调用仅导出该工作表,并且由于没有Sheets.ExportAsFixedFormat,您不能直接针对Sheets.ExportAsFixedFormat进行后期绑定调用以避免。选择调用和后续的ActiveSheet后期绑定成员调用。

还有许多其他成员,特别是worksheetfunction成员,在后期绑定与早期绑定时表现不同。

 类似资料:
  • 我听说过很多关于在Excel VBA中使用的憎恶是可以理解的,但我不确定如何避免使用它。我发现,如果我能够使用变量而不是函数,那么我的代码将更加可重用。但是,如果不使用,我不确定如何引用东西(如等)。 我已经找到了这篇关于范围的文章和这个关于不使用select的好处的例子,但是我找不到任何关于如何使用的东西。

  • 我使用Java实现了很多Selenium测试—有时,我的测试会因为StaleElementReferenceException而失败。 你能建议一些使测试更稳定的方法吗?

  • 本文向大家介绍如何避免MySQL查询中的OR语句过多?,包括了如何避免MySQL查询中的OR语句过多?的使用技巧和注意事项,需要的朋友参考一下 使用MySQL避免太多的OR语句。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是避免在MySQL查询中使用太多OR语句的查询,即使用- 这将产生以下输出-

  • 问题内容: 我的问题是我必须在try语句中设置变量,否则会出现编译错误。 稍后我需要使用该变量,但现在超出了范围,所以我相信。我在try语句外部初始化了该变量并将其设置为null,我以为可以在外部访问它,但仍然得到了。 下面的代码,其中有很多代码使阅读变得更容易-我知道这是不好的代码,但是我是Servlets的新手,只想看看它与所有活动部件一起运行时应如何工作。 我创建了另一个类,该类调用crea

  • 我被困在编写Python Selenium脚本中,似乎无法令人满意地解决我得到的这个StaleElementReistrceException。 我加载了我的页面,然后单击一个按钮,打开一个表单,允许用户向订单中添加新的信用卡。在这一点上,我做了一个WebDriverWait来暂停脚本,直到这个表单上的Save按钮变为可见。此时,重新创建页面对象,因为它已更改,我的目的是填充字段并保存卡片。 问题

  • 问题内容: 我最近了解到,可以在语句中创建新的对象,如下所示: 这是要避免的事情还是应该接受?根据良好实践,何时才可以合理使用此功能? 问题答案: 不要回避它 ,因为有第 10.2.7.2节 所提醒的,因为它有完全有效的用例,所以这里有SELECT NEW 。 EJB 3.0 JPA规范 的SELECT子句 中的 JPQL构造函数表达式 : SELECT列表中可以使用构造函数来返回一个或多个Jav