Auswahlbereich aus Zelle übernehmen
#1
Hallo zusammen
leider komme ich bei einem vermutlich einfachen Problem nicht weiter. 

Ich möchte gerne auf einem Tabellenblatt denjenigen Bereich als pdf ausgeben, den der Nutzer wählt.

In einer Zelle steht der Bereich der ausgegeben werden soll. Damit ich bei 20 möglichen Bereichen nicht 20 Mal das selbe Makro mit anderem Bereich auflisten muss. strebe ich eine dynamische Lösung an.

Als Vorgabe steht in der Zelle 'AA8' der Bereich 'Range ("A11:B54")'.

So - wenn ich im Code 

                                Range ("A11:B54").ExportAsFixedFormat Type:=xlTypePDF, Filename:=DateiName, Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                                IgnorePrintAreas:=False, OpenAfterPublish:=True

einsetzte, funktioniert alles bestens. ich möchte aber gerne mit einem Verweis auf die Zelle mit dem entsprechenden Bereich arbeiten z.B.

                                Tabelle9.Range("AA8").ExportAsFixedFormat Type:=xlTypePDF, Filename:=DateiName, Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                                IgnorePrintAreas:=False, OpenAfterPublish:=True

dann wird mir nur der Inhalt der Zelle AA8 ausgewählt und als pdf ausgegeben.

was mache ich da falsch?
Antworten Top
#2
ungetestet:

Tabelle9.Range([AA8]).ExportAsFixedFormat Type:=xlTypePDF, Filename:=DateiName, Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True

mit AA8: "A11:B54"
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Antworten Top
#3
Tabelle9.Range(Range("AA8").Value)
wobei in AA8 nur die Adresse A11:B54 steht.
Antworten Top
#4
Bin nicht so die VBA-Leuchte ;)
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Antworten Top
#5
(28.04.2023, 18:00)LCohen schrieb: Bin nicht so die VBA-Leuchte ;)
...und ich halt nicht die Formel-Leuchte. Deswegen ergänzen wir uns und lernen voneinander. Das ist doch der Sinn von Foren.
Antworten Top
#6
Hallöchen,

wobei
Zitat:Tabelle9.Range([AA8])
auch ok ist, testbar z.B. durch MsgBox Tabelle9.Range([AA8]).Address
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#7
(29.04.2023, 11:27)schauan schrieb: wobei … auch ok ist
Die Evaluate-Methode ist eine unnötig rechenintensive Art, um einen Zellwert auszulesen. Das macht man am effektivsten über die Value-Eigenschaft. Die Evaluate-Methode hat sicher auch ihre Daseinsberechtigung, aber eben nicht hier.
Antworten Top
#8
Lass das nicht snb lesen, EarlFred! Wink
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#9
(29.04.2023, 13:11)RPP63 schrieb: Lass das nicht snb lesen, EarlFred! Wink

Ich würde es ihm sogar laut vorlesen, wenn ich auf eine informative Diskussion hoffen kann.
Antworten Top
#10
Dann versuche ich einmal, diese Diskussion anzustoßen, EarlFred!
Auch ich habe mehrfach gelesen, dass die Evaluierung mittels [] multi-bäääh ist.

Ich habe das immer so hingenommen.
Ich habe mal einen kurzen Code zur Validierung des "Mythos" geschrieben.
(es geht ausschließlich um das Füllen einer Range-Objektvariable)

Sub Volicity()
Dim Start#, Bereich As Range, i&, k&
Range("A1") = "Z1:RPP63"
For k = 1 To 100000 Step 99999
  ' Value 
  Start = Timer
  For i = 1 To k
    Set Bereich = Range(Range("a1").Value)
    Set Bereich = Nothing
  Next
  Debug.Print Format(k, "#,##0") & "-maliges Value: " & Timer - Start
  ' Text 
  Start = Timer
  For i = 1 To k
    Set Bereich = Range(Range("a1").Text)
    Set Bereich = Nothing
  Next
  Debug.Print Format(k, "#,##0") & "-maliges Text: " & Timer - Start
  ' Evaluate 
  Start = Timer
  For i = 1 To k
    Set Bereich = Range(["A1"])
    Set Bereich = Nothing
  Next
  Debug.Print Format(k, "#,##0") & "-maliges Evaluate[]: " & Timer - Start
Next
End Sub

Ergibt auf meiner alten Möhre:
Code:
1-maliges Value: 0
1-maliges Text: 0
1-maliges Evaluate[]: 0
100.000-maliges Value: 1,150390625
100.000-maliges Text: 2,419921875
100.000-maliges Evaluate[]: 1,662109375

Und ja!
[] ist ca. 50 % langsamer.
Da in diesem Thread der Range nur einmal ausgewertet wird, reden wir über eine Differenz von einer halben hunderttausendstel Sekunde.
Imo homöopathisch im Vergleich zur .ExportAsFixedFormat-Methode.

Gruß Ralf

Durchaus interessant:
Ersetze ich Range("A1") durch das gleichbedeutende Cells(1),
so erreiche ich ich eine Beschleunigung der Value-Eigenschaft um 25 %!
Somit ist Value jetzt doppelt so schnell wie [] (die ja Cells() nicht kennt).
Code:
100.000-maliges Value: 0,859375
100.000-maliges Text: 2,267578125
100.000-maliges Evaluate[]: 1,640625
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste