我的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
谢谢
答案 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引用的差异。
答案 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年后,代码无缘无故地停止工作。