Excel - использование флажков Userform для определения того, какие листы вызывать - PullRequest
2 голосов
/ 25 февраля 2012

Я хотел бы выбрать несколько рабочих листов в зависимости от состояния флажков пользовательской формы, и я получаю ошибку при выборе. В моей пользовательской форме есть всего 16 флажков, поэтому мне нужен метод определения листов, которые нужно выбрать.

Краткий пример:

 `Sub chkboxes()'

DIM SheetNames as string  

If CB1.value = true then  
   SheetNames = "SummaryReport"  
End IF

If CB2.value = true and sheetNames <> "" then  
    SheetNames = Sheetnames & "," & "WeekdaysReport"  
elseif CB2.value = true and sheetnames = "" then  
    SheetNames = "WeekdaysReport"  
End If

If CB3.value = true and sheetnames <> "" then  
    SheetNames = SheetNames & "," & "WeekendsReport"  
elseif CB3.value = true and SheetNames <> "" then  
    SheetNames = "WeekendsReport"  
End If

If SheetNames = ""  
    Exit Sub  
End If

Sheets(Array(SheetNames)).select   **'This is where the script stops and prompt error.**  
Call ExportToPDF  

SheetNames = ""

End Sub

Выше довольно любитель, я все еще очень незнаком с VBA и программированием. Надеюсь, я смогу получить руководство. Спасибо.

Я попытался найти решение в Интернете, но не смог найти похожий пост.

Ответы [ 2 ]

1 голос
/ 25 февраля 2012

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

 Private Sub UserForm_Initialize()
    With ListBox1
    .AddItem "SummaryReport"
    .AddItem "WeekdaysReport"
    .AddItem "WeekendReport"
    End With
End Sub

Private Sub CommandButton1_Click()
    With ListBox1
    Dim i As Integer
    Do Until i = .ListCount
        If .Selected(i) Then
        Sheets(.ListIndex + 1).Select
        'MsgBox Sheets(i + 1).Name
        'do something with selected sheet
        End If
        i = i + 1
    Loop
    End With

End Sub
0 голосов
/ 25 февраля 2012

В вашем коде ненужный вызов функции «Массив» и несколько других «горячих клавиш».

Пожалуйста, замените следующие строки:

Sheets(Array(SheetNames)).select
Call ExportToPDF

с этим фрагментом:

Dim aSheetNames() As String
Dim i as long

aSheetNames = Split(SheetNames,",")

For i = LBound(aSheetNames) To UBound(aSheetNames)
    Sheets(aSheetNames(i)).select 
    ExportToPDF
Next

И, надеюсь, теперь процедура должна работать, если мои предположения были верны.

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

If CB2.Value Then  
    If SheetNames <> "" Then SheetNames = Sheetnames & "," 
    SheetNames = Sheetnames & "WeekdaysReport"  
End If  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...