4

作为典型的小型企业用户,当我的笔记本电脑坏了时,我不得不升级到 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 元素“已弃用”-“可能包含对象模型中已删除的项目” - 什么?

它越来越好,同样的微软软件声明:“类型:弃用项目:[xls]SmartTagRecognizer.FullName URL: http: //go.microsoft.com/ ?linkid=9719761 代码:MyFullName = ThisWorkbook.FullName””没有解释...... (顺便说一句。停止 Inspector 并查看结果的唯一方法是 CRT-ALT-DEL –Stop…)

我访问了检查员提供的链接,那里没有帮助。

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

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

我从哪说起呢。这是一个。我有一个表单,用户可以在其中进行新的“约会”,保存时,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 是的,我知道我应该问微软,但你知道那是怎么回事……)

跟进

在 Barrowc 和其他人的一些善意建议之后,我设法解决了一些问题。将 Text.Text 更改为 Text.Value 产生了一堆新问题,一些 Text-Values 用于公式,现在我需要更改它们 Val(FooTextBox.Value)

真正令人惊讶的是,2010 年似乎非常缓慢!我在办公室并肩跑了 2007 年和 2010 年,2007 年赢得了胜利。我的一名员工已经使用 2007 年为客户开具发票,当时 2010 年仍在开放!有趣的是,因为 2007 年在 AMD Athlon X2 Dual-Core 上运行,内存有限,而 2010 年在我的新笔记本电脑上运行 Core i7-740QM,6 GB,都在 win7-64 上。我上网并没有发现任何抱怨 Office 2010 上的 VBA7 比 Office2007 上的 VBA6 慢得多。我不知道这是否只是我的问题,但我的员工投票支持 2007 年一心一意...

4

3 回答 3

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 selectMeetingPublic Sub selectMeeting


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

这里还有微软的一句话:

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

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

(我的重点)

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

于 2011-06-02T11:28:01.713 回答
0

我也有问题......几十年来,我一直用它来创建一串“=”字符,以便在文本等中进行视觉中断......

STRING$(80,"=")

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

上面的替换是什么?我是说……我能做到……

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

但这是一个真正的倒退。

有一个潜在的解决方法...就是将其更改为像这样引用 VBA...

VBA.STRING$(80,"=")

它似乎在 2007 年仍然有效。

于 2012-12-09T05:13:41.670 回答
0

从@barrowc 了解这一点:

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

我对此有一个部分解决方案 - 用嵌入图像的形状替换 ActiveX 按钮 - 您需要的一些答案可能是我给出的关于伪造“按钮单击”行为的答案

这是很多工作,而且您正在从事件驱动的代码退回到功能较少的对象和过时的“分配宏”设计。但是您至少可以保持工作表设计的视觉可用性。

于 2016-04-21T16:30:49.463 回答