(Ответ 1) Вы можете попробовать следующее, так как последняя страница будет сохранена в вашей книге.Убедитесь, что вы удалили msgbox, когда у вас все работает так, как вам бы хотелось.Я поместил следующий код в объект ThisWorkBook
в Excel.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim docProp As DocumentProperty
Dim strSheet As String
With ThisWorkbook
If .CustomDocumentProperties.Count > 0 Then
For Each docProp In .CustomDocumentProperties
If LCase(Trim(docProp.Name)) = "previoussheet" Then
strSheet = .ActiveSheet.Name
docProp.Value = strSheet
MsgBox "Worksheet (" & strSheet & ") has been saved."
Exit For
End If
Next
Else
.CustomDocumentProperties.Add "PreviousSheet", False, msoPropertyTypeString, ThisWorkbook.ActiveSheet.Name
End If
End With
End Sub
Private Sub Workbook_Open()
Dim wrk As Workbook
Dim docProp As DocumentProperty
Dim strSheet As String
Set wrk = ThisWorkbook
If wrk.CustomDocumentProperties.Count > 0 Then
For Each docProp In wrk.CustomDocumentProperties
If LCase(Trim(docProp.Name)) = "previoussheet" Then
strSheet = docProp.Value
wrk.Worksheets(strSheet).Select
MsgBox "Worksheet " & strSheet & " has been selected."
Exit For
End If
Next
End If
Set wrk = Nothing
End Sub
(Ответ 2) Вы можете попробовать сделать это.Однако вам нужно будет открыть книгу, используя объект ниже, а затем удерживать эту переменную (objExcel) в памяти, пока вы не покончили с ней.Ключевое слово set требуется для vba, но если вы делаете это в vb.net, тогда вы можете удалить установленные ключевые слова, а затем вы можете установить объект равным нулю, как только вы закончите с ним.Вот код:
Public objExcel As Object
Dim strSheet as string
Dim intSheet as integer
Public Sub GetPrevSheet()
Dim intI as integer
Set objExcel = CreateObject("Excel.Application")
strSheet = objExcel.ActiveWorkbook.ActiveSheet.Name
'Find the sheet with the same name as the active sheet
for intI = 1 to objExcel.Activeworkbook.Worksheets.count
if lcase(trim(strsheet)) = _
lcase(trim(objExcel.ActiveWorkbook.Worksheet(inti).name)) then
intSheet = intI
exit for
End if
next intI
'Go back 1 and then select it.
if intSheet > 1 then intSheet = intSheet - 1
objExcel.Activeworkbook.Worksheets(intSheet).select
Set objExcel = Nothing
End Sub