我应该如何使我的 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 兼容? 的相关文章

  • VB FFT - 难以理解结果与频率的关系

    试图理解我正在使用的 fft 快速傅里叶变换 例程 窃取 回收 输入是 512 个数据点的数组 它们是样本波形 测试数据生成到该数组中 fft 将该数组变换到频域 尝试理解频率 周期 采样率和 fft 数组中位置之间的关系 我用例子来说明
  • 以独立于区域设置的方式读取 Excel 文件

    我使用以下代码从各种 Excel 文件读取数据 IMEX 1 to force strings on mixed data HDR NO to process all the available data Locale 1033 is en
  • 将 CSV 导入 Excel - 自动“文本到列”和“插入表格”

    我想在 Excel 2010 上打开 CSV 逗号分隔 文件并自动将文本转换为列 然后选择所有活动单元格并插入带标题的表格 是否可以在我的功能区中添加一个按钮来为我完成这一切 我经常使用不同大小的 CSV 文件 我发现每次手动执行此操作有点
  • VBA 写入文件时对数值进行四舍五入 - 如何防止?

    在下面的代码中 我在确保文件编写器不会将我的数字四舍五入到一定的小数位数时遇到问题 我需要使用变体 因为有时该值是字符串 有时它是数字 我怎样才能强制它准确地写出变量是什么 例如 下面的代码可能显示 0 00038 我想显示确切的值 Dim
  • VBA删除列中的单元格并根据单元格的值左移?

    如果单元格为空 如何删除 B 列 和左移 中的单元格 下面是我所拥有的 但它给出了 应用程序定义或对象定义的错误 Sub DeleteCellShiftLeft For i 1000 To 1 Step 1 If Cells i B Val
  • Java:VM 如何在 32 位处理器上处理 64 位“long”

    JVM 如何在 32 位处理器上处理 64 位的原始 long 在多核 32 位机器上可以并行利用多个核心吗 64 位操作在 32 位机器上慢了多少 它可能使用多个核心来运行不同的线程 但不会并行使用它们进行 64 位计算 64 位长基本上
  • 如何确保我的 IE 选项卡名称正确?

    我使用此代码从 Word VBA 获取 Internet Explorer 的实例 并从网页中抓取一些值 我循环遍历 4 个项目 以防万一 有时我不小心抓住了一个名为 Windows Explorer 的东西 我不知道那是什么 来抓住 In
  • Excel:查找和替换宏 - 仅一列

    我编写了一些宏来将大量数据格式化为相同的可接受格式 我们从中提取的程序拒绝按照我们想要的方式提取数据 但理论上在 Excel 中更改并不难 它设置运行的方式是为修饰符使用单独的宏 然后使用 全部运行 宏来调用所有修饰符 目前我有 Sub R
  • 尝试使用 Excel 中的 VBA 从网页中提取一个值

    我几天来一直在尝试查找信息 但是我找到的所有示例都只有一小段代码 我需要全部 我想要做的是从主页中提取一个值并将其放入 Excel 的单元格中 然后从同一站点上的另一个页面获取另一个值并放入下一个单元格等 该页面是瑞典证券交易所页面 我用作
  • 使用.NET 访问Windows 注册表?

    我发现一个奇怪的行为 NET http en wikipedia org wiki NET Framework模块访问Windows注册表 http en wikipedia org wiki Windows Registry使用Regis
  • 如何从特定类获取特定链接?

    我想提取这个href从那个特定的class tr class even td a href italy serie a 2015 2016 Serie A 2015 2016 a td 这是我写的 Sub ExtractHrefClass
  • 宏VBA获取Outlook 2003中选定的文本

    我正在尝试使用此代码片段来获取 Outlook 2003 中选定的文本 Sub SelectedTextDispaly On Error Resume Next Err Clear Dim oText As TextRange Get an
  • 从新的 xlsx 文件中删除宏

    功能部分 下面的代码将 xlsm 文件中的 2 个选项卡保存到新的 xlsx 文件中 文件保持打开状态以进行编辑 错误 xlsm 选项卡在工作表代码中有触发器 该触发器无效 一旦在 xlsx 工作表中输入任何内容 就会导致错误 所需输出 编
  • Excel VBA 多张表求和

    我正在尝试创建一个或多个函数 可以将每个客户的考勤卡每日工作时间相加 得出每天的总工作时间 每个客户在一个工作簿中都有自己的工作表 目前 我有一个函数可以确定与第一个客户一起使用的工作表 工作簿中的第三个工作表 Function First
  • VBA Word - 更改小数点分隔符

    我周围的一些人在 Windows Office 中使用国家本地化 不幸的是 这导致我的宏无法执行简单的数学运算 因为它们使用逗号表示小数位置 而我编辑的 pov ray 文件仅使用逗号作为列表分隔符 使用点表示小数点 1 我知道在 Exce
  • SSIS-从 Sharepoint 下载 Excel 并将其加载到 SQL 数据库

    我目前遇到的情况是共享点网站上有一个 Excel 文件 我需要将该 Excel 文件加载到数据库中 Excel 文件有多个工作表 我尝试过以下方法 但运气为零 方法 1 我访问 sharepoint 站点并访问 库 选项卡 并选择使用资源管
  • 从单元格复制时省略引号

    Problem 当从程序外部的 Excel 复制单元格时 会自动添加双引号 Details 我在 Windows 7 计算机上使用 Excel 2007 如果我有一个具有以下公式的单元格 1 CHAR 9 SOME NOTES FOR LI
  • 保护 Excel VBA 代码的最佳方法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经整理了一个简单的 Excel 数据库 该数据库执行一些宏函数 并且我需要将此数据库分发给几个人 但他们无法看到宏函数实际上是如何
  • Python(openpyxl):将数据从一个excel文件转移到另一个(模板文件)并用另一个名称保存,同时保留模板

    我有一个templateexcel 文件名为template xlsx其中有许多张 我想从单独的地方复制数据 csv文件到第一页template xlsx 命名为data 并将新文件另存为result xlsx同时保留原来的模板文件 我想粘
  • VBA 代码基准测试

    对 VBA 代码进行基准测试最准确的方法是什么 在我的例子中 我正在 Excel 中测试代码 除了下面的 2 种之外 还有其他对代码进行基准测试的技术吗 如果有 该方法的优点 缺点是什么 这里有两种流行的方法 First Timer Sub

随机推荐

  • 从 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