2016-07-28 8 views
1

Я хочу выбрать массив листов, используя метод Sheets (Array()). Листы, которые я хочу выбрать, называются в ячейках моего рабочего листа Printlijst. В sheetnames перечислены формы столбца D К.Excel Печать листов из массива

Не все клетки заполнены так, если я использую функцию folowing

Это то, что лист выглядит следующим образом: http://i.stack.imgur.com/uJqZc.jpg

И это код:

Sub PDF_maken() 
Dim ws As Worksheet 
Dim LR As Long 
Dim r As Range 
Dim Mypath As String 
Dim strarray As String 


Set ws = ActiveWorkbook.Worksheets("Printlijst") 
LR = ws.Cells(Rows.Count, 1).End(xlUp).Row 

For Each r In ws.Range("B20:B20").Cells 

If Not IsEmpty("B" & r.Row) Then 
Mypath = ws.Range("B" & r.Row).Text 

colCheck = 4 
Do Until Cells(r.Row, colCheck) = "" 
    strarray = strarray & IIf(colCheck > 4, ",", "") & Cells(r.Row, colCheck).Value 
colCheck = colCheck + 1 
Loop 

ActiveWorkbook.Sheets(strarray).Select 
    ActiveWorkbook.SelectedSheets.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
Mypath & ws.Range("C" & r.Row).Text & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, _ 
IgnorePrintAreas:=False, OpenAfterPublish:=False 


End If 
Next r 

End Sub 

ошибки происходит, когда более чем один лист должен быть выбран когда я использую errorcheck strarray является «2450,2451,2452,2453,2454,2455,2456,2457»

ответ

0

Вы не можете использовать strarray в ActiveWorkbook.Sheets(strarray). Он ожидает одно имя листа или коллекцию листов в массиве.

Это то, что вы пытаетесь?

' 
'~~> Rest of your code 
' 

Dim strarray As String 
Dim MyAr As Variant 

Do Until Cells(r.Row, colCheck) = "" 
    strarray = strarray & IIf(colCheck > 4, ",", "") & Cells(r.Row, colCheck).Value 
    colCheck = colCheck + 1 
Loop 

If InStr(1, strarray, ",") Then 
    MyAr = Split(strarray, ",") '<~~ This is where we are creating an actual array 

    ActiveWorkbook.Sheets(MyAr).Select 
Else 
    ActiveWorkbook.Sheets(strarray).Select 
End If 

' 
'~~> Rest of your code 
' 

Примечание: Кстати, вы должны избегать использования .Select и непосредственно выполнить операцию на тот листе (ов). Вы можете посмотреть How to avoid using Select in Excel VBA macros

+0

Спасибо! Кажется, что работает, выбираются листы, хранящиеся в массиве. Проблема только в том, что при выборе нескольких листов команда экспорта не работает. Когда нужно распечатать только один лист, он работает :) – user4373888

+0

Когда вы экспортируете несколько листов, вы можете использовать 'Selection' после' .Select'. Однако убедитесь, что все эти листы остаются скрытыми, иначе команда '.Select' выдаст ошибку. 'Selection.ExportAsFixedFormat Тип: = xlTypePDF, Filename ......' –

+0

Хмм все еще не работает здесь – user4373888

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