【问题标题】:Develop MS Access 2016 AddIn (Ribbon / VSTO) with Visual Studio 2015使用 Visual Studio 2015 开发 MS Access 2016 插件(功能区/VSTO)
【发布时间】:2018-06-13 05:43:06
【问题描述】:

希望你能帮助我。我期待着使用 Visual Studio 2015(作为 VSTO 的 Ribbon-Bar)编写我的第一个 MS Access 插件,但还没有开始我必须停止。 Visual Studio 为几乎所有办公产品提供模板,但 MS Access 除外。我听说可以“更改”例如 Excel VSTO 模板,以便它可以用于开发 MS Access 功能区。 有谁知道如何处理这个的好指示?您如何为 MS Access 开发 VSTO?

感谢您的帮助

【问题讨论】:

  • 您不需要 Visual Studio 来自定义 Access 中的功能区。看到这个:support.office.com/en-us/article/…
  • @KostasK。 - 但是当使用这个操作方法时......我如何在功能区中编写一个按钮的例子?以及如何将其部署给其他用户? Visual Studios 让它变得非常简单
  • 功能区 XML 控件有一个 onAction 属性,可以设置为标准模块中的方法,例如<button id="MyButton" label="Run My Macro" onAction="MyMacro"/>。阅读文章,这一切都可以在 VBA 和 Access 中完成,您不需要 VSTO。
  • @KostasK。 - 实际上我需要一些 VBA 中没有提供的功能,所以我更喜欢在 Visual Studio 中使用 C#
  • 没有问题,用 C# 构建你的 DLL,导入并在 VBA 中调用它。我相信这是最简单的方法。

标签: visual-studio ms-access vsto ribbon


【解决方案1】:

There exists a tutorial for this.没试过,不知道有没有用,不过听起来很有希望。

这是多汁的部分。


  1. 要开始构建 Access 加载项,我可以创建一个 Word(或 InfoPath、PowerPoint、Project 或 Visio)加载项(Excel 或 Outlook 也可以,但它们有额外的冗余主机特定代码)。

  2. 然后,我将在 COM 选项卡上添加对 Microsoft Access 对象库的引用(这也会引入对 ADODB 和 DAO 的引用)。它还引入了 Microsoft.Office.Core.dll,它重复了默认情况下已经引用的 Office.dll - 所以我将删除这两个重复项之一。

  3. 在解决方案资源管理器中,我可以选择项目并单击“显示所有文件”按钮。这使得打开 ThisAddIn.Designer.cs 文件变得更容易——在这里我可以将 Application 字段的声明和初始化从 M.O.I.Word.Application 更改为 M.O.I.Access.Application。请注意,此步骤会更改自动生成的文件:该文件通常不会重新生成,但如果我损坏了项目,则可能会重新生成(重点是如果重新生成文件,我的手动更改将丢失):

//internal Microsoft.Office.Interop.Word.Application Application;
internal Microsoft.Office.Interop.Access.Application Application;

//this.Application = this.GetHostItem<Microsoft.Office.Interop.Word.Application>(typeof(Microsoft.Office.Interop.Word.Application), "Application");
this.Application = this.GetHostItem<Microsoft.Office.Interop.Access.Application>(typeof(Microsoft.Office.Interop.Access.Application), "Application");
  1. 这就是所有代码更改。现在进行项目更改。有两种方法可以进行这些更改 - 通过 IDE 以覆盖或抵消默认设置的方式;或通过直接手动编辑 .csproj 文件来替换默认设置。让我们看看这两种方法:首先通过 IDE,然后手动。

  2. 首先,我将更改项目属性 |调试 |启动动作,“启动外部程序”,并指定Access的路径,例如:

    C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.EXE

  3. 然后,我将创建一个与我的加载项解决方案同名的 .reg 文件,并将其放入解决方案文件夹中。此 reg 文件用于为 Access 注册加载项(并为 Word 取消注册)。下面列出的示例 reg 文件只是标准 VSTO 构建任务对每个加载项类型所做的转储,并带有一个附加行。附加行(下面的第一个 reg 条目)只是删除了构建任务为 Word 放入的条目。 Word 和 Access 的其余条目相同,唯一的变化是将“Word”替换为“Access”:

Windows Registry Editor Version 5.00
[-HKEY_CURRENT_USER\Software\Microsoft\Office\Word\Addins\MyAddIn]
[HKEY_CURRENT_USER\Software\Microsoft\Office\Access\Addins\MyAddIn]
"Description"="MyAddIn"
"FriendlyName"="MyAddIn"
"LoadBehavior"=dword:00000003
"Manifest"="C:\\Temp\\MyAddIn\\bin\\Debug\\MyAddIn.vsto|vstolocal"
  1. 在项目属性中 |构建事件,我添加了一个构建后事件命令行来将 .reg 文件合并到注册表中:

    regedit /s "$(SolutionDir)$(SolutionName).reg"

  2. 就是这样。我现在可以按 F5 来构建解决方案:这将为 Access 注册加载项,并在加载加载项的情况下运行 Access 进行调试。

  3. 请注意,我可以直接修改 .csproj 文件,将 Word 设置为 Access,而不是将 Debug 属性设置为外部程序(上面的步骤 4)。例如,改变这个:

<ProjectProperties HostName="Word"
  HostPackage="{D2B20FF5-A6E5-47E1-90E8-463C6860CB05}" OfficeVersion="12.0" VstxVersion="3.0"
  ApplicationType="Word" Language="cs" TemplatesPath="" DebugInfoExeName="#Software\Microsoft\Office\12.0\Word\InstallRoot\Path#WINWORD.EXE"
  AddItemTemplatesGuid="{147FB6A7-F239-4523-AE65-B6A4E49B361F}" />

…到这个:

<ProjectProperties HostName="Access"
  HostPackage="{D2B20FF5-A6E5-47E1-90E8-463C6860CB05}" OfficeVersion="12.0" VstxVersion="3.0"
  ApplicationType="Access" Language="cs" TemplatesPath="" DebugInfoExeName="#Software\Microsoft\Office\12.0\Access\InstallRoot\Path#MSACCESS.EXE"
  AddItemTemplatesGuid="{147FB6A7-F239-4523-AE65-B6A4E49B361F}" />

请注意,如上所示,更改值会更改解决方案资源管理器中使用的图标。

  1. 我还可以更改元素的 Name 值以更改解决方案资源管理器中 ThisAddIn.cs 的父节点的名称。改变这个:
<Host Name="Word" GeneratedCodeNamespace="MyAddIn" IconIndex="0">
  <HostItem Name="ThisAddIn" Code="ThisAddIn.cs" CanonicalName="AddIn" CanActivate="false" IconIndex="1" Blueprint="ThisAddIn.Designer.xml" GeneratedCode="ThisAddIn.Designer.cs" />
</Host>

…到这个:

<Host Name="Access" GeneratedCodeNamespace="MyAddIn" IconIndex="0">
  <HostItem Name="ThisAddIn" Code="ThisAddIn.cs" CanonicalName="AddIn" CanActivate="false" IconIndex="1" Blueprint="ThisAddIn.Designer.xml" GeneratedCode="ThisAddIn.Designer.cs" />
</Host>
  1. 此外,注册由元素值决定。因此,我可以直接编辑 .csproj 来更改它,而不是将 .reg 文件设置为构建后任务(上面的步骤 5-6):
<OfficeApplication>Word</OfficeApplication>

…到这个:

<OfficeApplication>Access</OfficeApplication>

【讨论】:

  • 感谢您的回答。使用此指令,我可以修改 VSTO 以使用 MS Access。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多