Использование имени листа в качестве переменной - PullRequest
0 голосов
/ 18 мая 2018

Пожалуйста, кто-нибудь может мне помочь, я, кажется, иду кругами с моей проблемой?

У меня есть рабочая тетрадь с 4 листами: Сравнение, Office1, Office2 и Office3.На листе сравнения имена других листов перечислены в столбце A. В столбце B на этом листе у меня есть кнопка.

Что я хочу сделать, это дважды щелкнуть по кнопке (я отсортировал код для этого)и затем вы попадете в ячейку D5 на соответствующем листе.

На данный момент у меня есть следующий код, но он не активирует лист Office, он использует лист сравнения.

Может кто-нибудь, пожалуйста, дайте мне знать, что мне не хватает?

Спасибо

Sub OfficeSht()

Dim rCrit3 As Range
Dim wb As Workbook
Dim ws As Worksheet

With Application
    .EnableEvents = False
    .ScreenUpdating = False
End With

Set rCrit3 = ActiveCell.Offset(RowOffset:=0, ColumnOffset:=-2)
Debug.Print rCrit3
Set ws = rCrit3.Worksheet

ws.Activate
ActiveSheet.Range("D5").Select

Application.EnableEvents = True

End Sub

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Вы не говорите, какая у вас кнопка, поэтому я привожу пару примеров.

Один фрагмент кода, который является общим во всех примерах, - WorkSheetExists, который проверяет, соответствует ли имя листа рабочей таблице.

Public Function WorkSheetExists(SheetName As String) As Boolean

    Dim wrkSht As Worksheet

    On Error Resume Next
        Set wrkSht = Worksheets(SheetName)
        WorkSheetExists = (Err.Number = 0)
        Set wrkSht = Nothing
    On Error GoTo 0

End Function  

Далее следуют три способа вызова процедуры OfficeSht.

Если ваши кнопки - кнопка ActiveX и находятся в столбце B, вы можете использовать:

Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

    OfficeSht Me.Shapes("CommandButton1").TopLeftCell

End Sub   

Этот код возвращает ссылку на верхнюю левую ячейку, в которой находится ваша кнопка - при условии, что ваше имя листаодна клетка слева от этого.


Второй способ - использование кнопки «Форма».

Public Sub Button_Click()

    OfficeSht Me.Shapes(Application.Caller).TopLeftCell

End Sub  

Опять же, он возвращает ссылку на верхнюю левую ячейку, в которой находится кнопка. Когда вы добавляете кнопку, просто назначьте ее для процедуры Button_Click.


Третий способ предполагает, что ваша кнопка на самом деле представляет собой ячейку, отформатированную в виде кнопки, или если вы просто хотите дважды щелкнуть имя листа в столбце A и покончить с наличием кнопки в столбцеB:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    OfficeSht Target

End Sub  

Наконец, ваш код для выбора ячейки D5 (строка 5, столбец 4 - R5C4).

Если вы щелкаете, или указанная ячейка находится в столбце B:

Public Sub OfficeSht(ByVal Target As Range)

    Dim rLastCell As Range
    Dim rDataRange As Range

    Set rLastCell = Cells(Rows.Count, 1).End(xlUp)
    Set rDataRange = Range("A1", rLastCell)

    If Not Intersect(Target, rDataRange.Offset(, 1)) Is Nothing Then
        If WorkSheetExists(Target.Offset(, -1).Value) Then
            Application.Goto "'" & Target.Offset(, -1).Value & "'!R5C4"
        End If
    End If

End Sub

Если вы щелкаете, или указанная ячейка находится в столбце A:

Public Sub OfficeSht(ByVal Target As Range)

    Dim rLastCell As Range
    Dim rDataRange As Range

    Set rLastCell = Cells(Rows.Count, 1).End(xlUp)
    Set rDataRange = Range("A1", rLastCell)

    If Not Intersect(Target, rDataRange) Is Nothing Then
        If WorkSheetExists(Target.Value) Then
            Application.Goto "'" & Target.Value & "'!R5C4"
        End If
    End If

End Sub

Возможно, там немного вафлялся ....:)

0 голосов
/ 18 мая 2018

Application.Goto кажется подходящим и сокращает количество шагов для достижения вашей цели.

Sub OfficeSht()
    Dim ws As string

    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    ws = ActiveCell.Offset(RowOffset:=0, ColumnOffset:=-2).value2
    Debug.Print "'" & ws & "'!D5"
    Application.Goto Reference:="'" & ws & "'!R5C4" '<~~ D5 in xlR1C1


    With Application
        .EnableEvents = true
        .ScreenUpdating = true
    End With

End Sub

Возможно, вы захотите сделать это событием Worksheet_BeforeDoubleClick.

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