vba excel exportation ne pas pagesetup pdf correctement
J'ai un code qui met en forme une feuille de calcul pour la configuration souhaitée et la mise en page (une page de large et de haut en mode paysage). Lorsque j'exécute le code (partie d'une longue macro) il met en forme l'objet pagesetup correctement.
Si j'manuellement à l'exportation et l'enregistrer comme un fichier pdf, puis il utilise la bonne mise en page, la réalisation d'une page PDF qui est dans paysage. Cependant, le même à l'exportation effectuée par VBA génère un fichier PDF qui est severalpages long et en portrait.
je ne peux pas comprendre pourquoi il fait cela. j'ai essayé diverses solutions telles que la sélection de la feuille de calcul avant de l'exporter, mais en vain.
Toute aide est appréciée.
Code ressemble à ceci:
Sub SaveAsPDF()
Sheets(ReportWsName).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
[SaveFolderPath] & "\" & ReportWsName, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End Sub
Mise à JOUR:
Code utilisé pour le format de l'objet pagesetup (car il est assez long, je ne suis que l'ajout de la section pertinente de la sous -)
Private Sub CreateNewReport(ProvisionCode As String, TimeFrom As Date, TimeTo As Date)
... other code here...
'Format report to create the desired layout
With Worksheets(ReportWsName)
'Delete unnecessary data and format the rest
.Range("A:B,D:D,F:G,J:M,O:O,Q:S").Delete Shift:=xlToLeft
.Range("A:F").EntireColumn.AutoFit
.Range("C:C, E:F").ColumnWidth = 30
With .Range("G:G")
.ColumnWidth = 100
.WrapText = True
End With
'Insert standard formating header form Reporting template
.Rows("1:2").Insert
wsReportTemplate.Range("1:3").Copy .Range("A1")
.Range("A2") = "Notes Report for " & ProvisionCode & " (" & TimeFrom & " - " & TimeTo & ")"
'Insert standard formating footer form Reporting template
wsReportTemplate.Range("A6:G7").Copy .Range("A" & .UsedRange.Rows.Count + 2)
'Ensure all data is hard coded
.UsedRange.Value = .UsedRange.Value
'Format Print Area to one Page
With ActiveSheet.PageSetup
.PrintArea = Worksheets(ReportWsName).UsedRange
.Orientation = xlLandscape
.FitToPagesWide = 1
End With
End With
End Sub
J'ai ajouté le code que vous avez demandé. Merci pour regarder!
Merci de poster le reste du code. J'ai ajouté une réponse.
OriginalL'auteur rohrl77 | 2014-07-21
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé ce qui semble être la solution:
J'ai besoin d'ajouter l'Application.PrintCommunication partie de l'équation. Quelle que soit la raison Excel serait de remplacer les paramètres que j'ai a mettre si j'ai couru le code sans elle.
OriginalL'auteur rohrl77
Je pense que le problème est que vous devez ajouter le
.Zoom = False
à votre page de code de configuration:De ce que j'ai essayé cela devrait résoudre pour vous.
Laissez-moi savoir comment ça se passe!
EDIT: Peut-être vous avez besoin de:
EDIT2: Que si vous avez modifié:
.PrintArea = Worksheets(ReportWsName).UsedRange
À
.PrintArea = Worksheets(ReportWsName).UsedRange.Address
Note intéressante... par la mise en place .zoom = False comme le premier élément avant .PrintArea etc. il restaure le formatage pour 1 page.
Le comportement bizarre continue... si j'ai pas le code en faisant de la page mise en forme à l'aide de la touche F8, puis exécutez le reste à l'aide de la touche F5, le résultat s'avère que désiré. ?!? Mais la simple exécution de la macro dans un aller ramène l'un comportement indésirable.
Ok, juste une question: Combien de pages fait la sortie doit être. 1 les pages de large par 1 les pages de haut? J'ai éditer ma réponse. Essayez-le maintenant.
Ce qui est étrange 🙁 fonctionne très bien pour moi. Ok, essayez d'ajouter un sous
Private Sub Run()
alors, en vertu de cet endroitCall CreateNewReport
etCall SaveAsPDF
. Maintenant, essayez de l'exécuter créé des sous.OriginalL'auteur CaptainABC
Oui!!!, J'ai eu le même problème: je n'ai pas été en mesure d'exporter une feuille avec les paramètres de mise en page déjà appliqué sur elle.
Avant d'essayer l'Application.PrintCommunication j'ai testé d'Attendre et de Sommeil commandes sans succès. Enfin j'ai sauté ce problème en utilisant CopyPicture méthode, l'ajout d'un graphique de la page, puis de l'exporter au format pdf, mais la résolution de mon fichier pdf qu'il n'était pas bien et je n'étais pas capable de jouer avec les marges.
Donc juste ajouter l'Application.PrintCommunication=false avant votre code , sur pagesetup paramètres comme CaptainABC dit, et le plus important: la proximité avec l'Application.PrintCommunication=true après le code.
Merci pour ce post utile.
OriginalL'auteur Chema Vascuence