Tag: vba

如何使用C#的Application.OnKey而不涉及VBA代码?

我想在Excel模板(.xlt)中使用UDF我使用了Application.OnKey(“^v”,”MyFunction”); 我想在用户粘贴excel中的单元格时使用单独的函数,即MyFuction,但是当我在thisworkbook.cs中定义函数时,我不会工作… 提前致谢..

VBA和“类不支持自动化或不支持预期的接口”

我有ComVisible类的.NET程序集。 几天前(我可以通过git确切地发现那个时刻)发生了一些事情–Excel不再看到这个类了。 所以: 我有接口 [ComVisible(true)] [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface MyInterface { … } 和class级 [ClassInterface(ClassInterfaceType.None)] [ComVisible(true)] [ProgId(“MyClass.Id”)] public class MyClass { … } Excel通过创建实例 Dim c as MyClass Set c = New MyClass 早期的一切都像魅力,但删除一些方法(从界面和类)后Excel很疯狂 – 它向我显示错误Class doesn’t support Automation or does not support expected interface 。 哪里可以成问题? 我查了几次。 删除某些方法后发生错误 这个类是部分的(可能问题出在这里?) 早些时候一切都工作..

以编程方式检查MS Office许可证状态

是否可以以编程方式检查MS Office(2007-2016)许可证状态? (C ++首选) 我将在下面与您分享我的研究,也许它会以某种方式提供帮助。 我知道从2010年办公室开始,有OSPP.vbs脚本来检查许可证状态。 但由于我不能在我的代码中使用此脚本(因为安全问题),我使用WMI从C ++中的SoftwareLicensingProduct信息查询LicenseStatus。 问题是,对于2013办公室,查询返回了36个许可证(其中2个具有密钥 – 第一个许可证代表Word,Excel,PowerPoint,第二个代表Visio)。 对于2016办公室,有一个EACH办公应用程序的许可证(一个用于Word,一个用于Excel,一个用于Powerpoint,另一个用于Visio)。 其中一个可能比另一个更早到期,而2013年办公室则有一个Word-Excel-PP的通用许可证和另一个用于Visio的许可证。 如何明确检测某个许可证1)是否涵盖我通过对象模型使用的Office应用程序2)尚未过期? (在SoftwareLicensingProduct类中是否可以使用每种应用程序的某种ID?) NB 关键是我在C ++中通过对象模型使用Word,Excel,PowerPoint和Visio(2007-2016版本),并且在启动我需要知道的任何应用程序之前,他们的许可证是否已过期。 我会感激任何帮助! 先感谢您。

什么是String 以及如何投射它?

我目前处于不幸的位置,不得不通过COM Interop从C#调用VBA宏。 宏返回一个字符串数组,看起来像: Public Function Foo() As String() 然后我试图在C#中转换为一个字符串数组,如下所示: var result = (string[])xlApp.Run(“Foo”, … missing args …) 然后导致运行时错误: 无法将类型为’System.String [*]’的对象强制转换为’System.String []’。 有谁知道String [*]是什么,你是否知道如何将它转换为C#string []? 这个演员在我创建的一个简单的测试用例中工作。 我能看到的唯一区别是,在简单的情况下,我在VBA中的数组是字符串类型(0到5),而在更复杂的情况下,它是字符串类型(1到6)。 这可能是原因,如果是这样,我的VBA相当生疏 – 我该如何解决? 非常感谢, 乔恩

使用.net将vba宏代码注入excel

如何使用.net 4将宏代码(从数据库源)插入到已知的Excel文件中

如何处理从VBA中的C#方法返回的字符串数组

我在C#中编写了一个返回字符串数组的程序集,C#代码如下: [ComVisible(true)] public class PostcodeFinder { public string[] SearchPostcodes(string postCode) { var searchService = new QuickAddress(“http://xxxx:xxxx/”) {Engine = QuickAddress.EngineTypes.Singleline, Flatten = true}; var mPicklist = searchService.Search(“GBR”, postCode, PromptSet.Types.OneLine); var x = mPicklist.Picklist.Items.Count(); var resultsToReturn = new string[x]; for (var i = 0; i < x; i++) { resultsToReturn[i] = mPicklist.Picklist.Items[i].PartialAddress; } return resultsToReturn; } } […]

