Как создать кнопку, которая открывает предыдущий лист Excel в VB.NET? - PullRequest
0 голосов
/ 02 февраля 2019

Я хочу создать кнопку, которая открывает ранее открытый лист Excel. Какова будет ваша идея?

В VBA есть код: Sheet(ActiveSheet.previos.Activate).select

Я пытался перевести этов vb.NET, но это не сработало.

Dim ActiveWorkSheet As Microsoft.Office.Interop.Excel.Worksheet=

Globals.ThisWorkbook.Application.Activeworkbook.Worksheet(ActiveWorkSheet.Previous).select()

1 Ответ

0 голосов
/ 02 февраля 2019

(Ответ 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...