标签: excel-addins

使用VBA更改数据透视表过滤器

我有一个数据透视表,其中包含"CoB Date"字段,如图所示.
我正在尝试创建一个宏,根据用户输入自动更改日期.
我写了以下宏代码.但它显示错误:

无法获取数据透视表类的PivotFields属性

谁能帮我这个?
注意:假设日期格式不是问题

码:

Sub My_macro()
    Dim num as String
    num = InputBox(Prompt:="Date", Title:="ENTER DATE")
    Sheets("Sheet1").PivotTables("PivotTable1") _
        .PivotFields("CoB Date").CurrentPage = num
End Sub
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

excel vba excel-vba excel-addins

7
推荐指数
1
解决办法
4万
查看次数

VSTO Debug版很好,安装版本没有读取app.config

我有一个VSTO Excel 2007加载项,应该从app.config文件读取连接字符串,然后让用户决定连接到哪个数据库.这在调试时工作正常,但是当我运行已部署的版本(使用Windows Installer完成)时,根本不读取连接字符串.我已将所有项目的主要输出添加到安装项目中.app.config文件位于ExcelAddIn项目中,但不在Excel标题下.管理连接字符串的类在另一个项目中.

这是我的app.config文件:

    <?xml version="1.0"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
  </configSections>
  <connectionStrings>
    <clear/>
    <add name="MyEntities" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/SymModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=myServer;initial catalog=myDB;persist security info=True;user id=myUser;password=myPassword;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient"/>
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0"/>
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
Run Code Online (Sandbox Code Playgroud)

我使用以下内容来获取连接字符串:

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        ConnectionStringsSection csSection = config.ConnectionStrings;
Run Code Online (Sandbox Code Playgroud)

我试图将ExcelAddin.dll.config文件添加到安装文件夹和.proj文件所在的安装项目文件夹中.我已将app.config文件的'Copy to Output Directory'属性设置为'Copy always',将Build Action属性设置为'Content'.

我的app.config文件有什么问题,或者为什么在我运行安装程序后它没有被拾取(连接字符串没有加载到csSection中)?

vsto visual-studio-2010 excel-addins

6
推荐指数
1
解决办法
938
查看次数

使用NSIS部署Excel加载项 - 注册表问题

我在VS 2012中创建了一个测试项目

file - > new - > project - > Other Languages - > Visual C# - > Office - > 2010

这很好.我想在客户端计算机上部署它,在MSDN网站上查看我有2个选项,clickonce或installshield

https://msdn.microsoft.com/en-us/library/bb386179(v=vs.110).aspx

我不能使用clickonce,并且我被要求不使用installshield而是使用NSIS.我在NSIS方面取得了进展,但未能注册dll.如果我尝试使用Regsvr32手动注册它,我将收到一条错误消息

"模块"[filepath] TestAddin.dll"已加载,但未找到入口点DLLRegisterServer.请确保"[filepath] TestAddin.dll"是有效的DLL或OCX文件,然后重试.

这是我如何尝试在NSIS脚本中注册,取自我不完全理解的旧论坛页面.

  Exec 'regsvr32.exe /s "$INSTDIR\MyExcelAddin.dll"'

  WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin.Connect" "FriendlyName" "MyExcelAddin"
  WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin.Connect" "Description" "MyExcelAddin"
  WriteRegDWORD HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin.Connect" "LoadBehavior" "00000003"
  WriteRegDWORD HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin.Connect" "CommandLineSafe" "00000000"
Run Code Online (Sandbox Code Playgroud)

更新:我现在可以创建注册表项执行以下操作,但加载项仍然不会显示在Excel中

  SetRegView 64
  Exec '"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" "$INSTDIR\MyExcelAddin.dll"'

  WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "FriendlyName" "MyExcelAddin"
  WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "Description" "MyExcelAddin"
  WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "Manifest" "Manifest file:///$INSTDIR\MyExcelAddin.vsto|vstolocal"
  WriteRegDWORD HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "LoadBehavior" …
Run Code Online (Sandbox Code Playgroud)

registry nsis excel-addins

6
推荐指数
1
解决办法
768
查看次数

如何跨项目重用Core VBA函数(UDF),但不在单元格插入函数中显示它们

我有一个带有"核心"函数和子函数的Addin,我想在不同的Addins或VBA项目中引用和使用它们.由于代码重用和单一更新原则.

例如,一个函数,它根据条件过滤集合成员并返回子集合.代码本身不是问题.

Public Function listNamesContaining(ByVal NamesInput As Names, ByVal ContainsCriteria As String) As Collection
    Dim NameMember As Name

    Set listNamesContaining = New Collection
    For Each NameMember In NamesInput
        If InStr(1, NameMember.Name, ContainsCriteria, vbTextCompare) Then
            listNamesContaining.Add NameMember
        End If
    Next
