使用 VBA 激活不同的工作表不会永久更改其焦点



我想在每次保存工作簿时以编程方式选择和修改不同的工作表。但是,最后,我想将焦点设置在特定工作表上,以便工作簿与该特定工作表一起保存。我注意到的是,每当代码执行时,它都会激活工作表,修改它们,但最后它会返回到我在运行代码之前选择的工作表。 这是我的代码:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets(1).Activate
Debug.Print Sheets(1).Name
End Sub

上面的代码在一个空的本地工作簿中执行,其中包含 2 个空工作表Sheet1Sheet2.每当我保存选中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,以后不应该更改。

我不知道Sheet2Sheet1相比在哪里。

你说

代码(上面)在一个空的本地工作簿中执行,其中 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

问候

西西

最新更新