我应该如何使我的 VBA 代码与 64 位 Windows 兼容?

2024-02-13

我有一个在 Excel 2007 中开发的 VBA 应用程序,它包含以下代码以允许访问ShellExecute函数来自Shell32.dll:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

我最初是这么说的:

显然该应用程序不会 在 64 位版本的 Windows 上编译 (仍然使用 32 位 Office 2007)。我 假设这是因为Declare声明需要更新。

我读到 Office 2010 引入了 一个新的 VBA 运行时 (VB7),并且这 有一些可以使用的新关键字 在里面Declare声明允许它 在 64 位 Windows 上正常工作。 VB7还有新的预定义编译器 支持条件的常量 编译其中旧的或 将使用新的声明, 取决于是否申请 在 32 位或 64 位 Windows 上运行。

但是,由于我一直使用 Office 2007 年我需要一个替代解决方案。 我有什么选择? (我真的 不想发布 2 我的应用程序的单独版本如果 尽一切可能)。

然而,根据大卫下面的回答,我错误地理解了我的情况Declare声明不起作用。它无法工作的唯一情况是 Windows 64 位上的 Office 2010 64 位。所以,Office 2007 不是问题。


我已经在装有 Office 2010 的新 64 位计算机上使用我的内部工具的人遇到过此问题。

我所要做的就是更改代码行,如下所示:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

To This:

#If VBA7 Then
    Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#Else
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#End If

当然,您会希望确保您正在使用的库在两台机器上都可用,但到目前为止我使用的都没有出现问题。

请注意,在旧的 VB6 中,PtrSafe 甚至不是一个有效的命令,因此它会显示为红色,就好像您有编译错误一样,但它实际上不会给出错误,因为编译器将跳过if 块。

使用上述代码的应用程序可以在 Office 2003、2007 和 2010 32 位和 64 位上完美编译和运行。

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

