将 vba 转换为 vb6 并创建 .dll - 操作方法 - 提示、技巧和风险

2023-12-11

我应该将用 VBA (Excel) 编写的大量代码转换为 VB6。但我真的不知道我必须照顾什么或从哪里开始。因此,如果能从 VB6 专家那里得到一些提示那就太好了。

我已经安装了 MS Visual Studio 并进行了一些尝试。但我不是 VB6 专家,并不真正知道我必须做什么。

最终目标是将当前放置在一个 Excel VBA 宏中的所有 VBA 代码放入 VB6 项目中,并从中创建一个 .dll。这个 .dll 应该被 Excel 引用,并且 Excel 应该像现在一样运行:-)

例如,我必须做什么才能将此 vba 代码转换为 VB6。

Public Function getParameterNumberOfMaterial() As Integer
10        On Error Resume Next
          Dim a As String
20        a = Sheets("Parameters").name

30        If IsNumeric(Application.Worksheets(a).range("C3").Value) Then
40            If Application.Worksheets(a).range("C3").Value > 0 Then

50                getParameterNumberOfMaterial = Application.Worksheets(a).range("C3").Value
60            Else
70                MsgBox "Please check cell C3 in the sheet 'Parameters'. It should include a numeric value which is greater than zero"
80                MsgBox "Parameter Number of Material/Cost is set to the default value of 10"
90                getParameterNumberOfMaterial = 10
100           End If
110       Else
120           MsgBox "Please check cell C3 in the sheet 'Parameters'. It should include a numeric value which is greater than zero"
130           MsgBox "Parameter Number of Material/Cost is set to the default value of 10"
140           getParameterNumberOfMaterial = 10
150       End If
160       On Error GoTo 0
End Function

编辑:是的,如果可以将 vba 代码转换为 .dll 这也可以。那么我就不必转换代码了。但我认为只能用 vb6 代码创建 .dll。


@Tom

好吧,我实际上正在和你一起学习这个,所以这里是,

VB.Net代码(我使用的是.net 2.0)


在 Visual Studio 2005 中打开一个新的类库项目 然后删除所有已经写在那里的垃圾并粘贴代码



'First thing to do is add a reference the Excel Runtime

Imports Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices


Namespace ExcelExample

' the following is an Attribute spcifying that the class can be accesses in a unmanaged (non-.net) way

Imports Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices


 Public Class ExcelVB


    Public Function getParameterNumberOfMaterial() As Integer
        On Error Resume Next
        Dim a As String
        Dim appInst As New Microsoft.Office.Interop.Excel.Application
        a = appInst.Sheets("Parameters").name

        If IsNumeric(appInst.Worksheets(a).range("C3").Value) Then
            If appInst.Worksheets(a).range("C3").Value > 0 Then

                getParameterNumberOfMaterial = appInst.Worksheets(a).range("C3").Value
            Else
                MsgBox("Please check cell C3 in the sheet 'Parameters'. It should include a numeric value which is greater than zero")
                MsgBox("Parameter Number of Material/Cost is set to the default value of 10")
                getParameterNumberOfMaterial = 10
            End If
        Else
            MsgBox("Please check cell C3 in the sheet 'Parameters'. It should include a numeric value which is greater than zero")
            MsgBox("Parameter Number of Material/Cost is set to the default value of 10")
            getParameterNumberOfMaterial = 10
        End If
        On Error GoTo 0
    End Function
End Class

End Namespace



  

按 F6 构建解决方案 转到“项目”->“项目属性”并检查“注册 COm 互操作”

因此输出是 .DLL 和 .tlb ,Excel 文件应引用 .tlb 文件,

您必须通过 regasm /codebase c:\Excel\dllname.dll 注册 DLL

然后您可以从 Excel 访问该函数。

这是我的项目文件夹的链接,解压它, 您会发现一个 Excel 工作簿,其中包含通过 .tlb 对 .dll 的引用

http://cid-4af152a1af4d7db8.skydrive.live.com/self.aspx/Documents/Debug.rar

这是另一篇很棒的文章

