VBA最终用户将Microsoft Office 2007升级到2010(VBA 6到VBA7)问题以及需要文档,帮助和提示。 (足够的关键字)

作为典型的小企业用户,当我的笔记本电脑坏了,我有办法升级到Office 2010(2007年不再上市)。 现在我有一堆快速肮脏的VBA去与我的旧工作表。 他们都没有编程的杰作,但那些工作,并得到了工作与Excel和Office 2007完成。

现在我试图在Office 2010上使用我的旧东西,而且所有东西都可以使用。 两天来,我searchnetworking,试图find最终用户的任何文档,没有运气。 我发现了很多针对专业程序员的博客,这些程序员希望从Office 0到Office2010,32位到64位(这里没有8位?)提供防弹代码,但没有一篇文章谈论主要业务,最终用户用了很多自制的编码来存活一天。

我如何让我的旧2007年VBA与2010年一起工作?

不,我不需要它向后兼容任何东西,这是足够的,它与我的新电脑,新软件(在我的情况下,这是64位,如果有人想知道)。 我只需要知道为什么我的代码不工作了,该怎么办。 我真正想要的是一些指向真实信息的指针,如果有的话! 当然,我可以将每一段代码复制粘贴到程序员讨论论坛上,嘲笑一下,过了几个星期,我可能会让他们中的一些人工作,但我真正需要的是写给基本VBA用户的真实信息。 我需要学习这一点。

那么你的问题是什么?

什么改变了?

日历active-X组件丢失。 我发现解决scheme: 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 URL: http : //go.microsoft.com/ ?linkid=9719761 CODE:MyFullName = ThisWorkbook.FullName”“没有解释… (顺便说一句,停止督察,看到的结果是CRT-ALT-DEL – 停止…)

我访问了检查员给出的链接,没有帮助。

我几次运行检查员,每次都给出不同的结果。 现在这很有趣。

我听到你的问题,现在告诉我你的问题

我从哪说起呢。 这是一个。 我有一个表单,用户可以在保存时创build一个新的“约会”,VBA将一段代码和新的Shape创build为日历工作表(也包括Outlook,但这不是重点)。 当用户返回并单击该形状时 – button – button运行一段已创build的代码。 这里是代码:

Private Sub myMacro2001_Click() Dim meetingId As Integer meetingId = 2001 Load formHours Call formHours.selectMeeting(meetingId) formHours.Show vbModeless End Sub 

这是假设,并在2007年,从2001年会议信息存储forms小时(会议Id)

formHours中的代码开始为:

 Sub selectMeeting (ByRef IdNo As Integer) 'Bring in the meeting ID Meeting = IdNo …. 

不是很优雅,但它的工作。 不这样做了。

如果你能帮助我解决这个问题,我很感激,但是如果你告诉我我应该在哪里find答案,情况会更好。 什么改变了? 以前工作过,现在不行了。 该怎么办?

(PS。我知道我的代码是蹩脚的,但它的工作…我只想找出发生了什么变化,以及如何改变。

Ps.P是的,我知道我应该问微软,但你知道这是怎么回事…)

跟进

经过Barrowc和其他人的一些忠告,我设法解决了一些问题。 将Text.Text更改为Text.Value创build了一堆新的问题,公式中使用了一些文本值,现在我需要更改它们Val(FooTextBox.Value)

真正令人惊讶的是,2010年似乎很慢! 我在办公室和2007年并肩奔跑,2007年赢得了双手。 我的一个工人已经使用2007年开具了一个客户的账单,2010年还在开放! 有趣的是,自2007年以来,AMD Athlon X2双核处理器的内存有限,而2010年则是我的新型笔记本电脑,Core i7-740QM,6GB,都在win7-64上。 我在网上冲浪,没有发现任何有关Office 2010上的VBA7比Office2007上的VBA6慢得多的抱怨。 我不知道这是否只是我的问题,但我的员工投票2007年单身…

对于所有的TextBox实例将.Text更改为.Value

SmartTagRecognizer问题似乎是一个误报,所以不需要在那里采取行动


在表单的错误,你可以尝试创build这种forms来看看是否有帮助:

 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控件(自定义和内置)在Office 2010的64位版本中不起作用 。因此,这可能是您的问题的根源。

这里也有微软的一句名言:

Office 2010产品的64位版本是否可用?

是的,64位Office 2010产品升级将可用。 不过,我们强烈build议大多数用户在32位和64位操作系统上安装Office 2010的32位版本,因为目前许多用于Office的常用加载项在64位版本中不起作用。 对于通常使用非常大的文档或数据集并需要Excel 2010程序才能访问大于2 GB的内存的用户,将可以使用64位Microsoft Office 2010产品。 64位版本可能存在技术问题,要安装64位版本的Office 2010产品,用户的PC上必须具有64位支持的操作系统。

(我的重点)

如果可以,请尝试安装到Office 2010的32位版本

我也有问题…几十年来,我用这个来创build一个“=”字符的string在文本中的视觉rest等…

 STRING$(80,"=") 

现在,人们告诉我,Excel 2010中的代码失败。

上面的替代是什么? 我的意思是…我可以做到这一点

 For X = 1 to 80 print "="; next x print 

但是这倒退了。

有一个可能的解决方法…就是将其更改为像这样引用VBA …

 VBA.STRING$(80,"=") 

它似乎仍然在2007年工作。

从@barrowc汲取这一点:

本页特别提到32位ActiveX控件(自定义和内置)在Office 2010的64位版本中不起作用。

我有一个部分的解决scheme – 用形状embedded图像replaceActiveXbutton – 和一些你需要的答案可能是在我的假设“button点击”行为

这是很多工作,而且你正在从事件驱动的代码退化为function较差的对象和过时的“分配macros”devise。 但是至less可以保持工作表devise的可视化可用性。