使用Visual Studio 2015开发MS Access 2016的AddIn(Ribbon / VSTO)

4
希望你能帮助我。我想用Visual Studio 2015(作为VSTO的功能区)编写我的第一个MS Access AddIn,但由于没有开始,我现在必须停止了。几乎每个Office产品都有Visual Studio提供的模板,但是MS Access没有。我听说可以“更改”例如Excel VSTO模板,以便用于开发MS Access Ribbon。
请问是否有好的说明书,如何处理这个问题?你是如何为MS Access开发VSTO的呢?
谢谢你的帮助!

你不需要使用Visual Studio来自定义Access中的功能区。请参考此链接:https://support.office.com/en-us/article/customize-the-ribbon-45e110b9-531c-46ed-ab3a-4e25bc9413de - Kostas K.
Ribbon XML控件具有onAction属性,可以设置为标准模块中的方法,例如<button id="MyButton" label="Run My Macro" onAction="MyMacro"/>。阅读本文,这一切都可以在VBA和Access中完成,您不需要使用VSTO。 - Kostas K.
@KostasK. - 实际上我需要一些在VBA中没有提供的功能,所以我更愿意在Visual Studio中使用C#。 - rodgerwilco
没问题,用C#构建你的DLL,在VBA中导入并调用它。我相信这是最简单的方法。 - Kostas K.
你在互联网上搜索过“VSTO Access Add-in”这个词吗?它会返回很多结果。先做些研究,然后再回来提出具体问题。目前而言,你的问题太笼统了。 - Cindy Meister
显示剩余3条评论
1个回答

6

这里有一份教程,虽然我没有尝试过且不确定其是否可行,但听起来很有前途。

以下是重点内容。


  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");

这是所有的代码更改。现在来看项目更改。有两种方法可以进行这些更改——通过IDE以一种覆盖或抵消默认设置的方式;或直接手动编辑.csproj文件,以替换默认设置。让我们先看看这两种方法:先通过IDE,然后手动。
首先,我将更改项目属性|调试|启动操作,改为“启动外部程序”,并指定Access的路径,例如:
C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.EXE
然后,我将创建一个与我的插件解决方案同名的.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"

在项目属性|生成事件中,我添加了一个后期生成事件命令行,将.reg文件合并到注册表中: regedit /s "$(SolutionDir)$(SolutionName).reg" 这样就可以按F5来构建解决方案:这将为Access注册插件,并加载插件以进行调试。 请注意,与其将Debug属性设置为外部程序(步骤4),我可以直接修改.csproj文件,将TargetProgram从Word更改为Access。例如,将以下内容更改为:
<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}" />

请注意,如上所示更改值会更改解决方案资源管理器中使用的图标。
10. 我还可以更改元素的名称值,以更改解决方案资源管理器中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>

此外,注册是由元素值确定的。因此,我可以直接编辑.csproj文件来更改这个值,而不是设置一个.reg文件作为后置构建任务(参见上面的步骤5-6)。
<OfficeApplication>Word</OfficeApplication>

…变成这样:
<OfficeApplication>Access</OfficeApplication>

感谢您的回答。有了这个指令,我可以修改一个VSTO以便与MS Access一起使用。 - rodgerwilco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接