作为典型的小企业用户,当我的笔记本电脑坏了,我不得不升级到Office 2010 (2007不再上市)。现在我有一堆既快又脏的VBA和我的旧工作表。其中没有一个是编程杰作,但这些作品都是用excel和office 2007完成的。
现在,我试着在Office 2010上使用我的旧东西,所有的东西都有点不适合使用。我在网上搜索了两天,试图为最终用户找到任何文档,没有任何运气。我发现了很多针对专业程序员的博客,他们希望制作防弹代码,从Office 0到Office2010,32位到64位(这里是8位吗?),但没有一篇文章谈到主要业务,即拥有大量自制编码以生存一天的最终用户。
如何使我的旧的2007VBA与2010年一起工作?
不,我不需要它向后兼容任何东西,只要它能与我的新电脑和新软件一起工作就足够了(在我的例子中,它是64位,如果有人想知道的话)。我只需要知道为什么我的代码不再工作了,以及如何处理它。我真正想要的是一些指向真实信息的指针,如果有的话!当然,我可以将我的代码的每一部分复制到程序员讨论论坛上,被人嘲笑,几周后我可能会让他们中的一些人开始工作,但我真正需要的是写给基本VBA用户的真实信息。我要学这个。
,那么你有什么问题?
什么改变了?
日历活动-X组件丢失。我找到了解决方案:other-customize/missing-calendar-control/03ad5d05-ca3f-4081-9989-e757223ebdde,现在我只需要在我所有的表单…上重做每个日历谢谢。
Textbox.Text没有工作,我找到并运行了Microsoft代码兼容性检查器(CII),它显示出我有几千个被“废弃”的Textbox.Text元素--“可能包含删除的对象模型项”--什么?
它变得越来越好,同样的微软软件说:“类型:不推荐的项目: xlsSmartTagRecognizer.FullName网址:http://go.microsoft.com/?linkid=9719761代码: MyFullName =ThisWorkbook.FullName”“无解释…”(顺便说一句。阻止检查人员并查看结果的唯一方法是CRT-ALT-DEL -Stop…)
我参观了检查专员提供的链接,没有提供任何帮助。
我做了几次检查,每次都有不同的结果。这很有趣。
我听到你的问题了,现在给我看看你的问题
我该从哪里开始。这是一个。我有一个表单,用户可以在其中进行新的“约会”,在保存时,VBA会在日历工作表中创建代码和新形状(以及Outlook,但这不是重点)。当用户返回并单击该形状按钮时,按钮运行一段创建的代码。以下是代码:
Private Sub myMacro2001_Click()
Dim meetingId As Integer
meetingId = 2001
Load formHours
Call formHours.selectMeeting(meetingId)
formHours.Show vbModeless
End Sub据推测,早在2007年,它就打开了formHours表格,其中存储了2001年会议的信息(meetingId)。
formHours中的代码以以下方式开始:
Sub selectMeeting (ByRef IdNo As Integer) ’Bring in the meeting ID
Meeting = IdNo
….不太优雅,但成功了。不会再那么做了。
如果你能帮我处理这个案子,我很感激,但如果你能告诉我我应该在哪里找到答案,那就更好了。什么改变了?以前工作过,现在不起作用了。该怎么办呢?
(PS. )我知道我的代码很糟糕,但是它在…上工作。我只想知道是什么改变了,我需要如何改变。
Ps.Ps是的,我知道我应该问微软,但你知道这是怎么回事…)
随访
在巴罗克和其他人提出一些善意的建议后,我设法解决了一些问题。将Text.Text改为Text.Value会产生一系列新的问题,一些文本值被用于公式,现在我需要修改它们,Val(FooTextBox.Value)
真正令人惊讶的是,2010年看起来非常缓慢!我在2007年和2010年并肩作战,2007年赢得了胜利。我的一个工人已经用2007年开了一家客户发票,那时2010年还在营业!有趣的是,2007年运行的是Athlon X2双核和有限内存,2010年是在我的新笔记本电脑的Corei7-740QM,6 GB,都在win7 7-64上。我在网上冲浪,没有发现任何抱怨说2010年Office上的VBA7比Office2007上的VBA6慢得多。我不知道这是否只是我的问题,但我的员工投票支持2007年的专心致志.
发布于 2011-06-02 11:28:01
对于所有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实际差异的文档似乎有点稀疏。此页特别提到32位ActiveX控件(包括自定义的和内置的)不会在64位版本的Office 2010中工作。因此,这很可能是你问题的根源。
还有一段来自Microsoft 这里的引用。
64位版本的Office 2010产品会出现吗? 是的,64位Office 2010产品升级将提供.然而,我们强烈建议大多数用户在32位和64位操作系统上安装32位版本的Office 2010,因为目前许多常见的Office外接程序将无法在64位版本中运行。是Microsoft 2010产品的64位安装,适用于那些通常使用非常大的文档或数据集并需要Excel 2010程序访问大于2GB内存的用户。64位版本可能存在技术问题,要安装64位版本的Office 2010产品,用户必须在其PC上拥有64位支持的操作系统。
(我强调)
如果可以,请尝试安装到Office 2010的32位版本
发布于 2012-12-09 05:13:41
我也有问题..。几十年来,我一直用它来创建"=“字符串,用于文本中的可视中断等等.
STRING$(80,"=")现在人们告诉我,Excel 2010中的代码失败了。
上面这些东西的替代品是什么?我是说..。我可以这么做..。
For X = 1 to 80
print "=";
next x
print但这是一个真正的倒退。
有一个潜在的解决办法。就是把它改成这样引用VBA .
VBA.STRING$(80,"=")它似乎在2007年仍然有效。
发布于 2016-04-21 16:30:49
从@barrowc上了解到这一点:
此页面特别提到32位ActiveX控件(包括自定义和内置)在64位版本的Office 2010中无法工作。
我有一个部分解决方案--用嵌入图像的形状替换ActiveX按钮--您需要的一些答案可能在我给出了一个关于假装“按钮点击”行为的答案中。
这是大量的工作,您正在从事件驱动的代码倒退到能力较差的对象和过时的“分配宏”设计。但是,您至少可以维护工作表设计的可视化可用性。
https://stackoverflow.com/questions/6211121
复制相似问题