我编写了Excel VBA报告,这些报告可以利用SQL数据库。我也在一家使用数十种此类报告的公司中,任何用户都可以一次从多个不同来源打开多个此类报告。因此,至关重要的是,代码不会影响或干扰任何其他打开的工作簿。
我当前的报告不可避免地使用了易失性功能,因此打开然后立即关闭文件的用户会收到“保存”的提示?对话。在线搜索一直指向使用
Private Sub Workbook_Open()
ActiveWorkbook.Saved = True
End Sub
虽然有效,但由于“ ActiveWorkbook”的非特定性质,我从来都不是超级粉丝。
问题:
使用以下任一选项的利弊有哪些-
答案 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>总是作为直接参考您正在使用的工具,特别是在上述涉及多个工作簿的情况下。即使打开并使用您不明确知道其名称的任意工作簿(通过ActiveWorkbook
或FSO
循环),也始终可以将工作簿变量设置为等于a的返回值。 Dir()
功能。
Workbook.Open
任何时候当您有使用多个工作簿的代码,或者甚至在打开多个工作簿的情况下使用一个工作簿的代码时,我都会推荐ThisWorkbook
。它具有多种用途,因为它可以在目标代码模块和通用模块中使用,以对放置在其中的工作簿返回一致的引用。当您要引用的内容时,明确指定ThisWorkbook
确实没有任何弊端。
ThisWorkbook
Me
对象代码模块中使用它们时, Me
和ThisWorkbook
是可以互换的,但是在它们之外,ThisWorkbook
指的是放置在其中的对象。例如,工作表目标代码模块中的Me
将为您获取工作表的名称。在工作簿代码模块中进行相同的操作将获得工作簿的名称。
为了清楚和可重复使用,我个人建议在所有3种设备中推荐Me.Name
。
答案 1 :(得分:-1)
活动工作簿是正在使用/激活的工作簿(因此在代码执行期间可能会更改),因此可靠性较低。
此工作簿是运行代码的工作簿。因此,如果那是您要参考的工作簿,那么是一个不错的选择。
“我” 是指代码所在的位置。例如。如果在sheetmodule中,则引用该工作表;如果在userform模块中,则引用该工作表;如果在thisworkbook模块中,则与“ thisworkbook”相同,等等。
将变量定义为工作簿可以引用任何打开的工作簿。可以在代码中根据需要重新定义,因此只要您知道书名即可非常灵活
Application.DisplayAlerts = False可用于禁止保存/覆盖请求。如果您不希望用户收到提示,这非常方便。
重新启用,因为这是功能强大但“危险”的代码。