如何在Workbook.Close方法之后运行存储在工作簿模块中的宏?

时间:2018-09-05 08:44:16

标签: excel vba excel-vba

我有一个从Excel文件到Access文件的数据连接。问题是,如果正在使用Access文件,则无法建立数据连接。因此,解决方法是实际复制正在使用的Access文件并将其存储在其他位置,然后Excel文件将连接到该副本。

但是,重复的Access文件最终将需要更新,但是当打开与其相连的Excel文件时,将无法更新该文件。因此,实际更新重复的Access文件的唯一方法是关闭Excel文件,然后将其覆盖。我计划通过2个步骤来实现这一目标:

1。)关闭Excel文件

Workbooks("Excel-file.xlsm").Close

2。)运行一个将更新Access文件的批处理文件:

Sub TryShell()

  Dim PathCrnt As String

  PathCrnt = ActiveWorkbook.Path
  Call Shell(PathCrnt & "\TryShell.bat " & PathCrnt)

End Sub

问题是关闭excel文件后的行将不再运行(例如):

Workbooks("Excel-file.xlsm").Close
MsgBox "Hello"

您好,将不再显示。

对于那些有兴趣查看我与MS Access的连接字符串的人:

Provider=Microsoft.ACE.OLEDB.12.0;
User ID=Admin;
Data Source=C:\Users\ACER\Desktop\Test.MDB;
Mode=Share Deny Write;
Extended Properties="";
Jet OLEDB:System database="";
Jet OLEDB:Registry Path="";
Jet OLEDB:Engine Type=5;
Jet OLEDB:Database Locking Mode=0; (changing to a value of 1 still results to an error to connect)
Jet OLEDB:Global Partial Bulk Ops=2;
Jet OLEDB:Global Bulk Transactions=1;
Jet OLEDB:New Database Password="";
Jet OLEDB:Create System Database=False;
Jet OLEDB:Encrypt Database=False;
Jet OLEDB:Don't Copy Locale on Compact=False;
Jet OLEDB:Compact Without Replica Repair=False;
Jet OLEDB:SFP=False;
Jet OLEDB:Support Complex Data=False

2 个答案:

答案 0 :(得分:0)

如果您不再需要Excel-file.xlsm中的数据,则可以将该宏放入“个人宏工作簿”中。

答案 1 :(得分:0)

我试图重现您的情况,实际上,一旦数据库打开,我就无法刷新表。所以我转到“连接属性”,“定义”选项卡,“连接字符串”,然后进行了更改:

Jet OLEDB:Database Locking Mode=0

Jet OLEDB:Database Locking Mode=1

现在,即使在Access中打开了表,我也可以刷新它。