我应该如何使我的 VBA 代码与 64 位 Windows 兼容? 的相关文章

  • 用户窗体上的类对象 TextBox 可用方法

    我注意到 当我为文本框创建类模块并在表单上使用它时 通过在表单 init 事件中通过 VBA 添加 Enter 或 Exit 方法都不可用 当然 如果我只是在表单中添加一个文本框 我可以让 DblClick 方法正常工作 因此我的类设置正确
  • 如何在网页中显示嵌入的 Excel 文件?

    我想允许在网页中查看嵌入的 Excel 报告 有什么办法吗 我不想使用 ActiveX 或 OWC Office Web 组件 我只想从 Internet Explorer 应用程序打开现有文件 我不希望用户下载然后打开它 使用 ifram
  • 使用VBA复制垂直列并沿对角线粘贴

    我有一列数据 我们称之为 A 列 其中有 35 行数据 如何在此列上循环 然后将每个数据点粘贴到另一张工作表中 同时为每个循环循环增加列和行 换句话说 我寻求对角粘贴在第二张纸中 有没有一种简单的方法可以在 VBA 中执行此类操作 不要循环
  • VBA 激活 Internet Explorer 窗口

    我正在制作一个宏 用于打开 Internet Explorer 导航并登录网站 一切正常 但我需要将 IE 窗口放在前面并激活它 这样我就可以使用SendKeys在上面 我发现网站和视频在名为的命令上有不同的方法AppActivate我已经
  • VBA - HTML 抓取问题

    我正在尝试从网站上抓取拍卖数据https www rbauction com heavy equipment auctions https www rbauction com heavy equipment auctions 我当前的尝试是
  • 如何高效打开巨大的excel文件

    我有一个 150MB 的单页 Excel 文件 在一台非常强大的机器上使用以下命令打开大约需要 7 分钟 using python import xlrd wb xlrd open workbook file sh wb sheet by
  • 从网站上的表格中抓取数据,而无需搜索标签

    这是这个问题的延续使用 InStr 搜索引号 空格 冒号等 https stackoverflow com questions 52673819 using instr to search for quotes spaces colons
  • 无法在我的抓取工具中设置超时选项以防止无限循环

    我已经使用 IE 在 vba 中编写了一个脚本 在其搜索框中的网页中启动搜索 通过点击搜索按钮根据搜索填充结果 网页加载它是searchbox几秒钟后它就会打开 但是 我的下面的脚本可以处理这个障碍并以正确的方式执行搜索 现在 我有一个稍微
  • 使用 VBA 的下拉菜单

    我需要使用 VBA 从下拉菜单中选择特定选项 我怎样才能做到这一点 链接到我们试图从中提取的网页 IE document getElementsByName down count click 我尝试过的代码 Full Module Priv
  • 在 Excel 表格中选择多列的代码

    我是 Excel VBA 新手 我需要修改我的代码 以便我能够进一步进行 我想在 Excel 表格中选择多个表格列 这是我的代码 Dim ws As Worksheet Dim tbl As ListObject Set ws Sheets
  • 如何在VBA编辑器中跳转到行号?

    我在 Office 2010 中使用 VBA 在顶部 有一个带有行号和列号的框 例如 Ln 1480 Col 17 有没有办法在代码编辑中 而不是在执行中 直接跳转到另一个行号 就像我使用的那样Ctrl G在记事本中 这个MSDN答案 ht
  • 合并和颜色样式不适用于 Apache POI excel 2003 格式

    在 Apache POI 中 我为某些单元格应用了一些样式并合并了这些单元格 当我在 2010 年或 2007 年打开时 它工作正常 但在 2003 年 格式样式消失了 每次保存 2003 Excel 文件之前都会弹出兼容性检查对话框 请参
  • VBA 中的多线程

    这里有人知道如何让VBA运行多线程吗 我正在使用 Excel 无法用 VBA 本地完成 VBA 构建在单线程单元中 获得多个线程的唯一方法是使用 VBA 之外的其他具有 COM 接口的东西构建 DLL 并从 VBA 调用它 信息 OLE 线
  • 如何在 Excel 中对一组数据进行排序以匹配另一组数据?

    我有一个不按字母或数字顺序排列的数据列表 我想对同一日期的第二个列表进行排序以匹配第一个列表 我无法更改数据的顺序 我的目标是将第二组中的附加数据粘贴回第一个数据集中 DATA SET A DATA SET B 22350 BH160 10
  • 使用 ObjPtr(Me) 返回自定义类实例的名称?

    我明白那个ObjPtr http support microsoft com kb 199824将返回内存中对象的地址 并且它指向一个名为 IUNKNOWN 的结构 并且其中编码了某种接口定义以公开对象结构 但我不知道如何确定一个对象的接口
  • SQL Server,插入 Excel“链接服务器”时出现“无效列名”错误

    我有一个简单的 Excel 电子表格文档 运行 Office 2013 我使用 Microsoft Office 15 0 Access 数据库引擎 OLE DB 提供程序 将其用作数据库 我可以使用 MS SQL Server Manag
  • 我可以获取VBA代码中的注释文本吗

    可以说我有以下内容 Public Sub Information TEST End Sub 有没有办法得到 TEST 结果 不知何故通过VBA 例如 在 PHP 中 有一个获取注释的好方法 这里有什么想法吗 编辑 应该有办法 因为像 MZ
  • VBA 中 AND 函数如何工作?

    如果这是一个愚蠢的问题 我很抱歉 但是 Excel VBA AND 函数是否检查其中的每个条件然后继续 或者在第一个 FALSE 条件处停止而不检查其他条件 我想知道出于优化目的 但到目前为止在网上没有找到任何相关信息 提前致谢 示例 如果
  • 使用输入作为显示日期的基础

    我需要一种方法来使用用户窗体上的输入来确定将在输出上显示的日期 这是我的代码 If StatusBox Value lt 23 59 And ShiftCode Value AP Then Cells emptyRow 8 Value Da
  • 检查未绑定控件是否具有值的正确方法

    简单场景 一个表单和一个文本框 未绑定 Text1 If lt gt Text1 Then MsgBox Not Empty End If 上面的代码有效 表达方式 lt gt Text1如果文本框包含字符 则计算结果为 True 无论文本

