ActiveWorkbook.Saved与ThisWorkbook.Saved与Me.Saved

时间:2019-02-12 22:41:06

标签: excel vba performance

我编写了Excel VBA报告,这些报告可以利用SQL数据库。我也在一家使用数十种此类报告的公司中,任何用户都可以一次从多个不同来源打开多个此类报告。因此,至关重要的是,代码不会影响或干扰任何其他打开的工作簿。

我当前的报告不可避免地使用了易失性功能,因此打开然后立即关闭文件的用户会收到“保存”的提示?对话。在线搜索一直指向使用

Private Sub Workbook_Open()
    ActiveWorkbook.Saved = True
End Sub

虽然有效,但由于“ ActiveWorkbook”的非特定性质,我从来都不是超级粉丝。

问题:

使用以下任一选项的利弊有哪些-

  1. ActiveWorkbook.Saved
  2. 此工作簿。已保存
  3. 我已保存
  4. 已保存的内容

2 个答案:

答案 0 :(得分:0)

AS BEGIN CREATE TABLE #TempTable ( [ID] [varchar](10), [FIRST_NAME] varchar(50), [LAST_NAME] varchar(50), [WEBSITE_LINK] varchar(200) ) INSERT INTO #TempTable SELECT USER.ID,USER.FIRSTNAME AS [FIRST_NAME], USER.LASTNAME AS [LAST_NAME] FROM USER WHERE USER.Registered = 'Yes' DECLARE @Link1 NVARCHAR(100) DECLARE @Link2 VARCHAR(10) DECLARE @Link3 NVARCHAR(4) SET @Link1 = 'http://www.mywebsite.com/user/' SET @Link2 = (SELECT USER.ID FROM USER WHERE USER.Registered = 'Yes') SET @Link3 ='/document.doc' SET @WEBSITE_LINK = (SELECT concat(@Link1,@Link2,@Link3 )AS [WEBSITE_LINK]) DROP TABLE #TempTable END

我认为使用ActiveWorkbook没有任何优势,因为应该总是优先使用{strong>总是作为直接参考您正在使用的工具,特别是在上述涉及多个工作簿的情况下。即使打开并使用您不明确知道其名称的任意工作簿(通过ActiveWorkbookFSO循环),也始终可以将工作簿变量设置为等于a的返回值。 Dir()功能。

Workbook.Open

任何时候当您有使用多个工作簿的代码,或者甚至在打开多个工作簿的情况下使用一个工作簿的代码时,我都会推荐ThisWorkbook。它具有多种用途,因为它可以在目标代码模块和通用模块中使用,以对放置在其中的工作簿返回一致的引用。当您要引用的内容时,明确指定ThisWorkbook确实没有任何弊端。

ThisWorkbook

Me对象代码模块中使用它们时,

MeThisWorkbook是可以互换的,但是在它们之外,ThisWorkbook指的是放置在其中的对象。例如,工作表目标代码模块中的Me将为您获取工作表的名称。在工作簿代码模块中进行相同的操作将获得工作簿的名称。

为了清楚和可重复使用,我个人建议在所有3种设备中推荐Me.Name

答案 1 :(得分:-1)

活动工作簿是正在使用/激活的工作簿(因此在代码执行期间可能会更改),因此可靠性较低。

此工作簿是运行代码的工作簿。因此,如果那是您要参考的工作簿,那么是一个不错的选择。

“我” 是指代码所在的位置。例如。如果在sheetmodule中,则引用该工作表;如果在userform模块中,则引用该工作表;如果在thisworkbook模块中,则与“ thisworkbook”相同,等等。

变量定义为工作簿可以引用任何打开的工作簿。可以在代码中根据需要重新定义,因此只要您知道书名即可非常灵活

Application.DisplayAlerts = False可用于禁止保存/覆盖请求。如果您不希望用户收到提示,这非常方便。
 重新启用,因为这是功能强大但“危险”的代码。