Sheet selecteren op basis van celwaarde en opslaan als pdf

  • Onderwerp starter Onderwerp starter DieBe
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

DieBe

Gebruiker
Lid geworden
9 mei 2011
Berichten
69
Ik heb een formulier met meerdere tabbladen. Op het voorblad heb ik een knop om een tabblad op te slaan als pdf. Hiervoor gebruik ik de volgende code:

Sub pdf()
Sheets("1.0").ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "" & Sheets("1.0").Range("b2")

End Sub

Zoals je ziet wordt sheet 1.0 opgeslagen als pdf. Af en toe kan de naam van de sheet veranderen in 1.1 of 1.2 De naam van het tabblad komt uit cel A4 van dat tabblad. Nu verwijst de code naar sheet 1.0 maar deze wil ik verwijzen naar cel A4. Hoe doe ik dat?
 

Bijlagen

Excel sheets opslaan als pdf

Goedenavond,

Ik heb een voorbeeld bestand gemaakt voorin ik uw oplossing heb toegepast. Het zijn 40 tabbladen. Bij de meeste tabbladen werkt het maar af en toe zit er een tussen die niet werkt. Kunt u zien wat er fout zit in de verschillende regels die ik toegepast heb?

Groet,

DieBe
 

Bijlagen

Vertel er ook bij welke bladen dan problemen geven en welke foutmelding je krijgt.
 
Die doen het hier zonder probleem.
Daarnaast had ik ook gevraagd of je een foutmelding krijgt.
 
Ik heb het document opnieuw geopend op mijn pc. Als ik op het "play" teken voor nr 15 klik opent tabblad 14. Klik ik op het printertje achter nr 15 dan wordt tabblad 14 opgeslagen als pdf. Ik krijg geen foutmelding. Excel ziet het ook niet als fout. Het pakt alleen het verkeerde tabblad.
 
Dat komt omdat je met:
Sheets(Range("B26").Value).Activate
verwijst naar het blad indexnummer en niet naar de bladnaam.

Wijzig dat in dit:
Sheets(CStr(Range("B26").Value)).Activate

Al die code is ook niet nodig als je er een Klassenmodule voor maakt.
 
Laatst bewerkt:
Bedankt voor de reactie. Zal het morgen testen. U heeft het over een klassenmodule. Wat is dat en hoe werkt dat? Ja, ik ben een beginneling :)
 
Zonder het uitgewerkt te hebben.

Met Application.caller kan je veel doen met objecten in Excel. Zorg ervoor dat elk object in een een eigen cel staat. Dit is nu niet het geval.

Code:
Sub tst()
  For Each sh In ActiveSheet.Shapes
    Debug.Print sh.Name & "," & sh.TopLeftCell.Address
  Next sh
End Sub

Toewijzen van de macro
Code:
Sub VenA1()
  For Each sh In ActiveSheet.Shapes
    sh.OnAction = "VenA"
  Next sh
End Sub
Klik op het plaatje.
Code:
Sub VenA()
  MsgBox Range(ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address).Offset(, 1).Value
End Sub
 
Goedemorgen Edmoor,

Ik heb de code aangepast in:

Sheets(CStr(Range("B26").Value)).Activate

Het openen van het juiste tabblad gaat nu goed. Het printen van het juiste tabblad nog niet.
 
Naar het printen heb ik niet gekeken maar zal hetzelfde voor gelden.
 
VenA:

Kunt u uitleggen wat er gebeurt met uw codes. Zoals gezegd ben ik een beginneling(leek) en weet ik niet wat er gebeurt met de codes die u opgeeft. Als ik weet wat de codes betekenen/doen snap ik wat de codes doen en kan ik ze beter inpassen. Al doende leert men toch?
 
Hoi Edmoor,

Ja het klopt. Ik het eerst alleen het eerste gedeelte van de code aangepast. Het "printen" van tabblad 15 ging dus wel goed maar het gaf de naam van tabblad 14. Nu ik de hele code heb aangepast gaat het perfect. Bedankt.

Nu nog met het onderwerp Klassenmodule aan de slag. Mooi klusje voor de kerstvakantie.
 
Ik zie dat je shapes gebruikt.
Dan kan je de opmerking over een klassenmodule vergeten omdat een shape geen events heeft die daarmee gebruikt kunnen worden.
 
Met de eerste code krijg je een opsomming in het Immediate venster van de VB-editor met alle plaatjes en aan welke cel ze gekoppeld zijn. Hier kan je snel zien dat sommige plaatjes aan dezelfde cel gekoppeld zijn.

bv.
Code:
Afbeelding 69,$A$12
Afbeelding 70,$A$14
Afbeelding 71,$A$15
Afbeelding 73,$A$13
Afbeelding 74,$A$16
Afbeelding 75,$A$17
Afbeelding 76,$A$18
Afbeelding 77,[COLOR="#FF0000"]$A$19[/COLOR]
Afbeelding 78,[COLOR="#FF0000"]$A$19[/COLOR]
Afbeelding 79,$A$21
Afbeelding 80,$A$22
Afbeelding 81,[COLOR="#FF0000"]$A$23[/COLOR]
Afbeelding 82,[COLOR="#FF0000"]$A$23[/COLOR]

Met de tweede code koppel je aan elk plaatje de Sub VenA (is een eenmalige actie)

In de Sub VenA kan je opgeven wat er moet gebeuren. In dit geval laat die de waarde zien van de cel die naast het plaatje staat. Op deze manier heb je maar een paar regels code nodig om naar een blad te springen of een blad af te drukken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan