如何用C#调用运行中MSAccess应用内的指定方法
C#调用运行中MS Access应用方法的实现方案
刚好我之前做过类似的需求,这就把VB.NET的代码转换成C#版本,完美实现你要的功能:
第一步:添加必要的程序集引用
C#本身没有原生的GetObject和AppActivate方法,所以需要先给项目添加Microsoft.VisualBasic程序集引用:
- 右键项目 → 选择「添加引用」
- 在「程序集」列表里找到并勾选
Microsoft.VisualBasic,点击确定
第二步:编写核心代码
这里提供两种实现方式,按需选择:
方式1:使用dynamic类型(无需引用Access互操作PIA)
这种方式更轻量化,不需要额外引用Office的Access互操作组件:
using Microsoft.VisualBasic; using System; class Program { static void Main(string[] args) { string strMyParam = "你的参数内容"; // 替换成你的实际参数 string accessFilePath = @"C:\temp\MyAccessApp.accde"; string accessWindowTitle = "MyAccessApp"; try { // 获取已经在运行的Access应用实例 dynamic accessApp = Interaction.GetObject(accessFilePath); // 调用目标方法并传入参数 accessApp.Run("su_MyMethod", strMyParam); // 激活Access窗口,让它显示在前台 Interaction.AppActivate(accessWindowTitle); } catch (Exception ex) { Console.WriteLine($"操作失败:{ex.Message}"); // 可以在这里处理实例未运行、方法不存在等异常情况 } } }
方式2:使用强类型(需要引用Access互操作PIA)
如果你已经引用了Microsoft.Office.Interop.Access程序集,可以用强类型来获得更好的编译时检查:
using Microsoft.VisualBasic; using Microsoft.Office.Interop.Access; using System; class Program { static void Main(string[] args) { string strMyParam = "你的参数内容"; string accessFilePath = @"C:\temp\MyAccessApp.accde"; string accessWindowTitle = "MyAccessApp"; try { // 强转成Access应用类型 Application accessApp = (Application)Interaction.GetObject(accessFilePath); accessApp.Run("su_MyMethod", strMyParam); Interaction.AppActivate(accessWindowTitle); } catch (Exception ex) { Console.WriteLine($"操作失败:{ex.Message}"); } } }
关键说明
Interaction.GetObject(accessFilePath):和VB.NET里的GetObject作用完全一致,会找到对应路径下已经运行的Access实例,如果实例未运行会抛出异常accessApp.Run("su_MyMethod", strMyParam):直接调用Access里的公共方法,参数可以按需传递多个Interaction.AppActivate(accessWindowTitle):对应VB的AppActivate,根据窗口标题激活目标程序
内容的提问来源于stack exchange,提问作者acki
相关产品推荐
相关产品推荐

