【问题标题】:How to disable in Excel automatic refresh connection calling SQL stored procedure?如何在 Excel 中禁用调用 SQL 存储过程的自动刷新连接?
【发布时间】:2015-09-07 13:30:32
【问题描述】:

每当我更改已打开工作簿的窗口并返回到我已定义外部连接的 MyFile.xlsb 时,MyFile.xlsb 中所有数据透视表的刷新都会自动运行。不用添加它是非常烦人的功能。如何禁用它?如何仅按需运行全部刷新。重要的提示。此问题仅发生在我分发 MyFile.xlsb 的用户的计算机上。在我的电脑上运行正常。

我已将外部连接定义为对 SQL 中存储过程的引用。

连接字符串:

Provider=SQLOLEDB.1;
Integrated Security=SSPI;
Persist Security Info=True;
Initial Catalog=MyDataBase;
Data Source=MyServerName;
Use Procedure for Prepare=1;
Auto Translate=True;
Packet Size=4096;
Workstation ID=MyWorkstationID;
Use Encryption for Data=False;
Tag with column collation when possible=False

这是我调用的 SQL 存储过程。

CREATE PROCEDURE [dbo].[MyProcedure]
AS
BEGIN

-- part one, show user what he has to see
SELECT *
FROM [dbo].[MyView] 
ORDER BY 1

-- part two, get user data
INSERT INTO dbo.My_other_table_logins_history
SELECT 
GETDATE(), 
ORIGINAL_LOGIN()
END

此处解释了使用此过程的概念: SQL procedure from Excel run from connection properties with user login as parameter

【问题讨论】:

  • 查看工作簿中是否有宏刷新所有。
  • @rwking 不,没有。我禁用了所有事件。我还取消选中使用窗格中的所有内容。
  • 您检查过用户计算机上的 Excel 设置吗?
  • 看看这里:msdn.microsoft.com/en-us/library/office/ff821120.aspx你可以禁用自动刷新。

标签: sql-server vba excel connection


【解决方案1】:

尝试运行这个:

Option Explicit

Public Sub disableAutoRefreshConnection()
    Dim cnn As WorkbookConnection

    For Each cnn In ActiveWorkbook.Connections
        With cnn.OLEDBConnection
            .BackgroundQuery = False
            If .Refreshing Then .CancelRefresh
            .EnableRefresh = False
            .RefreshOnFileOpen = False
            .RefreshPeriod = 0
        End With
    Next
End Sub

BackgroundQuery    Default: True;     If queries are asynchronous

CancelRefresh                         Cancels refresh operations in progress

EnableRefresh      Default: True;     If connection can be refreshed by the user

RefreshOnFileOpen  Default: False;    If it auto-updates each time workbook is opened

RefreshPeriod      Default: 0;        Number of minutes between refreshes

【讨论】:

  • 它有效。我认为您的代码的关键行是.EnableRefresh = False 任何想法为什么刷新程序会自动运行?
  • 我需要复制你的设置和监控设置以查看它何时打开,所以我会做一些测试,但同时你可以禁用每一行,一个在是时候确认你提到的那个了。您也可以将其更改为仅对“MyServerName”执行操作,而不是遍历所有现有连接(如果您有多个连接)
  • 我复制了您的设置并使用了其他连接,但我无法看到问题(我使用了一个小数据库)。我的猜测是其中一项设置已从默认值更改 - 我在答案中添加了更多信息作为参考
猜你喜欢
  • 2020-08-06
  • 1970-01-01
  • 2018-05-12
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 2013-09-10
相关资源
最近更新 更多