Excel VBA Imprime la gamme nommée multiple dans la page séparée de PDF

J'ai une list de gammes nommées et chaque gamme que je la définis pour une seule page. J'utilise le code suivant pour exporter vers PDF, où il est fusionné en une seule page.

Dim wbBook As Workbook Dim i As Integer Dim rs As Range Set wbBook = ActiveWorkbook Set rs = wbBook.Names(1).RefersToRange For i = 2 To wbBook.Names.Count Set rs = Union(rs, wbBook.Names(i).RefersToRange) Next rs.ExportAsFixedFormat xlTypePDF, strPath, , , False 

Mais le code ci-dessous fonctionne pour moi, lorsque j'entre dans le nom de gamme manuellement. Alors que ma gamme nommée est dynamic. Je pense que le code ci-dessus nécessite des modifications pour fonctionner. Est-ce que quelqu'un m'assurera pour que cela se fasse?

 Set rs = wbBook.Range("Page_1,Page_2,Page_3") rs.Select Selection.ExportAsFixedFormat xlTypePDF, strPath, , , False 

La solution proposée donne encore une page. J'ai fourni sous la configuration de la page. Est-ce que quelque chose ne va pas avec la configuration de la page?

 With Sheet1.PageSetup .PrintArea = Range(Cells(iBeginRow, 1), Cells(iRow + 2, 5)).Address .CenterHorizontally = True .CenterVertically = True .Orientation = xlLandscape .LeftMargin = Application.InchesToPoints(0) .RightMargin = Application.InchesToPoints(0) .TopMargin = Application.InchesToPoints(0) .BottomMargin = Application.InchesToPoints(0) .HeaderMargin = Application.InchesToPoints(0) .FooterMargin = Application.InchesToPoints(0) .PrintQuality = 600 .FitToPagesWide = 1 .FitToPagesTall = 1 End With 

Ensuite, je nomme dynamicment la gamme

 Sheet1.Range(Cells(iBeginRow, 1), Cells(iRow + 2, 5)).Select Selection.Name = "Page_" & PageNum 

Au-dessous de l'UDF a travaillé pour moi (je l'ai dans un module):

 Sub ExportRangeToPDF(ByVal WSName As Ssortingng) Dim oRng As Range Dim strPath As Ssortingng: strPath = "C:\temp\Temp\" Dim intCount As Integer For intCount = 1 To ActiveWorkbook.Names.Count If InStr(1, LCase(ActiveWorkbook.Names(intCount).RefersToRange.Name.Name), LCase(WSName)) > 0 Then If oRng Is Nothing Then Set oRng = Range(ActiveWorkbook.Names(intCount).RefersToRange.Name.Name) Else Set oRng = Union(oRng, Range(ActiveWorkbook.Names(intCount).RefersToRange.Name.Name)) End If End If Next oRng.ExportAsFixedFormat xlTypePDF, strPath & "test.pdf", , , False Set oRng = Nothing End Sub 

REMARQUE : J'avais des plages de "solveur" et de "database de filtrage" dans le cahier sur lequel je travaillais, donc j'ai dû append une validation pour celles avant qu'elles ne fonctionnent. Si vous avez une telle gamme dans votre classur, vous devrez peut-être faire la même chose