Excel宏在两台计算机上的表现不同

时间:2016-07-28 20:46:10

标签: excel excel-vba office-2013 vba

我的excel文件有问题。我去年编写了一个宏来选择工作簿中带有绿色作为标签颜色的所有工作表。直到昨天,在每台计算机上一切正常。实际需要修改该文件的计算机开始采取不同的行为,只选择第一个工作表。我卸载并再次安装excel但它确实没有改变任何东西。我们在带有Office 2013 Home和业务的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

谢谢

6 个答案:

答案 0 :(得分:0)

尝试将变量名称更改为其他内容,例如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

答案 1 :(得分:0)

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

  • 按ALT + F11打开VB编辑器。
  • 转到工具>引用。
  • 在脚本不起作用的计算机上,单击另一台计算机上所选引用的复选框。

答案 2 :(得分:0)

要确保有多个具有该标签颜色的工作表,并且没有其他任何内容正在更改选择,您可以尝试此代码。
如果找到的标签颜色少于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

答案 3 :(得分:0)

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

似乎是(False)的论点 ActiveWorkbook.Worksheets(SourceTabs(t,2))。选择(False) 不再被承认

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

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

答案 4 :(得分:0)

对我有用的东西-

这是我以前的工作方式:-

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

始终无缝地工作。直到我重命名模板

该按钮似乎已硬编码到特定的excel中,并且仅记住为其创建文件的名称

因此,如果先前的文件名不存在,它将无法运行。 如果您使用的是以前的文件版本,它将打开该文件并在其上运行宏,从而使您的新输入数据毫无意义

答案 5 :(得分:-1)

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