End Function
Run Code Online (Sandbox Code Playgroud)

我不想在单元格插入函数中显示此函数,因为它返回一个集合对象,但我想在VBA代码中的多个VBA项目中重用它.

当前问题的图片,目标函数显示在单元格插入公式中:

在此输入图像描述

研究

我使用Option Private Statement为单个项目方法找到了解决方案SO1,SO2. 然而,这并没有解决问题,因为其他应用或项目限制.

当模块包含选项专用模块时,在模块级别声明的公共部分(例如,变量,对象和用户定义类型)在包含该模块的项目中仍然可用,但它们不可用于其他应用程序或项目.

接下来,我在MRExcel formum上找到了一个问题- 仅隐藏VBA函数.汤姆·施赖纳建议,我可以使用自定义的类并实现内部的功能.这样,它们将无法通过单元格插入功能获得 …

code-reuse vba excel-vba excel-addins excel-udf

6
推荐指数
1
解决办法
687
查看次数

未加载以编程方式安装的Excel加载项

问题摘要: 为什么我从程序菜单启动Excel时加载以编程方式安装的加载项,但是在我打开安装它们的Installer.xlsm工作簿时加载?

详细信息: 我的团队开发了组织中各种用户使用的加载项层次结构.我有一个Installer.xlsm文件,它为每个加载项安装新版本.它有一个Workbook_Open方法,在打开工作簿时卸载当前安装的加载项版本并安装它们的新版本.

这种方法运作了一年多.最近我们更新了加载项的层次结构,从那时起,相同的脚本将成功运行,卸载旧的加载项并安装新的加载项.但是,当重新打开Excel时(从程序菜单或现有工作簿),似乎脚本根本没有任何效果 - 在运行之前安装的加载项仍然安装并且新的加载项甚至没有列出在"管理加载项"窗体中.这也反映在HKCU\...\Excel\Add-in Manager- 加载项列表与运行前的列表相同.

但是,如果我再次打开Installer.xlsm - 它只加载我希望它在成功运行脚本后加载的加载项(加载新安装的加载项并且不加载卸载脚本的加载项)!就像加载项安装在单个.xlsm文件的范围内一样......

笔记:

  1. 加载项不会放在Excel的加载项目录中,而是放在项目文件夹(C:\ appname\Addins\date)中.

  2. 我在Windows 7上使用Excel 2010并在我的计算机上拥有管理员权限.

  3. 这不是注册表写入访问的问题,因为如果使用Excel UI安装相同的加载项,则正确注册HKCU\...\Excel\Add-in Manager.

请帮忙解决这个谜!

执行卸载的代码部分:

    For Each ad In Application.AddIns
        For Each appName In pAppNames
            If pIniMap.item("FilePrefix").Exists(appName) Then
                filePrefix = pIniMap.item("FilePrefix").item(appName)
                If Left(ad.Name, Len(filePrefix)) = filePrefix Then
                    If ad.Installed Then
                        ad.Installed = False
                        Workbooks(ad.Name).Close False
                    End If
                End If
            Else
                logger.Warn "Entry is missing for section FilePrefix, appName=" & appName, methodName
            End If
        Next appName
    Next …
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba excel-addins

6
推荐指数
1
解决办法
549
查看次数

Excel 插件 - console.log 在哪里输出它的消息 - NodeJS

我正在尝试使用 JavaScript API 创建 Excel 插件。但我不明白“console.log”在哪里输出他们的消息。所有 Microsoft 文档都包含 console.log 示例,但没有解释 console.log() 输出消息的位置。我在 stackoverflow 上找到了一个类似的帖子,但这些是指 Visual Studio 控制台日志。我正在 Mac 上使用 nodeJs 编写我的插件,因此我无法选择 Visual Studio 的解决方案。

我在网上搜索过。我已经搜索了所有 Excel 选项。我还搜索了 Excel 开发人员选项卡,但找不到任何内容。

我在 Mac 上使用 Office 2016(最新)。我的插件是用 jQuery 编码的。

有人有想法吗?

编辑

我在 NodeJS 中创建了我的 ExcelAddin。因此我安装了 yo 和 office-generator npm install -g yo generator-office 。然后我运行了命令yo office并选择了 jQuery 作为库。示例插件工作。

excel jquery excel-addins node.js office-2016

6
推荐指数
1
解决办法
1054
查看次数

使用C#编写的COM加载项与自动加载项的可选参数

我正在开发一个COM加载项和Excel自动化加载项库,其核心代码是用C#编写的.我想为函数设置一个可选参数,我知道这对于C#和VBA,甚至Excel WorksheetFunction都是合法的.但我发现最终可选参数专门用于COM和Automation加载项,这意味着如果首先运行一个加载项,那么效果很好但另一个加载项的可选参数将不起作用.

下面请看示例:

在VS 2013解决方案中,我有两个项目:一个被调用TestVBA,另一个被调用TestExcel.

TestVBA用于COM加载项并通过"Excel 2013加载项"构建,有两个.cs文件:

  1. ThisAddIn.cs

此文件自动生成并稍作修改.代码是

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;

namespace TestVBA
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        private ExcelVBA oExcelVBA;

        protected override object RequestComAddInAutomationService()
        {
            if (oExcelVBA == null)
            {
                oExcelVBA = new ExcelVBA();
            }
            return oExcelVBA; …
Run Code Online (Sandbox Code Playgroud)

c# excel vsto add-in excel-addins

6
推荐指数
1
解决办法
352
查看次数

Office-js Excel 插件的功能测试(Selenium?)

我们为 Excel 开发基于 Office-js 的插件,我们想要为 Windows 上的桌面版 Excel 编写自动化功能测试(最好使用 Selenium)。

我们遇到的第一个问题是 Excel/Windows 的不同组合在下面使用 IE/Edge 的 webview。让 IE 死掉,假设我们只需要使用 Edge webview 进行测试(EdgeHTML,因为 Edge-chromium webview 尚未发布)。

所以主要问题是:我们无法(或不知道如何)将插件的 webview 与 Selenium 连接,因为我们不负责启动 webview 的进程 - 它是由 Excel 本身启动的。有没有推荐的方法来运行带有插件的桌面版 Excel 的功能测试?我们可以通过 COM 来控制 Excel 本身,所以这不是问题。但是如何控制addin下面的webview呢?

我们尝试过WinAppDriver,但它提供了生成窗口的特定于 Windows 的 XML,而不是我们希望看到的插件的 HTML,这使得导航和断言变得脆弱而复杂。

我认为我们到处搜索但找不到任何漂亮的解决方案,所以肮脏的黑客也是允许的,只要它们能够可靠地工作并且不会太慢。

selenium functional-testing office-addins excel-addins office-js

6
推荐指数
0
解决办法
359
查看次数

以编程方式添加和安装Excel加载项在哪里保存?

我试图自动添加和安装加载项位于共享网络驱动器上的Excel加载项.我从网上(这里这里)的阅读中知道,我需要将共享网络驱动器上的副本设为只读.感谢第一个链接,我现在知道如何使用这种将文件保存在共享网络驱动器上的方法来对我的插件进行修改,修复和添加.

现在了解了这个过程,我开始研究如何在共享网络驱动器上自动添加和安装加载项.我遇到了这篇文章,它指出了使用Excel.AddIn对象的正确方向.所以,我花了一些时间查看AddIn Object属性上的msdn文档(Installed PropertyAddIn Object本身),我在这里找到了一些代码,用于在一行中添加和安装外接程序

AddIns.Add("generic.xll").Installed = True
Run Code Online (Sandbox Code Playgroud)

我的问题(和关注):

在下面的说明中

说明

Bullet point 5让我有点担心,因为如果使用上面的代码片段来添加和安装Add-In,我无法通过我在网上挖掘找到它将其复制到本地/用户的文件夹(我不知道) t)),将它保存在共享网络文件夹中,或者它是否会提示用户就像他们手动浏览添加加载项一样.如果它提示他们有没有办法选择他们(总是点击'否')或有没有办法选择'否'而没有向他们显示提示?如何使用上面的代码并确保它添加并安装该共享网络驱动器上的加载项文件?任何人都可以为我解释这种情况吗?

excel vba excel-vba excel-addins

5
推荐指数
1
解决办法
4280
查看次数

加载项错误 该加载项无法启动

使用 Visual Studio 2017 C# Excel 2016/2019 Web 插件模板,我尝试创建一个基本插件来“将内容插入 Excel 电子表格 [VS 项目选项]”。

当我运行项目并显示以下消息时,我在 Excel 中的所有尝试都失败了:“加载项错误无法启动此加载项。” 关闭此对话框以忽略该问题,或单击“重新启动”重试。单击“重新启动”会在 Excel 中显示一个永远不会完成的“正在加载”对话框。

我尝试了以下所有步骤来解决此问题,但均未成功:

  • 以管理员模式运行VS
  • 从 Excel 2016 切换到 2019
  • 重置 IE 设置(确保 Internet 和受限站点处于保护模式)
  • 升级到Windows Build 1809
  • 重置 Excel 加载项缓存

此外,我还确保 localhost SSL 证书是受信任的,并且我可以浏览到 IIS Express 站点而不会出现安全警告。

我应该指出,这个问题仅发生在 VS2017 模板中。如果我使用节点并旁加载加载项,则在这台特定的开发计算机上没有任何问题。

我的问题是:

  • 如何从 Excel 或 VS2017 获取有关加载项未加载原因和此错误的更多信息?

office-addins excel-addins office-js

5
推荐指数
1
解决办法
1894
查看次数