【问题标题】:Excel macro is acting differently on two computersExcel 宏在两台计算机上的作用不同
【发布时间】:2016-12-03 10:32:20
【问题描述】:

我的 excel 文件有问题。去年我编写了一个宏来选择工作簿中所有以绿色作为标签颜色的工作表。直到昨天,每台计算机上的一切都运行良好。实际需要修改该文件的计算机开始采取不同的行动,只选择第一个工作表。我再次卸载并安装了excel,但它没有改变任何东西。我们在带有 Office 2013 家庭版和商业版的 Windows 7 Pro x64 上运行。

这是我的代码:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Dim selection As Boolean
    selection = False
    For Each ws In ActiveWorkbook.Worksheets
        If ws.Tab.Color = 5296274 Then
            If selection = False Then
                ws.Select
                selection = True
            Else
                ws.Select (False)
            End If
        End If
    Next

End Sub

谢谢

【问题讨论】:

  • 也许您可以使用ThisWorkbook 而不是ActiveWorkbook,以防一次打开的工作簿不止一个,而这个不是活动的?
  • 那么问题出在哪里?什么不起作用?您是否尝试过单步执行代码?
  • 没错。我知道我的代码可以正常工作,因为我们将该文件用作模板,并且在两天前开始做其他事情之前它工作了一年

标签: excel office-2013 vba


【解决方案1】:

尝试将变量名称更改为 selection1 之类的其他名称

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Dim replaceSelection As Boolean
    replaceSelection = True

    For Each ws In ActiveWorkbook.Worksheets
        If ws.Tab.Color = 5296274 Then
            ws.Select replaceSelection
            replaceSelection = False
        End If
    Next
End Sub

【讨论】:

  • 感谢您的回答,但没有奏效。今天早上它在其他计算机上开始出现不同的行为。供您参考,我使用该 xlsm 文件创建了大约 500 个生产程序。
【解决方案2】:

这是一个想法。检查两台计算机上 Excel 可用的 VBA 引用的差异。

  • 按 ALT + F11 打开 VB 编辑器。
  • 转到工具 > 参考。
  • 在脚本无法运行的计算机上,单击另一台计算机上选中的引用对应的复选框。

【讨论】:

    【解决方案3】:

    要确保存在多个具有该选项卡颜色的工作表,并且没有其他任何内容会更改选择,您可以尝试此代码。
    如果找到少于 2 张具有该标签颜色的工作表,它将显示一个消息框。

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
        Dim ws As Excel.Worksheet
        Dim strNames As String
        Dim wsNames() As String
        Dim wsCount As Integer
    
        For Each ws In ThisWorkbook.Worksheets
            If ws.Tab.Color = 5296274 Then
                strNames = strNames & ":" & ws.Name
            End If
        Next
    
        strNames = Mid(strNames, 2)
        wsNames = Split(strNames, ":")
        wsCount = UBound(wsNames) + 1
        If wsCount < 2 Then MsgBox strNames  ' to make sure more than one sheet 
        If wsCount > 0 Then
            ThisWorkbook.Sheets(wsNames(0)).Select
            ThisWorkbook.Sheets(wsNames).Select
        End If
    End Sub
    

    【讨论】:

      【解决方案4】:

      自 1 周以来,我在同一台计算机上遇到了同样的问题。 在宏正常工作之前,突然他们开始只选择第一个工作表!!!并且在同一台笔记本电脑上!!

      似乎 (False) 的论点 ActiveWorkbook.Worksheets(SourceTabs(t, 2)).Select (False) 不再被识别

      我认为在此期间推送了一些 Windows 或 Office 更新,它们正在产生问题。这是我唯一能想到的。

      我不得不改变我选择工作表的方式 工作表(工作表列表)。选择 使用 SheetList 作为数组,其中包含我需要的工作表的名称。

      【讨论】:

        【解决方案5】:

        对我有用的东西 -

        之前我是这样工作的:-

        • 在我的快速访问工具栏中添加了宏按钮
        • 点击按钮运行宏

        始终无缝运行。直到我重命名了模板

        按钮似乎被硬编码到特定的 excel 中,并且只记住创建它的文件名

        所以如果之前的文件名不存在,它就不会运行。 如果你有以前的文件版本,它会打开它,并在上面运行宏,从而使你的新输入数据毫无意义

        【讨论】:

          【解决方案6】:

          这很奇怪,因为它可以在某些计算机上运行,​​但不能在其他计算机上运行。我们正在使用 VMWare 工作站,并且在我们创建该工作簿模板 1 年后,代码无缘无故停止工作。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-02
            • 1970-01-01
            • 2018-12-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多