#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
. В любом случае, мы здесь, когда кто-то отвечает на наш вопрос, установите флажок слева от кода, чтобы сделать его принятым ответом . Таким образом, кто-то другой, ищущий что-то подобное, будет знать, что код работает…