2017-01-19 5 views
0

Новое здесь, и я только начал учить себя кодированию. У меня есть книга, в которой есть примерно 14 таблиц/рабочих листов для сотрудников, которые вводят свои часы в день. На вкладке «Сводка» и вы хотите создать кнопку макроса для каждого сотрудника, чтобы щелкнуть его, чтобы просмотреть его вкладку. Эти вкладки сотрудника скрыты, и все, что я хочу, чтобы действие было сделано, - это показать, а затем скрыть, когда сотрудник нажимает кнопку.Создание нескольких кнопок макросов для отображения/скрытия конкретных рабочих листов

К сожалению, я получаю сообщение о неоднозначной ошибке, и я создал модуль для каждого сотрудника. Я предполагаю, что мне нужно как-то «стековый» код, но опять же совершенно новый для кодирования. Ниже приведен образец моего кода

Private Sub ShowHideWorksheets() 
    Sheets("EMPLOYEE 1").Visible = Not Sheets("EMPLOYEE 1").Visible 
End Sub 
+1

Ваш код работает для меня. Какая именно ошибка? –

ответ

0

Если вы изменили значение Private to Public, он должен работать. Я предполагаю, что вы просто создаете макросы на этом этапе, чтобы получить базовую функциональность. Вы можете скрыть (как код вы опубликовали) и отобразите так:

' This first macro actually just makes the worksheet visible and then 
' invisible each time you execute it - so I'm not sure if 
' that's what you're after 
Public Sub ShowHideWorksheets() 
    Sheets("EMPLOYEE 1").Visible = Not Sheets("EMPLOYEE 1").Visible 
End Sub 

' If it's invisible you can do this. 
Public Sub ShowWorksheets() 
    Sheets("EMPLOYEE 1").Visible = True 
End Sub 

' Basically that should give you an idea of how to proceed. 
+1

Частный будет работать, если остальная часть кода находится в том же модуле. –

+0

Верно, но никакого дополнительного контекста не было. – Amorpheuses

+0

Если вы «измените» имя «employee» в коде в том же модуле, как вы затем создаете отдельную кнопку, чтобы скрывать/отображать каждую вкладку отдельно? – athoch71

0

В основном вы хотите, чтобы переключить видимость на рабочем листе. Предполагая, что вы знаете, какой лист будет срабатывать, это что-то вроде этого:

Public Sub TriggerSheetVisibility(worksheetname as string) 

Dim ws as WorkSheet 

On Error Resume Next 'To avoid subscript out of range error if a worksheetname is passed that doesn't exit 
    Set ws = Worksheets(worksheetname) 
On Error Goto 0 

If Not ws Is Nothing Then 'Only when the worksheet exists, we can execute the rest of this sub: 
    If ws.Visible = True then 
     ws.Visible = False 
    Else 
     ws.Visible = True 
    End If 
End If 

End Sub 

Также см https://msdn.microsoft.com/en-us/library/office/ff197786.aspx

0

Это также является приемлемым подходом? Prolly долго наматывается хотя

Private Sub CommandButton1_Click() 
    Dim sheet As Worksheet 
    For Each sheet In ActiveWorkbook.Sheets 
     If sheet.Name <> CommandButton1.Caption Then 
      sheet.Visible = False 
     End If 

     If sheet.Name = CommandButton1.Caption Then 
      sheet.Visible = True 
     End If 
    Next sheet 
End Sub 

Однако мне нравится это лучше из-за того, что вам нужно только одну кнопку

Private Sub CommandButton1_Click() 
    Dim sheet As Worksheet 
    For Each sheet In ActiveWorkbook.Sheets 
     If sheet.Name <> Environ("USERNAME") Then 
      sheet.Visible = False 
     End If 

     If sheet.Name = Environ("USERNAME") Then 
      sheet.Visible = True 
     End If 
    Next sheet 
End Sub 
0

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

Sub Button1_Click() 
    Sheets("EMPLOYEE 1").Visible = Not Sheets("EMPLOYEE 1").Visible 
End Sub 
+0

То, что я пытаюсь сделать, это «добавить» кнопку на одного сотрудника на вкладке «Главная», чтобы человек мог отображать, а затем скрывать свою вкладку от всех остальных. Я пробовал вышеуказанный код, и ничего не сработало. – athoch71

+0

вкладка разработчика -> Вставить -> Форма управления -> Кнопка -> затем нарисуйте кнопку. Затем появится экран Assign macro (скажем ButtonN_Click, где N - число). Нажмите «Создать», затем вставьте код (снова N - это номер, который он вам дает. На самом деле не используйте N. Замените N номером кнопки) Sub ButtonN_Click() Таблицы («EMPLOYEE 1»). Visible = Not Sheets («EMPLOYEE 1»). Видимый Конец Sub – bvmcode

+0

Я создал лист «Сотрудник 1», и он отлично работает. – bvmcode

Смежные вопросы