Вопрос:
Я унаследовал эту ужасность и попросил сделать обновления.
В настоящее время эта книга построена с одним листом, на котором есть куча флажков, все связанные с другими листами в книге. Пользователь выбирает флажки, а затем нажимает кнопку для печати листов, связанных с каждым отмеченным флажком.
Теперь, когда он создан, он запускает задание на печать для каждого выбранного листа. Меня попросили запустить одно задание на печать для всех выбранных листов (чтобы не было сотен покрывающих листов).
Я написал небольшую функцию VBA, которая создает строку, содержащую имя каждого листа, для которого установлен флажок, в кавычках, разделенных запятыми.
Мне нужно выяснить способ использования этой информации, чтобы выбрать все листы, а затем распечатать, как только будет выбран каждый лист, который мне нужен.
Или даже, черт возьми, я бы мог переплеть эту строку обратно в макрос, который был первоначально написан для возможности печати. Сейчас макрос – это еще один лист в книге и имеет 102 команды печати, управляемых кучей операторов if. Поэтому я хотел бы наплевать строку на этот лист, чтобы я мог запустить одну команду печати.
В любом случае, кто-то, пожалуйста, помогите.
Вот мой код:
Public Function sheetString() Dim c As Integer Dim r As Integer Dim sConcat As String Dim ws As Worksheet For c = 2 To 6 Step 2 For r = 1 To 46 If Sheet94.Cells(r, c) = True Then sConcat = sConcat & Sheet94.Cells(r, c — 1) & «, » End If Next r Next c sConcat = Left(sConcat, Len(sConcat) — 2) Debug.Print sConcat End Function
Результат кода выглядит так (с разными именами в зависимости от того, какие поля отмечены):
“PR015”, “PR018”, “PR019”, “PR026”, “PR029A”,
EDIT: Благодаря симоко, я ближе, чем я был до сих пор. Вот код, который стоит сейчас.
Public Function sheetString() Dim c As Integer Dim r As Integer Dim sConcat As String Dim ws As Worksheet Set ws = Sheet94 For c = 2 To 6 Step 2 For r = 1 To 46 If ws.Cells(r, c) = True Then sConcat = sConcat & ws.Cells(r, c — 1) & «,» End If Next r Next c sConcat = Left(sConcat, Len(sConcat) — 1) Debug.Print sConcat sheetString = sConcat End Function Sub test() ‘if cells with sheet names contains quotes ‘Sheets(Split(Replace(sheetString, «»»», «»), «,»)).Select ‘if cells with sheet names doesn’t contain quotes Sheets(Split(sheetString, «,»)).Select ActiveSheet.PrintOut Copies:=1 End Sub
Он работает без взрыва, но теперь он выбирает только первый лист, на котором он установлен.
Лучший ответ:
Вот немного измененная функция sheetString:
Public Function sheetString() Dim c As Integer, r As Integer Dim sConcat As String Dim ws As Worksheet Set ws = Sheet94 For c = 2 To 6 Step 2 For r = 1 To 46 If ws.Cells(r, c) Then sConcat = sConcat & ws.Cells(r, c — 1) & «,» End If Next r Next c sConcat = Left(sConcat, Len(sConcat) — 1) Debug.Print sConcat sheetString = sConcat End Function
а затем вызовите его так:
Sub test() ‘if cells with sheet names contains quotes ‘Sheets(Split(Replace(sheetString, «»»», «»), «,»)).PrintOut Copies:=1 ‘if cells with sheet names doesn’t contain quotes Sheets(Split(sheetString, «,»)).PrintOut Copies:=1 End Sub Ответ №1Sub Macro1() Application.Dialogs(xlDialogPrint).Show End Sub Sub Macro() Worksheets.PrintOut End Sub
Используйте этот код для печати всех листов в xl. Также выбрать конкретный pri