随机推荐

  • 从 Safari 中 Web 应用程序中的链接打开 iPhone 应用程序

    我正在尝试从 Safari 中的链接打开我的本机 iPhone 应用程序 我已关注这个链接 http iosdevelopertips com cocoa launching your own application via a custo
  • 如何实现React Router SPA的滚动恢复

    我正在构建一个 React 单页应用程序 我注意到滚动恢复在 Chrome 也许还有其他浏览器 中似乎没有按预期工作 在react router dom github repo上 他们有一个页面说浏览器是开始本地处理滚动 https git
  • Linq to SQL 与 Entity Framework,Microsoft 支持

    两者的优点 缺点是什么 另外 我听到了有关 Microsoft 是否会继续支持 LINQ to SQL 的各种传言 如果能提供有关此方面的进一步信息 我们将不胜感激 据我所知 根据我对上一次 PDC 的记忆 L2S 将继续得到支持 所有重点
  • EntityFramework 类上的AllowHtml 属性

    是否有不同的方法在 EntityFramework 自动生成的类的属性上设置 AllowHtml 属性 我讨厌更改自动生成的文件 因为每次更改模型时 我的更改都会丢失 但是除了使用属性之外 没有其他明显的方法可以为特定属性设置 AllowH
  • Codeigniter 的 insert_batch() 具有数千个插入,但缺少记录

    我在用着insert batch 将 10000 多行批量插入数据库的表中 我正在进行一些测试 我注意到有时所有 10 000 多行都被正确插入 但在某些情况下我在表的总计数中遗漏了 100 多行 我所拥有的记录中的字段数据没问题 因为我在
  • DataGrid RowStyle - DataTrigger 中的绑定值

    我想建立一个RowStyle这改变了Visibility行的数量 取决于两个条件 OR 默认情况下 无论布尔值 在 ViewModel 中 是否设置为 所有行都应折叠并可见True或中的一个值DataTable 绑定到Datagrid 等于
  • XHR 上传 onprogress 事件不适用于 HTTPS 连接

    我有一个通过 Angular 7 和 Node Js 将文件上传到 AWS S3 的设置 上传工作正常 但有一个问题xhr upload onprogress event 仅当通过托管服务器时才会触发此事件http 当使用https连接时
  • C# 中使用的 AForge.Video.FFMPEG

    我使用 Visual C 2008 想要从 bmp 序列写入 AVI 文件 我找到了 AForge Video VWF 但它仅适用于 vmw3 或 DIB 编解码器 我想使用 AForge Video FFMPEG 但出现错误 例如我只是编
  • ngModel 与 formControlName 位于同一表单字段上

    我曾经有一个没有任何验证的简单表单 其中 HTML 大致如下所示
  • 将字体-Awesome 图标旋转 180 度在下拉按钮内

    我创建了一些自定义按钮样式 并使用引导下拉菜单类将它们转换为下拉菜单 当我单击按钮时 我希望在下拉菜单打开时内部的 font awesome 图标旋转 180 度 并在按钮失去活动 焦点后以相反的方式旋转 180 度 返回到其原始位置 我能
  • 定义全局数组常量以在视图中使用

    我想定义全局数组常量 bootstrap php 中的代码 adv types array top gt left gt right gt bottom gt 视图文件中的代码 echo form gt input Adv type arr
  • Matplotlib:对数图中奇怪的双十年轴刻度

    我正在尝试在 Matplotlib 中制作一个涵盖数十年的双对数图 然而 返回给我的默认 x 轴刻度远非理想 因为它们一次覆盖二十个十年 其间只有 4 个刻度线 我正在使用的代码如下 rc text usetex True f ax plt
  • 字符数减去 HTML 字符 C#

    我试图找出一种方法来计算字符串中的字符数 截断字符串 然后返回它 但是 我需要这个函数来不计算 HTML 标签 问题是 如果它计算 HTML 标签 那么如果截断点位于标签的中间 那么页面就会出现损坏 这就是我到目前为止所拥有的 public
  • JQuery UI 对话框模态表单在 AJAX 应用程序中缓存旧值

    我在使用 JQuery UI 模式对话框中使用表单时遇到了很大的麻烦 当用户单击链接时 将显示该对话框 第一次打开表单时 它工作正常 表单被提交到服务器 包含的页面通过 AJAX 更新 然后对话框关闭 然而 随后尝试使用该表格却出现了问题
  • “STL”和“C++ 标准库”之间是否有明确的分离定义? [复制]

    这个问题在这里已经有答案了 可能的重复 STL 与 C 标准库 之争到底是为了什么 https stackoverflow com questions 5205491 whats this stl vs c standard library
  • 从 FlowLayoutPanel 清除控件不调用析构函数?

    抱歉 如果我遗漏了一些明显的内容 但我正在尝试从 FlowLayoutPanel panelName Controls Clear 中清除控件 一系列用户控件 不幸的是 这似乎并没有调用面板上对象的析构函数 任务管理器中的用户对象列不断上升
  • 使用extentreports获取jmeter测试结果

    对于任何使用 jmeter 进行 api 功能测试的人来说 报告并不是那么好 有没有人用过类似的东西http extentreports com http extentreports com 显示他们的测试结果 关于更好地显示测试结果的其他
  • 如何使用 jest 测试 React 类中除渲染之外的函数?

    我正在尝试做一些TDD on a React我正在构建的应用程序 使用jest我可以测试我的渲染函数 看看我是否得到了我期望的渲染结果 如果我想测试类中的其他功能怎么办 我怎样才能抓住它 例如 这里有一个React class var mo
  • 为什么我的工会没有显示正确的值?

    union int i bool b x x i 20000 x b true cout lt lt x i 它打印出 19969 为什么它不打印出 20000 A union不是一个struct In a union 所有数据占用相同的空
  • 我应该如何使我的 VBA 代码与 64 位 Windows 兼容?

    我有一个在 Excel 2007 中开发的 VBA 应用程序 它包含以下代码以允许访问ShellExecute函数来自Shell32 dll Private Declare Function ShellExecute Lib shell32