Tag: vba

vba – 扫描宏的文档并替换宏文本?

我遇到了一个谜题。 我工作的地方有大量的Word模板,它们都包含一个包含一些错误的autonew事件句柄。 而这个错误在于所有模板。 我想知道是否有一种方法可以扫描包含此宏的模板的目录并稍微更改宏代码? 这有可能吗?

将.NET事件暴露给COM?

我一直在尝试向VBA客户端公开和触发事件。 到目前为止,在VBA客户端,事件已暴露,我看到方法事件处理方法添加到我的模块类,但VBA事件处理方法不会触发。 出于某种原因,调试事件时为null。 同步修改我的代码也没有帮助。 为了记录,我已经检查了其他SO问题,但他们没有帮助。 任何好的答案将不胜感激。 [ComVisible(true)] [Guid(“56C41646-10CB-4188-979D-23F70E0FFDF5”)] [ClassInterface(ClassInterfaceType.None)] [ComSourceInterfaces(typeof(IWebEvents))] [ProgId(“MyAssembly.MyClass”)] public class MyClass : ServicedComponent, IMyClass { public string _address { get; private set; } public string _filename { get; private set; } [DispId(4)] public void DownloadFileAsync(string address, string filename) { _address = address; _filename = filename; System.Net.WebClient wc = new System.Net.WebClient(); Task.Factory.StartNew(() => […]

如何将字节数组作为UDT属性从VB6 / VBA传递到C#COM DLL?

我有一个C#库,我正试图向VBA公开。 我可以很好地将参数传递给函数(即“ref byte [] someArray”),但传递对象或结构只是不起作用。 如果我尝试传递一个字节数组作为类的属性,我在VB-中得到以下错误 标记为受限制的函数或接口,或者该函数使用Visual Basic中不支持的自动化类型 如果我尝试传递一个字节数组作为结构的属性,我在VB-中得到以下错误 我已经打了两天了,而且我一直在寻找那些声称有答案的post,但是没有一个能为我效力。 所以这是我目前的代码: [ComVisible(true)] [Guid(“7F53F7A5-15C9-4A99-A855-38F5E87702D0”)] [InterfaceType(ComInterfaceType.InterfaceIsDual)] // Tried as InterfaceIsDual and as InterfaceIsIDispatch public interface IDetail { [DispId(1)] // Tried with and without these int SomeInt { get; set; } [DispId(2)] string SomeString { get; set; } [DispId(3)] byte[] SomeByteArray { return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_UI1)] get; […]

使用VBA创建Outlook事件(不是约会!)

所以有一个线索SO Link Here链接如何制作一个outlook“事件”,但实际上它创建了一个约会,而不是一个事件。 可以阅读有关HERE的差异。 我的问题很简单……如何创建实际事件,而不是使用VBA预约? 谢谢!

将数组数据从excel VBA发送到WCF

我的问题是,我想从VBA向WCF发送一个字符串数组。 c#代码是: [OperationContract] void SetSomeObjects(string[] data); 这是VBA部分 Dim data(2) As String data(0) = “abc” data(1) = “def” Dim service2 As Object Set service2 = GetObject(ServiceBindingInformation) service2.SetSomeObjects data 最后一行抛出VBA “Type Mismatch Error” 我不知道为什么会这样。 请建议一种从VBA向WCF服务发送数组数据的方法如果我使用object作为参数类型,它会给出错误,如附带的屏幕截图所示

暴露给VBA(COM)的C#属性:运行时错误’424’:需要对象

这个C#代码在.NET 4.5 ComVisible程序集中: C#代码 [InterfaceType(ComInterfaceType.InterfaceIsDual)] [Guid(“22341123-9264-12AB-C1A4-B4F112014C31”)] public interface IComExposed { double[] DoubleArray { get; set; } object[] ObjectArray { get; set; } object PlainObject { get; set; } double ScalarDouble { get; set; } } [ClassInterface(ClassInterfaceType.None)] [Guid(“E4F27EA4-1932-2186-1234-111CF2722C42”)] [ProgId(“ComExposed”)] public class ComExposed : IComExposed { public double[] DoubleArray { get; set; } public object[] ObjectArray { […]

使用C#/ VBScript获取mdb文件(msaccess)中的所有源代码

我想从Access数据库(表单,模块)获取所有源代码,而不使用Office interops。 我喜欢这里的AllCodeToDesktop()函数。 但是,它从mdb文件内部运行。 什么是VBScript文件加载mdb文件并在其上运行该函数?

C#片段需要复制VBA Like运算符

我正在转换包含LIKE运算符的VBA代码,如 dim sToken as String if sToken Like “(*,*)” then … 在所有情况下,模式仅使用匹配任何字符串(包括空字符串)的*通配符。 VBA Like运算符只产生一个true / false结果,因此可以根据后续的VBA代码进行进一步解析,并在匹配时拔出匹配的子字符串。 如果有人能提供C#片段来测试相同类型的简单通配符,我将非常感激。 如果片段也产生匹配的子串 – 甚至更好。

在C#和VBA之间进行通信

应我老板的要求,我创建了一小组脚本,用于定期监控某些设备和进程的状态。 随后使用相对复杂的VBA模块处理此信息,该模块收集所有信息,应用公式,设置范围并生成图表等。 但是有两个问题:我是业余程序员,所以我的VBA例程非常低效。 这对我来说不是一个大问题(我只是在跑步时起床喝咖啡),但对于其他用户来说,这可能很麻烦,因为不知道为什么这么长时间。 我想要一个进度的图形表示。 应用程序的配置是通过文本文件完成的。 我想提供一个体面的GUI来设置配置。 为了实现这一点,我正在寻找一种让我的C#WinForms应用程序与我的VBA应用程序通信的方法。 我知道如何从我的C#应用​​程序运行VBA例程,但我不知道如何让它们实时进行操作。 以下是我特别想要实现的两件事: 我已经有一个在VBA例程结束时保存的日志文件。 而不是我想要将log / debugging-messages实时发送到我的C#应用​​程序 (不仅仅是在应用程序的末尾),因此消息可以在我的GUI应用程序中显示,因为它们是由VBA应用程序生成的。 我还希望VBA应用程序将有关实时进度的信息发送到我的GUI应用程序,以便在GUI应用程序中创建图形化进度条 。 我已经考虑过通过标准输出进行通信。 我知道如何使用C#/ .Net从标准输出中读取,但我不确定如何使用VBA写入StdOut流。 我相信很多人会指出我想要实现的是愚蠢和老式(或完全没必要),但作为业余程序员,对我来说这似乎是一个非常具有挑战性和有趣的项目,可以教我一件事或两个。

从C#调用VBA函数

是否可以调用VBA函数(在Access中),该函数从外部世界获取两个字符串参数(例如来自c#但其他人也会这样做)?