Предполагается, что это относительно простая функция - книга Excel с выбором листов для заполнения. Если пользователь решит пропустить некоторые из листов, они не будут включены в конечную функцию.
Он также скрывает пару столбцов в указанных c листах, которые содержат информацию, не требуемую в экспортированном формате.
Sub Export()
Dim i As Integer, c As Integer, f As Integer, g As Integer, h As Integer, numberofsheets As Integer
' i is for counting total number of build sheets
' c is used in the while loop to track the current sheet the code is running on
' f is used to denote the row on the excel sheet currently look at
' g tracks the current sheet out of number of sheets marked for build
' h tracks consecutive sheets so the code doesnt run on the same one multiple times
' numberofsheets is the number of sheets required for final build
'printsheets is an array to denote which final sheets are to be exported
Dim sheetname As String 'name of current sheet
numberofsheets = Range("AC2")
ReDim printsheets(numberofsheets) As Variant
h = 1
i = Range("AC3").Value
For g = 1 To numberofsheets ' for loop run to create an array equal to number of sheets denoted for build
c = h
While (c < i) ' while loop to track which sheet is currently looked at
f = (4 + c)
sheetname = Range("AC" & f)
If Range("AB" & f) = "Yes" Then ' determines whether sheet is used for build
printsheets(g - 1) = sheetname ' adds sheet to array if used for build
If Not sheetname = ("Quality Final") Then 'hides the button columns for basic build sheets, not quality final
Worksheets(sheetname).Columns("L").EntireColumn.Hidden = True
h = h + 1
c = i
Else: End If
Else:
h = h + 1
c = c + 1
End If
Wend
Next g
ThisWorkbook.Sheets(printsheets()).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:= _
"C:\Build Sheets\MW\CT\PDF\" & ThisWorkbook.Name & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True
Sheets("Main Menu").Select
End Sub
верхняя часть функционирует отлично, она скрывает столбцы, и благодаря тестированию я вижу, как массив заполняется правильно. Проблема возникает в строке выбора.
Если я укажу указанный элемент c массива, например, printsheets (3), то функция экспортируется нормально, но если я попытаюсь выбрать несколько или весь массив с printsheets () Я получаю ошибку времени выполнения 9, нижний индекс выходит за пределы диапазона.
Я не могу понять, в чем проблема, потому что я могу выбрать часть массива, но никогда не весь лот, который побеждает точку экспорт всего на 1 лист.
Довольно плохо знаком с VBA, так что извините, если я пропустил что-то очевидное!