作为典型的小型企业用户,当我的笔记本电脑坏了,我就升级到Office 2010(2007年不再上市)。现在我有一堆快速而肮脏的VBA与旧的工作表一起使用。他们都不是编程杰作,但那些工作并完成了excel和office 2007的工作。
现在我尝试在Office 2010上使用我的旧东西,而且一切都有点可用。有两天我搜索了网页,试图找到最终用户的任何文档,没有运气。我找到了很多针对专业程序员的博客,他们希望制作防弹代码来提供从Office 0到Office2010,32位到64位(这里没有8位?)的任何内容,但没有一篇文章谈到主要业务,最终用户拥有大量自制编码才能生存一天。
如何使旧的2007 VBA与2010一起使用?
不,我不需要它向后兼容任何东西,它足以使我的新计算机和新软件(在我的情况下,它是64位,如果有人想知道)。我只需要知道为什么我的代码不再起作用,以及如何处理它。 我真正想要的是一些指向真实信息的指针,如果有的话! 当然,我可以将我的每一段代码复制粘贴到程序员的讨论论坛,嘲笑,几周后我可能会让其中一些工作,但我真正需要的是写给基本VBA用户的真实信息。我需要学习这个。
那么你的问题是什么?
发生了什么变化?
缺少日历active-X组件。我找到了解决方案:http://answers.microsoft.com/en-us/office/forum/officeversion_other-customize/missing-calendar-control/03ad5d05-ca3f-4081-9989-e757223ebdde现在我只需重做我所有表单上的每个日历......谢谢。
Textbox.Text无法正常工作,我找到并运行Microsoft Excel代码兼容性检查器(CII),它显示我有几千个“已弃用”的Textbox.Text元素 - “可能包含已删除的项目对象模型“ - 什么?
它一直在变得越来越好,同样的微软软件说: “TYPE:DEPRECATION ITEM:[xls] SmartTagRecognizer.FullName 网址:http://go.microsoft.com/?linkid=9719761 代码:MyFullName = ThisWorkbook.FullName“” 没有解释......(顺便说一下,只有这样才能阻止检查员,看到结果是CRT-ALT-DEL -Stop ......)
我访问了检查员提供的链接,没有帮助。
我几次运行Inspector,每次都会产生不同的结果。现在这很有趣。
我听到了您的问题,现在告诉我您的问题
我从哪里开始。这是一个。 我有一个表单,用户可以进行新的“约会”,保存时,VBA创建一段代码和新的Shape到日历工作表(和Outlook,但这不是重点)。当用户返回并单击该形状时 - 按钮 - Button会运行一段已创建的代码。这是代码:
Private Sub myMacro2001_Click()
Dim meetingId As Integer
meetingId = 2001
Load formHours
Call formHours.selectMeeting(meetingId)
formHours.Show vbModeless
End Sub
这是假设的,并且在2007年做了,打开表格形式,并为2001年的会议存储了信息(meetingId)
formHours中的代码以:
开头Sub selectMeeting (ByRef IdNo As Integer) ’Bring in the meeting ID
Meeting = IdNo
….
不是很优雅,但它有效。不再这样做了。
如果你可以帮我解决这个问题,我很感激,但如果你告诉我我应该在哪里找到答案会更好。 发生了什么变化?以前工作过,不再了。怎么办?
(PS。我知道我的代码很糟糕,但它确实有用......我只是想知道发生了什么变化,以及我该如何改变。
Ps.P是的我知道我应该问微软,但你知道那是怎样的......)
后续
经过Barrowc和其他人的一些建议,我设法解决了一些问题。将Text.Text更改为Text.Value创建了一堆新问题,一些Text-Values用于公式,现在我需要更改它们Val(FooTextBox.Value)
真正令人惊讶的是,2010年似乎非常缓慢!我在办公室并排跑2007年和2010年,2007年获胜。我的一名工人已经使用2007年的客户开具发票,当时2010年还在开放!有趣的是,自2007年以来,AMD Athlon X2双核内存有限,2010年我的新款笔记本电脑采用Core i7-740QM,6 GB,均在win7-64上。我上网并没有发现任何关于Office 2010上的VBA7比Office2007上的VBA6慢得多的抱怨。我不知道这是不是我的问题,但我的员工投票支持2007年的单身......
答案 0 :(得分:1)
对于您的所有TextBox
个实例,将.Text
更改为.Value
SmartTagRecognizer
问题似乎是误报,所以不需要采取任何行动
关于表单的错误,您可以尝试以这种方式创建表单以查看它是否有帮助:
Private Sub myMacro2001_Click()
Dim meetingId As Integer
Dim fmHours As formHours
meetingId = 2001
Set fmHours = New formHours
fmhours.selectMeeting meetingId
fmHours.Show vbModeless
End Sub
此外,您可以将Sub selectMeeting
更改为Public Sub selectMeeting
有关Office 2007和Office 2010之间VBA实际差异的文档似乎有点稀疏。 This page特别提到在64位版本的Office 2010中,32位ActiveX控件(自定义和内置)将无法正常工作。因此,这很可能是你的问题。
微软here还引用了一句话:
是否可以使用64位版本的Office 2010产品?
是的,64位Office 2010产品 升级将可用。的然而 我们强烈推荐大多数用户 安装32位版本的Office 2010 32位和64位操作 系统因为目前很多常见 Office的加载项将无法运行 在64位版本中。 64位 安装Microsoft Office 2010 产品将面向用户 谁经常使用非常大的文件 或数据集,需要Excel 2010 程序访问超过2GB的 记忆。可能存在技术问题 与64位版本和顺序 安装64位版本的Office 2010产品用户必须拥有64位 支持他们的操作系统 PC。
(我的重点)
如果可以,请尝试安装到32位版本的Office 2010
答案 1 :(得分:0)
我也遇到了问题...几十年来我一直用它来创建一串“=”字符,以便在文本等视觉中断...
STRING$(80,"=")
现在人们告诉我代码在Excel 2010中失败了。
上述内容的替代品是什么?我的意思是......我能做到这一点......
For X = 1 to 80
print "=";
next x
print
但这是一个倒退的实际步骤。
有一个潜在的修复方法......就是将其更改为像这样引用VBA ......
VBA.STRING$(80,"=")
它似乎仍然适用于2007年。
答案 2 :(得分:0)
从@barrowc获取这一点:
本页特别提到了32位ActiveX控件(两者都有 自定义和内置)将无法在64位版本的Office中工作 2010。
我有一个部分解决方案 - 用嵌入图像的形状替换ActiveX按钮 - 你需要的一些答案可能在an answer I gave about faking 'button click' behaviour
这是一项很多工作,你要从事件驱动的代码回归到功能较弱的对象和过时的分配宏#&设计。但您至少可以保持工作表设计的视觉可用性。