http://richnewman.wordpress.com/2007/04/15/a-beginner%E2%80%99s-guide-to-calling-a-net-library-from-excel/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 vba 转换为 vb6 并创建 .dll - 操作方法 - 提示、技巧和风险 的相关文章

  • 选择在 Excel 宏(VBA 中的范围对象)中具有值的列

    如何修改 VBA 中的这一行以仅选择具有值的列 Set rng Range A1 Range A65536 End xlUp SpecialCells xlCellTypeVisible 我不认为我做的事情是正确的CountLarge财产是
  • 将表行从 Word 文档复制到现有文档表特定单元格

    我正在寻找一个宏 它将内容从一个 Word 文档中的表格复制到另一个现有 Word 文档中的表格到特定单元格中 从第 5 行开始 复制后面的所有行并将其粘贴到现有文档中的第 5 行 这可能吗 在此输入图像描述 https i stack i
  • 如何禁用 openpyxl 表中的自动过滤器?

    当我使用 openpyxl 创建表时 它默认在所有列上添加自动过滤器 使用中提供的示例可以重现该行为文档 https openpyxl readthedocs io en stable worksheet tables html 我想显示没
  • MS Access 执行 POST Web 请求

    在我的 MS Access 应用程序中 我需要定期向我的网络服务器发送一批信息 我不需要任何花哨的东西 比如 SOAP XML RPC 或任何东西 只需一个简单的 POST 页面请求就足够了 我用谷歌搜索了一下 但找不到任何真正有用的东西
  • 如何在字符串vba中包含引号

    我想存储以下文本 Test1 Monday Test Abcdef 全部在字符串中包含引号 我知道要在字符串中包含引号 我必须包含 之前 但在这里这不是一个很好的解决方案 因为我在文本中有太多这样的解决方案 知道如何一次完成这一切吗 您有两
  • 证明 Excel VBA Scripting.Dictionary 不保留项目插入顺序

    我正在尝试决定是否为我的项目使用 Excel VBA 集合或字典 出于多种原因 我倾向于字典 但在使用字典时我会继续阅读它For Each循环检索字典项目或从字典 Items 数组读取项目时 检索顺序可能不是添加项目的顺序 这对于我的应用程
  • Word通过vba宏删除tabe列出现错误

    我想将excel中的数据复制到word表中 然后从表中删除一些列 我可以将数据复制到表中 但是当我删除列时会出现错误 无法访问此集合中的各个列 因为该表具有混合的单元格宽度 我的代码 Public Tbl1 As Table Sub cal
  • Apache poi setformula 不适用于 SE

    我正在尝试在 XSSFCell With POI 中设置公式 Cell setFormula SE D87 0 D80 D87 错误是 名称 SE 在当前工作簿中完全未知 Why 看起来您正在尝试创建一个IF公式 我发现这一页 http w
  • 如何在 Azure 逻辑应用中解析 Excel 电子表格

    我需要使用 Azure 逻辑应用从 Excel 电子表格中解析和提取列信息 我已经为我的逻辑应用程序设置了从 Outlook 检索最新未读电子邮件的功能 此外 我的逻辑应用程序执行 FOR EACH 来读取所有附件 来自未读电子邮件 并确保
  • 复制一张工作表上的静态范围,然后根据单元格中的单个值粘贴到另一张工作表中的动态范围

    我对这个问题分为三个部分 我在 Sheet1 A1 中有一个带有周数的单元格 我在 Sheet1 B1 F1 中有一个需要复制的静态范围 然后 我需要将该值粘贴到 Sheet2 中的动态范围中 偏移量为行的周数 这是我正在为我经常使用的工作
  • Outlook 无法识别一个或多个姓名

    我有以下 vba 代码 它读取邮箱并向任何发送无效代码作为邮箱回复的用户发送回复 但有时会收到运行时错误 Outlook 无法识别一个或多个名称 我的问题是 创建新的 MAPI 配置文件是否可以解决该问题 或者我是否需要添加一个代码来解析地
  • EPPlus Excel 行高不一致

    我已经使用 EPPlus 生成了一个 excel 文件 在 MS Office 2007 中一切似乎都很完美 但客户端使用的是 MS Office 2010 2013 并且在第 29 行之后未设置行高 这是一个非常奇怪的问题 我已经尝试了
  • 如何使用VBA根据条件删除Excel中的行?

    我目前正在构建一个宏来格式化数据表并删除不适用的数据行 具体来说 我希望删除列 L ABC 的行以及删除列 AA DEF 的行 到目前为止 我已经实现了第一个目标 但还没有实现第二个目标 现有代码是 Dim LastRow As Integ
  • 在 MS Word 中运行外部 vba 代码

    我可以将外部代码链接到 Word 文档吗 我有很多带有宏的 Word 文档 VBA 代码 全部使用相同的代码 我希望代码从外部源运行 而不是从所有这些文档中运行 这样 如果我必须更新代码 我只有一个地方需要更新 您可以创建一个模板并将其放入
  • 无法摆脱脚本中的硬编码延迟

    我用 vba 结合 selenium 编写了一个脚本来解析网页中可用的所有公司名称 该网页启用了延迟加载方法 因此每个滚动中只有 20 个链接可见 如果我滚动 2 次 则可见链接数为 40 个 依此类推 该网页中有 1000 个可用链接 我
  • 在 VBA Excel 中查找、剪切和插入行以匹配借项和贷项值

    我在 Sheet1 中有以下设置数据 并从第 4 行 A 列开始 其中标题位于第 3 行 No Date Code Name Remarks D e b i t Cr e d i t 1 4 30 2015 004 AB 01 04 15
  • VBA中的字符串是可以迭代的数组吗?

    VBA中字符串是数组吗 例如 我可以像在 C C 中那样迭代它吗 做这样的事情 char myArray 10 for int i 0 i lt length i cout lt lt myArray i VBA 中的等价物是什么 它的行为
  • 将 Excel 范围转换为 VBA 字符串

    我想将给定范围内的值转换为 VBA 字符串 其中原始单元格值由任何选定的列分隔符和行分隔符分隔 分隔符可以是一个字符或更长的字符串 行分隔符是行末尾的字符串 该字符串应该像我们从左上角 从左到右 到右下角读取文本一样完成 以下是范围 A1
  • Excel VBA - 添加自定义数字格式

    我有一个在 Excel 外部生成的文件 其中包含许多百分比 所有这些百分比都有一位小数 当导入到 Excel 中时 Excel 会在百分比中添加第二位小数 这似乎是 Excel 中百分比的某种默认格式 它只是添加了一个 0 我想将所有两位小
  • Excel:#CALC!使用 MAP 函数计算间隔重叠时出现错误(嵌套数组)

    我正在努力解决以下公式 它适用于某些情况 但不适用于所有情况 名字input有失败的数据集 得到一个 CALC 描述 嵌套数组 错误 LET input N1 0 0 N1 0 10 N1 10 20 names INDEX input 1

