首页 > 解决方案 > 时间:2019-04-01 标签:c#read/editaccdb宏

问题描述

我正在尝试访问 Access 数据库 (accdb) 中的宏。

我尝试使用:

using Microsoft.Office.Interop.Access.Dao;

...

DBEngine dbe = new DBEngine();
Database ac = dbe.OpenDatabase(fileName);

我发现一个container["Scripts"]有一个document["Macro1"]这是我的目标。我正在努力访问文档的内容。我还质疑这是否Microsoft.Office.Interop.Access.Dao是我想要实现的目标的最佳参考。

查看宏和模块内容的最佳方式是什么?

标签: c#ms-accessoffice-interop

解决方案


您可以跳过 DAO 部分,在这种情况下不需要它。宏是特定于项目的,因此为了获得所有宏,您需要遍历您的项目。在我的示例中,我只有一个项目。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Access;

namespace Sandbox48
{
    public class Program
    {
        public static void Main(string[] args)
        {

            Microsoft.Office.Interop.Access.Application oAccess = null;
            string savePath = @"C:\macros\";
            oAccess = new Microsoft.Office.Interop.Access.Application();

            // Open a database in exclusive mode:
            oAccess.OpenCurrentDatabase(
               @"", //filepath
               true //Exclusive
               );

            var allMacros = oAccess.CurrentProject.AllMacros;

            foreach(var macro in allMacros)
            {
                var fullMacro = (AccessObject)macro;
                Console.WriteLine(fullMacro.Name);

                oAccess.SaveAsText(AcObjectType.acMacro, fullMacro.FullName, $"{savePath}{ fullMacro.Name}.txt");
            }
            Console.Read();
        }
    }
}

推荐阅读