问题标签 [vba6]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ms-access - 是否可以全局添加对 Microsoft Office 2016 中打开的任何内容的项目引用?
我有一个.mdb
旧的专有 Microsoft Access 应用程序 ( ),需要在 Microsoft Office 2016 的 Windows 10 上运行。
它的前端 ( .mde
) 需要一些旧.ocx
控件,我已将其缩小为需要库 ( link1、link2 ),但我不能使用Tools->References
它来添加任何东西;
数据库的管理员密码不是我拥有的。所以我想知道是否有办法将 ocx 控件添加到全局 MS Access 中,以便将它们添加到所有产品中。
尝试打开它时,我收到错误消息:
您作为事件属性设置输入的“打开时”表达式产生了以下错误:“打开表单”操作已取消。
*表达式可能不会导致宏名称、用户定义函数的名称或[事件过程]。*可能存在评估函数、事件或宏的错误。
当事件由于无法评估事件逻辑的位置而无法运行时,会发生此错误。例如,如果窗体的 OnOpen 属性设置为
=[Field]
,则会发生此错误,因为宏或事件名称应在事件发生时运行。
.net - 如何在 Windows 10 64 位的 VS 社区中获取 Office 开发工具?
2 密切相关的问题,如果这个问题很普遍,可能有助于为其他患者找到部分解决方案的解释,以及某人改进此问题的机会:
- Office 开发人员工具中是否有更好的功能来实现(部分)VBA6 到 VBS 的转换并提供对可在 Visual Studio 社区中使用的 Office 应用程序的简化访问?
- (现在回答)在我的疯狂安装之后,描述和说明如下,最终的开发环境是否可能提供最好的 VS 使用/学习环境?- 感谢thunderframe,尽管微软发出了相反的警告,但..Update 2确实可以在没有安装基础工具的情况下工作。屏幕抓取显示了您在运行“Web 平台安装程序”时看到的列表的一部分。
迄今为止的背景和过程
我想将在 Office 环境中编写的大量工作的非盈利 VBA6 代码转换为 VBS,以改进部署并获得对代码管理的更好支持。入门应该很容易:安装 VS Community 并开始导入您的 VBA 代码。困难的部分是自己进行转换,因为有很多要考虑和要做的事情。这不是真的。令人惊讶的是,VS 社区的巨大下载不包括 Microsoft Office 开发人员工具;定位和安装它们不会让你继续前进。
这个包:OfficeToolsForVS2015.exe
是您期望它的位置并从VisualStudio 的 Office 开发人员工具页面下载。运行时它会下载更多。但在 Microsoft Surface Pro 4 64 位计算机上的 Windows 10 上,它无法加载任何可见的内容并声明多个错误。它生成的错误日志包含在本文底部的代码块中。新项目窗口中没有显示任何内容;它的列表从 Web 到 Cloud,没有 Office/SharePoint 条目……(下面的屏幕抓取实际上显示了它的外观在稍后描述的部分成功后显示 New Project 窗口)。如您所料,如果安装中的下载损坏,则多次下载和安装会出现相同的失败。在线信息表明问题可能是由于 Office 没有安装应有的所有内容(尽管我的 Microsoft 品牌 PC 出厂时已安装并激活,完全更新了当前版本的 Office 365 '2016' 和 Windows 10 Pro 64)。经过一整天的大量和缓慢的下载后,我完全重新安装了 Office,并且可以正常工作。在重新安装的 Office 上再次运行OfficeToolsForVS2015.exe
并在重新启动后得到完全相同的结果,因此再次尝试。没有欢乐;浪费了几天。
那么,可以做些什么呢?完全放弃 Visual Studio 并坚持 1990 年代风格的非托管代码?我再次环顾四周,发现Office 开发人员工具有更新,但“要求”之一是只有在已加载 Office 开发人员工具时才应安装此下载 - 当然,在我的机器上他们无法加载. 好吧,也许那不是真的,我想——当然,我现在已经绝望了。
下载 Visual Studio 2015 的 Microsoft Office 开发人员工具预览 2 后,您会看到此页面,祝贺您的智慧。您发现cba_bundle.exe
在您的磁盘上有一个名为 : 的大文件(注意,我从无用的下载页面中选择了enu版本,尽管我在前面的网页上选择了“English”,但并没有将列表限制为英文)。然后我安装了这个新包。这一次,让我松了一口气的是,New Project Window 显示了下图所示的结果;从那里可以创建链接到 Office 应用程序的 VBS 项目并开始学习 Visual Studio 的过程。
这对于 Visual Studio 来说是一个可怕的开始。毕竟,我仍然不知道我是否明智地安装了开发者工具。我是否错过了可能使学习和使用更容易的重要组件?当然,微软很多在线文章中提到的 VBA6->VBS 向导并没有出现。如果将 VBA6 代码粘贴到代码窗口中,VS 会进行一些小的转换,但与向导讨论中提到的转换量不同。也许巫师是历史? 进一步的研究表明该向导不再可用。
Microsoft 的 VS 2005 不再可能,因此即使您想花所有时间尝试较早的过时版本的 VS,您也无法自己确定旧版向导是否值得。
在上图中,鼠标悬停在新安装的 Office 相关模板上。 Office/Sharepoint 节点展开以在列表中显示上述模板和相关模板。
code
以上显示了 Microsoft Office Developers Tools 安装包OfficeToolsForVS2015.exe
在带有 Windows 10 64 位和 Office 365 的 Microsoft Surface Pro 4 上声明的错误。
上图:对问题 2 的回答,由Thunderframe推荐的 Web Platform Installer 5.0 屏幕抓取说明。
vba6 - 按条件对文件名进行排序
我想创建一些代码,将文件保存到文件夹(PDF / DWG)并移动我的所有文件,其修订版本 #5 低于当前文件保存到被取代的文件夹中。
我看不到如何为修订号设置条件:我不能使用通配符,因为这会导致问题,因为文件夹中的其他文件会被错误地拾取和移动。
我对保存功能进行了排序,我只是不知道从归档部分开始。
文件名示例:
Pdf/TE1801_200-01_{name}_#5.PDF Dwg
/TE1801_200-01_{name}_#5.DWG
vba - 什么更好的内存使用:在 subs 或模块中定义常量
我知道这是一些 VB 基础知识,但不知道如何问谷歌:
VBA 如何管理常量?在某些语言中,编译器用值替换它们。但是这在 VBA 中是如何工作的?如果我在子/函数中声明它们,而不是在全局空间中,这有关系吗?特别是,如果在运行时多次调用子/函数。
我经常将函数名和其他一些字符串声明为子/函数空间中的常量 - 我更容易阅读我的代码。例如:下面代码中 Get_AppExcel_Ref() 中的 SUB_NAME,用于记录错误事件。如果 Get_AppExcel_Ref() 在程序运行时将被调用几次 - SUB_NAME 将在内存中分配一次,在第一次运行时,还是在每次调用时?或者可能存在某种性能问题,最好将 SUB_NAME 声明为全局。
vba - 这个指针类型防水吗?
我正在尝试设计一种自定义类型,该类型可用于需要窗口句柄或其他类型指针的 API,并且适用于 VBA 可以运行的所有系统。这是我所拥有的:
逻辑是:
- 只有 Office 主机的位数很重要,而不是操作系统。这绝对正确吗,我不确定?
Win64/32/16
误导性地提到 Office 的版本(而不是 Windows 的版本 - 操作系统 - 顾名思义)。
- VBA7 引入了在 64 位主机
LongPtr
中评估的类型,在 32 位主机中 - Mac 或 Windows 它应该可以正常工作(我不知道它在 16 位主机上做了什么,但 VBA7 甚至可以在上面运行吗?)。所以这是第一次检查LongLong
Long
- VBA7 是 VBA 的最后一个版本,因此无需检查更现代的版本。但是出于兴趣,有什么办法可以吗?
- 接下来,我检查 VBA7 之前的主机的位数;我不认为它可以是 64,但以防万一,这需要一个自定义
LongLong
类型(因为它只在 VBA7 中定义)- 有趣
Win64
的是,它也可以在 Mac 上工作——这个名字真的很误导人
- 有趣
- 类似的检查发生在 16 位和 32 位——只是它们不需要自定义类型(我假设
Integer
是在 16 位 VBA 中定义的,并且它是使用正确的数据类型——我从来没有遇到过,所以我真的不能查看)
现在的一个问题是该LongLong
类型在 64 位VBA7系统中标记了错误;我假设因为LongLong
这些系统上已经存在所以不是类型的有效名称。但是#If Win64 And VBA7 = 0
检查应该排除此类系统中的整个定义,所以我真的不知道为什么会出现问题 - 我已经问过一个问题。
无论哪种方式,代码仍然按预期运行;任何类型的变量都LongLong
默认为内置变量,而不是 VBA7 中的我的变量——我只是Public Type LongLong
在编辑器中以红色突出显示,这有点痛苦。解决方法是重命名它并避免冲突(但也会改变语义,这意味着它LongLong
不能在其他地方使用)。或者将指针重新定义为
这会稍微改变界面。
那么这种类型是否适用于所有系统,Mac Windows、32 64 位、VBA7 VBA6 等?
visual-studio - 有什么方法可以保存在 Visual Basic 6.0 中制作的程序的复选框状态
我在 Visual Basic 6.0 中制作(设计)了一个程序,它由大约 100 个复选框组成,该程序不需要任何代码,只是一个是/否复选框类型的程序,但我想保存复选框状态,这样如果检查盒子处于是状态,然后在重新启动程序后它的状态保持不变。我已阅读有关 My.Settings.Save 但我不知道如何使用它,我使用的是 Visual Basic 6.0。
excel - 为 VBA 版本差异而烦恼:版本 6 和版本 7
我是 VBA 新手,使用excel 2010 64bit VBA v6.0 compatible。我粘贴了代码,尝试通过 VBA 下载文件。
但是,弹出窗口说它只能在 64 位系统上运行,如下所示:
编译错误:必须更新此项目中的代码才能在 64 位系统上使用。请查看和更新 Declare 语句,然后使用 PtrSafe 属性对其进行标记。
我的问题是:
我确实使用window 和office 64 位系统。为什么窗口总是弹出?
有没有办法解决这个问题?
提前致谢。
vba - 如何使用类模块修改用户窗体标签的外观?
我有这个用户表单(图 1),我正在尝试通过类模块应用一些自定义。因此,我的第一个目标是在单击时修改标签格式(图 2)。到目前为止一切顺利,我已经通过类模块“cLabels”完成了这项工作。现在,我的第二个目标是(这是我遇到的问题)为上述标签应用其他颜色。关键是,我不知道如何做到这一点。
我尝试创建其他名为“cUserForm”的类模块,但我不知道如何将修改后的标签传递给 cUserForm 类模块并使用它的 MouseMove 事件。我知道我可以使用 MouseMove 事件通过标准 UserForm 模块应用修改,但问题是,我不希望在我的 UserForm 模块中有任何类似的代码,我希望类模块做“脏”工作。伙计们有什么想法我该如何规避这个问题?
附加信息(但对解决问题并不重要):我的最终目标是制作像这样的“按钮” https://drive.google.com/file/d/1ev_LNgxPqjMv0dtzlF7GSo7SOq0wDbR2/view?usp=sharing一些效果,例如 MouseHover , TabPress 等等。VBA 按钮非常难看。只是为了记录,我已经在一个标准的 UserForm 模块中完成了所有这些(如果有人想让工作簿看到我在说什么,我有它),但最终结果只是一团糟,这么多代码(这只是修改用户窗体外观的代码,想象一下当我放一些代码来做某些动作时,天哪)。
这是我到目前为止所拥有的:
用户窗体模块
c标签
cUserForm
工作簿: https ://drive.google.com/file/d/1cLG4pLmC-jDaysjd_dK0EFuJ_LqYqJ-u/view?usp=sharing
vba - 用于将所有附件保存在收件箱子文件夹中的 Outlook VBA 脚本
我正在尝试修改此 VBA 代码以将电子邮件中的所有附件保存在 Inboxsubfolder
中。项目填充了此文件夹中的所有消息,但其余代码不起作用。
我正在尝试打印出要调试的项目对象,但这也不起作用。
原始代码:https ://community.spiceworks.com/scripts/show/361-auto-save-attachments-to-folder
更新 1:我现在意识到只有 Application_Startup() 可以使用 Run 按钮进行调试。发送一封测试电子邮件,我能够逐步完成该程序并看到一切都按预期工作。