随机推荐

  • 当 JsonConstructor 参数名称与 JSON 不匹配时如何抛出异常?

    我正在反序列化一堆 C 只读结构 它们的构造函数标记为 JsonConstructor 如果我收到的任何 JSON 格式错误 我会尝试尽早失败 不幸的是 如果构造函数参数和输入 JSON 之间存在命名差异 则该参数只会被分配一个默认值 有没
  • 如何将调试器附加到 Web 服务?

    我正在使用网络服务 谁能告诉我如何调试它 附加到正在执行应用程序池的 w3wp exe 实例
  • 发布管道无权执行操作“Microsoft.Web/sites/config/list/action”

    我有一个 DevOps 发布管道 通过虚拟机上的 CLI 愉快地推送到开发资源组 当我添加一个阶段推送到相同的 QA 资源组时 我得到以下结果 错误 AuthorizationFailed 对象 ID 为 的客户端 无权在范围 subscr
  • 在jQuery中,如何高效地添加大量元素?

    我目前有真值表生成器的草图 虽然它工作得很好 但速度相当慢 我添加到的每个布尔值组合 table 使用 jQuery 对于每个值 有一个 td 元素由 jQuery 创建 然后添加到 table 此外 我使用 jQuery UI 来制作漂亮
  • 如何知道堆栈函数消耗了多少?

    最近 我在采访中遇到了这样一个问题 我们如何确定特定函数消耗了多少堆栈存储空间 众所周知 堆栈 是平台的实现细节 无法从语言本身内部检查或以任何方式查询 本质上不可能保证 C 或 C 程序的任何部分是否可以进行另一个函数调用 堆栈大小 或者
  • 如何理解“warp 中的所有线程同时执行相同的指令”。在 GPU 中?

    我在读专业CUDA C编程 并在GPU 架构概述部分 CUDA 采用单指令多线程 SIMT 架构来管理和执行 32 个线程组 称为 warp warp 中的所有线程同时执行相同的指令 每个线程都有自己的指令地址计数器和寄存器状态 并根据自己
  • 如何复制 Xcode 项目来创建免费应用程序的付费版本

    我有一个免费的应用程序 我想制作一个付费版本 我尝试创建一个新项目并将类复制到其中 但不是很简单 有没有更简单的方法呢 我复制了目标 但是我可以通过什么方式在一个目标上设置指定的代码 并在另一个目标上设置另一个代码 你能帮助我吗 Paul
  • 如何获取邮政编码的纬度和经度?

    我需要一些帮助来动态获取用户输入的邮政编码的纬度和经度 这样我就可以在邮政编码的这些区域显示商店地址 谷歌正在运行某种地理编码 你应该检查一下 它可能对你有帮助http code google com apis maps documenta
  • Node.js - MySQL 中的“PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR”

    我正在尝试编写一个Node Express来提供REST服务 应用程序启动时一切顺利 然而 几个小时后 我收到一个错误 code PROTOCOL ENQUEUE AFTER FATAL ERROR fatal false 看来有些资源即将
  • 给定 n,对 n 的数字求和。如果该值超过一位数,则继续减少产生一位数

    def digital root n x str n while len x 0 and len x 1 r 0 for i in range len x r r int x i x str r return r 数字根是数字中所有数字的递
  • Spark MapReduce 中的意外结果

    我是 Spark 新手 想了解 MapReduce 是如何在幕后完成的 以确保我正确使用它 这个帖子提供了一个很好的答案 但我的结果似乎不符合所描述的逻辑 我正在运行Spark 快速入门Scala 命令行指南 当我正确地添加行长度时 结果就
  • 类助手不会覆盖祖先的虚拟方法

    我一直将类助手理解为扩展类或部分类 它们的作用就像原始基类代码的扩展 如果我复制代码的接口部分并将其添加到基类中 并在实现中也这样做 那么代码的运行方式将与助手的运行方式完全相同 这让我始终了解助手中的多态性以及为什么它们不能重写基类中的方
  • Facebook 的通知(数据库实现)

    我想知道 Facebook 如何实现他们的通知系统 因为我想做类似的事情 FooBar 评论了你的状态 Red1 Green2 和 Blue3 对您的照片发表了评论 MegaMan 和其他 5 人评论了您的活动 我无法将多个通知写入单个记录
  • 读取文件时脚本跳过第二个 for 循环

    我正在尝试读取日志文件并将某些值与预设阈值进行比较 我的代码设法记录第一个的原始数据for在我的函数中循环 我添加了打印语句来尝试弄清楚发生了什么 并且我成功地推断出我的第二个 for 循环从未 发生 这是我的代码 def smartTes
  • 将 DataAnnotations 添加到自动生成的 DBML 类? MVC 2.0 ASP.NET

    我担心这样做 因为当 dbml 文件再次自动生成时 通常是这样 我的更改将被覆盖 我正在考虑做一个部分类并写出相同的属性来注释它们 但担心它会抱怨重复 而我什至无法实验的原因让我想到了问题的第二部分 我的 dbml 文件列表上的可扩展箭头丢
  • itextsharp 中的阿拉伯语编码

    当我尝试使用 C 这段代码创建阿拉伯语 PDF 时 生成的 PDF 文件包含离散字符 有什么帮助我无法获得连续字符吗 Create our document object Document Doc new Document PageSize
  • stl() 分解不接受单变量 ts 对象?

    我对 R 中的 stl 时间序列分解函数有疑问 告诉我我的 ts 对象不是单变量 而实际上它是单变量 tsData lt ts data dummyData start c 2012 1 end c 2014 12 frequency 12
  • 使用带有类别的 dplyr

    我有一个数据集 其中包含不同地点不同物种的计数值 该数据集不包括对物种进行调查但未发现的地点 计数 0 我尝试使用 dplyr Complete 函数来填写所有站点 但我不断收到以下错误消息 Error by can t contain j
  • 当我从模型中读取项目时,项目从组合框中消失

    I have QComboBox我设置了QStandardItemModel因为我需要其中的多选复选框 问题是 当我读取文本值并检查组合框中项目的状态时 它们从组合中消失 这就是我将模型设置为组合框的方法 areas Area one Ar
  • 将 vba 转换为 vb6 并创建 .dll - 操作方法 - 提示、技巧和风险

    我应该将用 VBA Excel 编写的大量代码转换为 VB6 但我真的不知道我必须照顾什么或从哪里开始 因此 如果能从 VB6 专家那里得到一些提示那就太好了 我已经安装了 MS Visual Studio 并进行了一些尝试 但我不是 VB