仅在另一台工作站上访问 Application.Run "Can't Find The Procedure"
Access Application.Run "Can't Find The Procedure" only on another workstation
结束我的最后一个问题 ()...
同样,我安装了 Office 2013,我的同事安装了 Access 2007。我下面的脚本通过自动化创建了一个新的 Access 数据库,从文本中导入了一系列 VBA 模块,然后运行一个子模块导入的模块。该脚本在我的机器上运行良好,但在我同事的机器上它说 Microsoft Office Access can't find the procedure 'ImportAllSource.'
我们还尝试在过程的名称前加上它所在的模块的名称 ("VCS_ImportExport.ImportAllSource"
),以及出现在 VBE 环境中的项目名称 ("ImportTest.ImportAllSource"
),但运气不好并出现同样的错误。
修改后的脚本:
'use strict';
/**
* AcNewDatabaseFormat Enumeration
* Used with the NewCurrentDatabase method to specify the database format of the newly created database.
*/
var acModule = 5,
dbText = 10,
acNewDatabaseFormat = {
UserDefault: 0,
Access2000: 9,
Access2002: 10,
Access12: 12
};
var fs = new ActiveXObject('Scripting.FileSystemObject');
var access = new ActiveXObject('Access.Application');
var basePath = fs.GetParentFolderName(WScript.ScriptFullName);
var db, prop, vcsFolder, fCur, module;
//Create DB and set up some superficial things.
access.NewCurrentDatabase(basePath + '\ImportTest.accdb', acNewDatabaseFormat.Access12);
db = access.CurrentDb();
prop = db.CreateProperty('AppTitle', dbText, 'IG IMI Database');
db.Properties.Append(prop);
prop = db.CreateProperty('StartUpForm', dbText, 'Main Switchboard');
db.Properties.Append(prop);
db.Properties('UseMDIMode') = 1;
//Add MSAccess-VCS modules
vcsFolder = fs.GetFolder(basePath + '\MSAccess-VCS');
fCur = new Enumerator(vcsFolder.files);
for (; !fCur.atEnd(); fCur.moveNext()) {
module = fCur.item().Name.replace('.bas', '');
access.LoadFromText(acModule, module, fCur.item());
}
access.Run('ImportAllSource');
access.Quit();
顿悟了。问题出在加载模块中的某些代码 - 即,使用 PtrSafe
关键字的几个 Declare
语句。它在 Access 2013 中是有效语法,但在 2007 中不是。
因此,如果加载的模块中的 VBA 代码存在错误,当您尝试调用 Application.Run
.
时,Access 会装傻
结束我的最后一个问题 (
同样,我安装了 Office 2013,我的同事安装了 Access 2007。我下面的脚本通过自动化创建了一个新的 Access 数据库,从文本中导入了一系列 VBA 模块,然后运行一个子模块导入的模块。该脚本在我的机器上运行良好,但在我同事的机器上它说 Microsoft Office Access can't find the procedure 'ImportAllSource.'
我们还尝试在过程的名称前加上它所在的模块的名称 ("VCS_ImportExport.ImportAllSource"
),以及出现在 VBE 环境中的项目名称 ("ImportTest.ImportAllSource"
),但运气不好并出现同样的错误。
修改后的脚本:
'use strict';
/**
* AcNewDatabaseFormat Enumeration
* Used with the NewCurrentDatabase method to specify the database format of the newly created database.
*/
var acModule = 5,
dbText = 10,
acNewDatabaseFormat = {
UserDefault: 0,
Access2000: 9,
Access2002: 10,
Access12: 12
};
var fs = new ActiveXObject('Scripting.FileSystemObject');
var access = new ActiveXObject('Access.Application');
var basePath = fs.GetParentFolderName(WScript.ScriptFullName);
var db, prop, vcsFolder, fCur, module;
//Create DB and set up some superficial things.
access.NewCurrentDatabase(basePath + '\ImportTest.accdb', acNewDatabaseFormat.Access12);
db = access.CurrentDb();
prop = db.CreateProperty('AppTitle', dbText, 'IG IMI Database');
db.Properties.Append(prop);
prop = db.CreateProperty('StartUpForm', dbText, 'Main Switchboard');
db.Properties.Append(prop);
db.Properties('UseMDIMode') = 1;
//Add MSAccess-VCS modules
vcsFolder = fs.GetFolder(basePath + '\MSAccess-VCS');
fCur = new Enumerator(vcsFolder.files);
for (; !fCur.atEnd(); fCur.moveNext()) {
module = fCur.item().Name.replace('.bas', '');
access.LoadFromText(acModule, module, fCur.item());
}
access.Run('ImportAllSource');
access.Quit();
顿悟了。问题出在加载模块中的某些代码 - 即,使用 PtrSafe
关键字的几个 Declare
语句。它在 Access 2013 中是有效语法,但在 2007 中不是。
因此,如果加载的模块中的 VBA 代码存在错误,当您尝试调用 Application.Run
.