我想在每次保存工作簿时以编程方式选择和修改不同的工作表。但是,最后,我想将焦点设置在特定工作表上,以便工作簿与该特定工作表一起保存。我注意到的是,每当代码执行时,它都会激活工作表,修改它们,但最后它会返回到我在运行代码之前选择的工作表。 这是我的代码:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets(1).Activate
Debug.Print Sheets(1).Name
End Sub
上面的代码在一个空的本地工作簿中执行,其中包含 2 个空工作表Sheet1
和Sheet2
.每当我保存选中Sheet2
工作簿时,我都会看到它确实被激活了,因为控制台日志打印Sheet1
,但是在工作簿中,选定的工作表仍然Sheet2
。我正在使用SAP的业务对象分析,但如上所述,工作簿是一个本地启用宏的工作簿,未保存在SAP NetWeaver平台上。
我是否可以永久地将焦点设置为其他工作表,使其在工作簿中可见?
谢谢
编辑:
哦不!!!我再次遇到了不同保存按钮行为不一致的烦人问题,但尚未解决!我刚刚意识到,如果我通过工作簿保存按钮保存,工作表会永久更改,但是当我通过代码编辑器保存时,它不会。我遇到的上一个问题是保存在SAP NetWeaver上的工作簿,其中VBA代码不是通过工作簿保存按钮执行的,而是通过代码编辑器保存按钮执行的。我想我将不得不使用 SAP 记录一个 OSS 对于这种不一致。
你说的只有在有人写过的情况下才有可能:
Private Sub Worksheet_Activate()
Sheets(2).Activate
End Sub
在工作表(1)。
否则,您使用的代码:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets(1).Activate
Debug.Print Sheets(1).Name
End Sub
应该激活第一个Sheet
,以后不应该更改。
我不知道Sheet2
与Sheet1
相比在哪里。
你说
代码(上面)在一个空的本地工作簿中执行,其中 2 个空 工作表工作表 1 和工作表 2。每当我保存工作簿时 选择了Sheet2,我看到它确实被激活了,因为控制台 日志打印工作表 Sheet1,但在工作簿中打印选定的工作表 剩余表2
您的代码不会对名为Sheet2
的工作表执行任何操作。 它只查看 Tab 键顺序中的第一个工作表 - 工作表可以称为任何内容。
它激活第一个工作表,然后将第一个工作表的名称放在即时窗口中。
此代码将选择带有选项卡名称的工作表Sheet2
,然后将活动工作表 (Sheet2) 的名称放在选项卡名称为Sheet1
的工作表的单元格A1
中。
最后,它选择代号为Sheet3
的工作表(代号是Project Explorer
中不在括号中的名称)。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
With ThisWorkbook
.Worksheets("Sheet2").Select
.Worksheets("Sheet1").Range("A1") = ActiveSheet.Name
End With
Sheet3.Select
End Sub
只需使用以下代码:
Sub activateSheet(sheetname As String)
'activates sheet of specific name you want.
Worksheets(sheetname).Activate
End Sub
然后对于选择另一张纸:
Sub activateSheet(sheetname As String)
'selects sheet of specific name you want.
Sheets(sheetname).Select
End Sub
问候
西西