Цикл Excel через список проверки и экспорт в виде рабочей книги

#excel #vba

Вопрос:

У меня есть

-название рабочего листа «лист2:

-Список проверки данных в G1

посмотрите, есть ли способ создать макрос, который циклически просматривает список проверки данных и экспортирует книгу с именем текста в этой ячейке и циклически, чтобы каждый элемент списка экспортировался как собственная книга . иначе говоря, если в раскрывающемся списке 100 строк, то я бы закончил 100 файлами Excel, каждый из которых по отдельности назван для 100 раскрывающихся вариантов.

Например , это сработало для меня, чтобы распечатать PDF-файлы :

 Public Sub Create_PDFs()

Dim destinationFolder As String
Dim dataValidationCell As Range, dataValidationListSource As Range, dvValueCell As Range

destinationFolder = "C:UsersDELL 04DesktopQ-Book ActivitiesExperiment"     'Same folder as workbook containing this macro
'destinationFolder = "C:pathtofolder"  'Or specific folder

If Right(destinationFolder, 1) <> "" Then destinationFolder = destinationFolder amp; ""
     
'Cell containing data validation in-cell dropdown

Set dataValidationCell = Worksheets("sheet2").Range("G1")
 
'Source of data validation list

Set dataValidationListSource = Evaluate(dataValidationCell.Validation.Formula1)
 
'Create PDF for each data validation value

For Each dvValueCell In dataValidationListSource
    dataValidationCell.Value = dvValueCell.Value
    With dataValidationCell.Worksheet.Range("A1:I45")
        .ExportAsFixedFormat Type:=xlTypePDF, Filename:=destinationFolder amp; dvValueCell.Value amp; ".PDF", _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    End With
Next
    End Sub
 

Комментарии:

1. Попробуйте .ExportAsFixedFormat заменить ActiveWorkbook.saveas и использовать необходимые конкретные параметры. Конечно, измените расширение FileName и используйте соответствующее FileFormat .

Ответ №1:

Что, если вы просто используете один и тот же рабочий код и вместо этого создаете книги?

 For Each dvValueCell In dataValidationListSource
    Workbooks.Add.SaveAs Filename:=destinationFolder amp; dvValueCell
    Workbooks(dvValueCell amp; ".xlsx").Close
Next
 

Комментарии:

1. Это просто сохраняет все рабочие книги как пустые , без данных

2. Да? Я не вижу, чтобы ты сказала, что хочешь чего-то другого? За исключением того, что вы говорите «экспорт», но никогда не говорите, что должно быть в файле. Если только я чего-то не упускаю. Я думаю, вы хотели сделать то же самое, что вы сделали с PDF-файлами, что, оглядываясь назад, имеет смысл.

Ответ №2:

Попробуйте заменить:

 .ExportAsFixedFormat Type:=xlTypePDF, Filename:=destinationFolder amp; dvValueCell.Value amp; ".PDF", _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
 

с

 Worksheets("sheet2").Copy 'it creates a new workbook with Sheet2 content
ActiveWorkbook.saveAs Filename:=destinationFolder amp; dvValueCell.Value amp; ".xlsx", FileFormat:=xlWorkbookDefault 
ActiveWorkbook.Close False
 

Комментарии:

1. Это сделало свою работу , но это также экономит лист 1 . Есть ли какой-нибудь способ избавиться от первого листа? Без изменения данных, введенных в лист2, из-за отсутствия ссылок .. И сохраните только лист2

2. @maqlly Я адаптирую код, чтобы сохранить только Лист2 столько раз, сколько строк существует в раскрывающемся списке. Адаптированный. Пожалуйста, протестируйте его и отправьте несколько отзывов.

3. Твоя настоящая легенда , не буду врать, Сработала идеально .. Просто изменил его , чтобы копировать только значения, а не формулы, спасибо

4. @maqlly Вы ничего не сказали о преобразовании формул… Я не знаю, как вы это сделали, но лучшим способом должно быть создание диапазона rng ) ячеек с формулами (сразу, с использованием специальных ячеек) и простым использованием rng.value = rng.value . В любом случае, мы здесь, когда кто-то отвечает на наш вопрос, установите флажок слева от кода, чтобы сделать его принятым ответом . Таким образом, кто-то другой, ищущий что-то подобное, будет знать, что код работает…