Excel VBA最终用户将Microsoft Office 2007升级到2010(VBA 6到VBA7)问题和文档需求、帮助和提示。(用关键字就够了)

Excel VBA最终用户将Microsoft Office 2007升级到2010(VBA 6到VBA7)问题和文档需求、帮助和提示。(用关键字就够了),excel,vba,ms-office,office-2010,Excel,Vba,Ms Office,Office 2010,作为典型的小企业用户,当我的笔记本电脑坏了时,我不得不升级到Office2010(2007年不再上市)。现在我的旧工作表中有一堆又快又脏的VBA。它们都不是编程杰作,但都是用excel和Office2007完成的 现在我试着在Office2010上使用我的旧东西,所有东西都离可用还有一点点距离。我在网上搜索了两天,试图为最终用户找到任何文档,但运气不好。我发现很多博客都是针对专业程序员的,他们希望能够编写防弹代码来为从Office 0到Office2010,32位到64位(这里没有8位?)的任何

作为典型的小企业用户,当我的笔记本电脑坏了时,我不得不升级到Office2010(2007年不再上市)。现在我的旧工作表中有一堆又快又脏的VBA。它们都不是编程杰作,但都是用excel和Office2007完成的

现在我试着在Office2010上使用我的旧东西,所有东西都离可用还有一点点距离。我在网上搜索了两天,试图为最终用户找到任何文档,但运气不好。我发现很多博客都是针对专业程序员的,他们希望能够编写防弹代码来为从Office 0到Office2010,32位到64位(这里没有8位?)的任何东西提供服务,但没有一篇文章谈到主要业务,即最终用户为了生存一天而使用大量的自制代码

如何使我的旧2007 VBA与2010配合使用?

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

那么你的问题是什么?

发生了什么变化

缺少日历active-X组件。我找到了解决办法:现在我只需要在所有表格上重做每个日历…谢谢

文本框。文本不起作用,我找到并运行了Microsoft Excel代码兼容性检查器(CII),它显示我有几千个这样的文本框。文本元素“不推荐”-“可能包含对象模型中删除的项”-什么

同样的微软软件指出,它在不断改进: “类型:弃用 项:[xls]SmartTagRecognitor.FullName 网址: 代码:MyFullName=此工作簿。FullName“” 没有解释…(顺便说一句,停止检查并查看结果的唯一方法是CRT-ALT-DEL–停止…)

我访问了检查员提供的链接,没有任何帮助

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

我听到了你的问题,现在让我看看你的问题

我从哪里开始。这里有一个。 我有一个表单,用户可以在其中进行新的“约会”,在保存时,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
    ….
不是很优雅,但它起作用了。不再那样做了

如果你能帮我处理这个案子,我很感激,但是如果你告诉我应该在哪里找到答案,那就更好了。 发生了什么变化?以前工作过,现在不工作了。怎么办

(注:我知道我的代码很糟糕,但它工作了……我只想知道发生了什么变化,以及我需要如何改变

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

跟进

在巴罗克和其他人的建议下,我设法解决了一些问题。将Text.Text更改为Text.Value产生了一系列新问题,一些文本值用于公式,现在我需要将它们更改为Val(FooTextBox.Value)


真正令人惊讶的是,2010年似乎非常缓慢!我在办公室里同时跑了2007年和2010年,2007年轻松获胜。我的一位员工已经用2007年的发票向一位客户开具了发票,当时2010年还在营业!有趣的是,从2007年开始,我的新笔记本电脑在内存有限的AMD Athlon X2双核上运行,2010年我的新笔记本电脑在win7-64上运行,内核为i7-740QM,6 GB。我在网上冲浪,没有发现任何关于Office2010上的VBA7比Office2007上的VBA6慢得多的抱怨。我不知道这是否只是我的问题,但我的员工投票支持2007年的一心一意

对于所有
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


关于Office2007和Office2010之间VBA的实际差异的文档似乎有点稀少。特别提到32位ActiveX控件(包括自定义控件和内置控件)在64位版本的Office 2010中将不起作用。因此,这很可能是你问题的根源

还有一句来自微软的话:

是否提供64位版本的Office 2010产品

是的,64位Office 2010产品 将提供升级但是 我们强烈推荐大多数用户 安装32位版本的Office 2010 在32位和64位操作系统上 因为目前有很多常见的系统 Office的加载项将不起作用 在64位版本中。64位 安装Microsoft Office 2010 产品将提供给用户 谁通常使用非常大的文档 或数据集,需要Excel 2010 要访问大于2GB的数据的程序 记忆。可能存在技术问题 使用64位版本,并按顺序 要安装64位版本的
STRING$(80,"=")
For X = 1 to 80
print "=";
next x
print
VBA.STRING$(80,"=")