Почему этот макрос неправильно печатает PDF-файлы

#excel #vba

#excel #vba

Вопрос:

Это продолжение предыдущего вопроса о печати в PDF, мой макрос запускается без ошибок, однако он делает не совсем то, что я хочу. Похоже, что он вставляет каждое значение из моего выпадающего списка в правильную ячейку, но печатает только самый последний PDF-файл.

Я хочу, чтобы мой макрос

  1. Вставьте первое выпадающее значение в правильную ячейку
  2. Пусть формулы вычисляются
  3. Распечатайте эту страницу в формате PDF и сохраните ее по правильному пути к файлу
  4. Повторите 1-3 для каждого значения в выпадающем списке

Как мне настроить макрос для этого?

 Sub Print_To_PDF()
Sheets("MS Wall Summary Daily View").Activate
    Dim vRws As Long, vRng As Range
    Dim d As Range, d8 As Range, Wst As Worksheet
    Dim fPathFile As String

fPathFile = [NewStoreRollout]
Set Wst = Worksheets("MS Wall Summary Daily View")
Set d8 = Wst.Range("D8")

With Wst
   vRws = .Cells(.Rows.Count, "A").End(xlUp).Row
    Set vRng = Range(.Cells(2, "A"), .Cells(vRws, "A"))
    .PageSetup.PrintArea = "$C$2:$M$116"

End With
For Each d In vRng.Cells

d8 = d
Wst.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fPathFile, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False


Next d

MsgBox "Finished"
End Sub
  

Путь к файлу:
введите описание изображения здесь

Где значение в P7 связано с D8 на другой вкладке, где подключается выпадающий список, поэтому это должно создавать уникальный путь к файлу при каждом изменении значения в раскрывающемся списке.

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

1. Вы уверены, что экспортируете не все из них, а просто перезаписываете предыдущий файл? Имя вашего файла должно быть динамическим

2. Из какой программы вы запускаете VBA? Excel?

3. У меня есть динамический путь к файлу. Да, Excel

4. Правильно ли я это сделал? Я новичок на сайте

5. Вы приняли мой ответ, который указывает, что из всех ответов вы нашли мой наиболее полезным. Если появится другой ответ, который вы сочтете лучшим, вы всегда можете снять пометку с моего ответа как принятого и отметить другой ответ как принятый.

Ответ №1:

Вы должны использовать динамический путь к файлу, чтобы гарантировать, что каждый файл сохраняется отдельно. Вы пытались выполнить это, используя именованный диапазон в качестве ссылки для вашей переменной filepath:

 Dim fPathFile As String

fPathFile = [NewStoreRollout]
  

При этом сохраняется значение [NewStoreRollout] into fPathFile . Однако это не создает какой-либо связи между вашей переменной fPathFile и вашим именованным диапазоном. Чтобы получить самое последнее значение вашего именованного диапазона, вам необходимо обновлять свою переменную на каждой итерации выполняемого цикла. Вы должны сделать это перед использованием переменной для сохранения файла PDF. Вы можете обновить значение, назначив его снова, как и в первый раз.

 For Each d In vRng.Cells

d8 = d
fPathFile = [NewStoreRollout] 'Update the value of fPathFile to create unique files to save
Wst.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fPathFile, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False


Next d
  

Для завершения этого я вставил строку fPathFile = [NewStoreRollout] сразу после строки d8 = d в ваш исходный код.