Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Auswahlbereich aus Zelle übernehmen
#11
Hallöchen,

Zitat:Ersetze ich Range("A1") durch das gleichbedeutende Cells(1),

jupp. Cells-Angaben mit Zahlen für die Spalten sind schneller, da Excel intern mit den "Zahlen" für die Spalten rechnet und die Buchstaben bzw. Adressangaben vom Range erst umwandeln muss. Cells(1, "A") ist entsprechend auch langsamer als Cells(1, 1)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#12
Das deckt sich vom Grundsatz her mit meiner damaligen Messung: Cells < Range < Evaluate (und ist auch logisch erklärbar)

Eine Steigerung der Rechendauer von 100% ist nicht homöopathisch. 

Weitere Punkte der Evaluate-Schreibweise: 
- Schreibe eine Schleife, um die Werte der Zellen A1:A100 (einzeln!) abzugreifen.
- erweitere das Beispiel um eine Schleife, um auch alle Tabellenblätter zu durchlaufen
- erweitere das Beispiel mit Zugriff auf eine andere Mappe
- Erkläre anhand dieses Beispiels das Excel-Objektmodell
- Transformiere das letzte Beispiel in Workbook.Worksheets.Cells-Schreibweise
- erkläre nun das Objektmodell

Evaluate ist ein langsamer, unflexibler Fremdkörper in einem objektorientierten Code, insbesondere in der Schreibweise mit eckigen Klammern und hartcodiertem Inhalt. Dass ein einziger Zellzugriff keinen messbaren Zeitgewinn bringt ist erwartbar, ändert am Grundsatz aber nichts.

(30.04.2023, 06:39)WRPP63 schrieb: multi-bäääh
Ich habe in meinem Leben schon so viel schlechten und/oder schlecht wartbaren Code („Aber es funzt doch!einself!!!) gesehen (einen nicht unerheblichen Teil davon selbst verfasst), dass ich einfach die Nase voll habe von ungeeigneten Methoden. Gerne höre ich mir die Vorteile an, die eine solche Methode mit sich bringt, insbesondere bezogen auf die genannten Aspekte neben der Rechenzeitoptimierung. Die Nachteile kenne ich zur Genüge und habe die Methode daher (für den hier diskutierten Zweck: Abgreifen von Eigenschaften eines Objektes) für mich abgewählt.
Antworten Top
#13
Ich dachte immer, es ginge nur

Set Bereich = Range([A1]) statt
Set Bereich = Range(["A1"])

Dann kann man die Kiste ja sogar variabilisieren.
Antworten Top
#14
...    
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  •
Antworten Top
#15
Oha!
Stimmt ja!
Da habe ich einen groben Schnitzer in meinem obigen Code!
Richtig ist natürlich
Code:
  For i = 1 To k
    Set Bereich = Range([A1])
    Set Bereich = Nothing
  Next

Und dann wird es heftig:
Code:
1-maliges Value: 0
1-maliges Text: 0
1-maliges Evaluate[]: 0
100.000-maliges Value: 0,859375
100.000-maliges Text: 2,31640625
100.000-maliges Evaluate[]: 5,21484375
[] ist schlappe 6mal langsamer!
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)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  •
Antworten Top
#16
(30.04.2023, 09:26)RPP63 schrieb: Oha!
Ich wollte schon den Rechner hochfahren, weil ich es nicht glauben konnte… ;)

Danke für die Richtigstellung. Jetzt passen deine Messergebnisse nicht nur vom Grundsatz zu meinen Erinnerungen, sondern auch von der Größenordnung.
Antworten Top
#17
Guten Morgen zusammen

besten Dank für eure Hilfe.

Es beruhigt mich, dass die Lösung doch nicht so eindeutig war.

Hier der Code wie er bei mir funktioniert:

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

und im AA8 steht z.B.: A11:B54

Also nochmals besten Dank

Gruss cacaha
Antworten Top
#18
(02.05.2023, 06:59)cacaha schrieb: Es beruhigt mich, dass die Lösung doch nicht so eindeutig war.
Eindeutig genug, um deine Lösung als die schlimmste Mischung aus allen suboptimalen Fragmenten zu küren...

Von noch weiter hinten durch die Brust ging's nicht? Lass die eckigen Klammern weg!
Antworten Top


Gehe zu:


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