как скрыть и показать рабочий лист, используя ввод данных из пользовательской формы - PullRequest
0 голосов
/ 03 февраля 2019

Я не знаю, почему выходит из-за ошибки индексации диапазона.Когда я нажимаю на поле со списком1 и выбираю элемент, список со списком MaternityForm заполняется листами в моей книге.Затем я хочу скрыть другие рабочие листы, кроме того, который выбран в MaternityForm.После этого активный лист получит данные от пользовательской формы, но я получаю индекс из-за ошибки диапазона.

    Private Sub Get_Data_Click()
           Dim ws As Worksheet
           Dim xWs As Worksheet

           For Each xWs In Application.ActiveWorkbook.Worksheets
              xWs.Visible = True
           Next

           Set ws = Worksheets(MaternityForm.Value)
           Sheets(MaternityForm.Value).Activate
           On Error Resume Next

           For Each ws In Application.ActiveWorkbook.Worksheets
               if ws.Name <> MaternityForm.Value Then
                  ws.Visible = xlSheetHidden
               End If
           Next

           With Sheets(MaternityForm.Value)
             .Range("B3").Value = Me.NameBox.Text
             .Range("f3").Value = Me.PaynoBox.Text
             .Range("B6").Value = Me.DTPicker1.Value
             .Range("B7").Value = Me.DTPicker2.Value
             .Range("B17").Value = Me.FirstPayBox.Value
             .Range("B18").Value = Me.SecondPayBox.Value
             .Range("B25").Value = Me.MonthlyPayBox.Value
            .Range("H7").Value = Me.DTPicker3.Value
         End With

   End Sub   

1 Ответ

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

Вы путаете ваши переменные ws и xWs.


ws относится к конкретному листу, а xWs - ваш переменный лист.Следовательно, ваш второй цикл недопустим (это все равно, что сказать For Each Sheet1 in Worksheets).

Вам нужно пройтись по вашим переменным рабочим листам и сравнить их с вашим конкретным листом

   For Each xWs In Application.ActiveWorkbook.Worksheets
       if xWs.Name <> ws.Name Then
          xWs.Visible = xlSheetHidden
       End If
   Next

С учетом сказанного,нет необходимости дважды зацикливаться.

Обратите внимание, что ws.Name = MaterityForm.Value вернет либо TRUE, либо FALSE.Результат этого определяет ws.Visible = TRUE/FALSE

Private Sub Get_Data_Click()

Dim ws As Worksheet

For Each ws In ThisWorkbook.Sheets
    ws.Visible = ws.Name = MaternityForm.Value
Next ws

With Sheets(MaternityForm.Value)
    .Range("B3").Value = Me.NameBox.Text
    .Range("f3").Value = Me.PaynoBox.Text
    .Range("B6").Value = Me.DTPicker1.Value
    .Range("B7").Value = Me.DTPicker2.Value
    .Range("B17").Value = Me.FirstPayBox.Value
    .Range("B18").Value = Me.SecondPayBox.Value
    .Range("B25").Value = Me.MonthlyPayBox.Value
    .Range("H7").Value = Me.DTPicker3.Value
End With

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