COM服务器如何使用不同的ComInterfaceType枚举封送C#类库中的可空?

我听说Nullable是一个C#generics类,它不能与COM一起使用 – 就像任何其他generics类一样。 好吧,在我的C#类库中,我有: [InterfaceType(ComInterfaceType.InterfaceIsDual), Guid(“2FCEF713-CD2E-4ACB-A9CE-E57E7F51E72E”)] public interface ICOMClass { int? GetNullable(); } [ClassInterface(ClassInterfaceType.None)] [Guid(“57BBEC44-C6E6-4E14-989A-B6DB7CF6FBEB”)] public class COMClass : ICOMClass { public int? GetNullable() { int? hello = null; return hello; } } 令人惊讶的是 ,编译并且我能够在VBE中附加对我的COMClass库的引用。 我知道: VBA 不在对象浏览器的成员列表中列出.GetNullable() (即使显示隐藏的成员已勾选) VBA没有在智能下拉列表中列出.GetNullable() 但为什么: Dim c as new COMClass c.GetNullable 不抛出相当期望的Object doesn’t support this property or method ? […]

VBA中自定义COM类中的IntelliSense

有没有办法在VBA中自己构建的COM类中获取IntelliSense? 例如,在下面的示例中,我希望每当我按下点(或ctrl +空格以获得快捷方式)时都会显示“Number”: 我想,如果以某种方式解决了这个问题,我还会得到一些关于对象公共函数的信息: 那么,有什么建议? 建议1 :

传递VBA类的实时实例时,C#ITypeInfo.GetContainingTypeLib失败

所以我已经尝试在VBA类实例上调用ITypeInfo,虽然看起来很有希望但我想看看我是否可以获得对其包含项目的引用,类似于类型库。 我认为ITypeInfo.GetContainingTypeLib可能有用,但它抛出一个exception,表明VBA不会合作。 任何人都对VBA如何以不同于标准COM规范的方式做出任何想法? C#类库代码在这里。 注册COM interop并在AssemblyInfo.cs中设置COMVisible(true)以使其可从VBA访问。 下面给出的VBA客户端代码。 using System; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; namespace TypeLibraryInspector { [ComImport()] [Guid(“00020400-0000-0000-C000-000000000046”)] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IDispatch { [PreserveSig] int GetTypeInfoCount(out int Count); [PreserveSig] int GetTypeInfo ( [MarshalAs(UnmanagedType.U4)] int iTInfo, [MarshalAs(UnmanagedType.U4)] int lcid, out System.Runtime.InteropServices.ComTypes.ITypeInfo typeInfo ); //void GetTypeInfo(int typeInfoIndex, int lcid, [MarshalAs(UnmanagedType.CustomMarshaler, // MarshalTypeRef = typeof(System.Runtime.InteropServices.CustomMarshalers.TypeToTypeInfoMarshaler))] out Type typeInfo); […]

Clipboard.SetText(HTML)不再有效

我有一个代码,它在HTML标签之间添加某些生成的字符串,并使用HTML数据设置剪贴板。 如果我不是疯了但我确信此代码之前对我有用,没有对它进行任何更改,但它不再起作用了! 我找到了Clipboard HTML的文档并采用了这个例子,在下面进行了测试,它也不适用于我。 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim meh As String = _ “Version:0.9” & vbCrLf & _ “StartHTML:71” & vbCrLf & _ “EndHTML:160” & vbCrLf & _ “StartFragment:130” & vbCrLf & _ “EndFragment:150” & vbCrLf & _ “StartSelection:130” & vbCrLf & _ “EndSelection:150” & vbCrLf & _ […]