Anzeige
Archiv - Navigation
1208to1212
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro beschleunigen

Makro beschleunigen
sawadee00
Hallo liebes Forum,
vielleicht könnt ihr mir helfen, mein Makro zu beschleunigen:
Auf einem Sheet merke ich mir mittels
xxx = Names("xxx").RefersToRange
yyy = Names("yyy").RefersToRange
zzz = Names("zzz").RefersToRange
einige Einträge. Diese sollen auf einem anderen Sheet mittels:
ActiveCell.Offset(0, 0) = xxx
ActiveCell.Offset(0, 1) = yyy
ActiveCell.Offset(0, 2) = zzz
eingetragen werden.
Da es noch ein paar Daten mehr sind (ca. 15) wird das Makro beim Eintragen sehr langsam.
Habt ihr einen Tipp? Ich weiß nicht mehr, worunter ich im Archiv noch suchen soll.
Liebe Grüße
sawadee00

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro beschleunigen
06.04.2011 20:34:10
Rudi
Hallo,
vielleicht besser mit
ActiveCell.Offset(0, 0) = sheets("anderesSheet").Range("xxx")
Und natl. Application.screenupdating=false an den Anfang des Makros.
Gruß
Rudi
AW: Makro beschleunigen
06.04.2011 20:43:36
sawadee00
Hallo Rudi,
vielen Dank für deinen Tipp. Hab es gleich ausprobiert. Bringt aber keine Verbesserung. Es liegt auch nicht an den "Names", sondern daran, dass ich mit der Offset-Funktion von Feld zu Feld laufe. Vielleicht gibts da ja was Professionelleres.
Application.screenupdating=false hatte ich schon gesetzt, daran liegt es leider auch nicht.
Trotzdem vielen Dank
AW: Makro beschleunigen
07.04.2011 09:56:09
Timo
Hallo Sawadee,
poste doch mal den betreffenden Teil des Codes, vielleicht fällt einem dann was ein.
Gruß
Timo
Anzeige
AW: Makro beschleunigen
07.04.2011 10:59:28
sawadee00
Hallo Timo,
abgesehen von vielem, was vorher, nachher und zwischendurch passiert, geht es um folgendes:
Sheets("Rechnung").Select
Rechdat = Names("Rechdat").RefersToRange
...
KdNr = Names("KdNr").RefersToRange
Name = Names("Name").RefersToRange
Netto = Names("Netto").RefersToRange
Brutto = Names("Brutto").RefersToRange
...
zahlbar = Names("zahlbar").RefersToRange
RechNr = Names("RechNr").RefersToRange
...
Kontrolle = Names("Kontrolle").RefersToRange
...
Sheets("noch offen").Select
Range("A3").End(xlDown).Offset(1, 0).Select
ActiveCell.Offset(0, 0) = Rechdat
ActiveCell.Offset(0, 1) = Netto
ActiveCell.Offset(0, 2) = Brutto
ActiveCell.Offset(0, 3) = zahlbar
ActiveCell.Offset(0, 4) = RechNr
ActiveCell.Offset(0, 5) = KdNr
ActiveCell.Offset(0, 6) = Name
....
Ich hoffe, du kannst damit mehr anfangen.
Liebe Grüße
Anzeige
AW: Makro beschleunigen
07.04.2011 11:17:15
Rudi
Hallo,
deine Variable 'Name' solltest du umbenennen in z.B. sName. Verwende niemals Schlüsselwörter als Variablen.
Arbeite ohne Select/ Activate!
Sheets("noch offen").Range("A3").End(xlDown).Offset(1, 0).Resize(0, 7) = _
Array(RechDat, Netto, Brutto, Zahlbar, RechNr, KdNr, sName)
Gruß
Rudi
Rudi, wie immer...
07.04.2011 11:32:24
Timo
...gibts das Problem von Dir in noch kürzerer und eleganterer Form gelöst. :-)
Ist manchmal schon fast deprimierend, wenn man merkt, auf welche Ideen man selbst nicht gekommen ist.
Sheets("noch offen").Range("A3").End(xlDown).Offset(1, 0).Resize(0, 7) = _
Array(RechDat, Netto, Brutto, Zahlbar, RechNr, KdNr, sName)
Das werde ich mir merken... ;-)
Klasse Tipp!
Gruß
Timo
Anzeige
Rudi, wie immer...
07.04.2011 11:32:30
Timo
...gibts das Problem von Dir in noch kürzerer und eleganterer Form gelöst. :-)
Ist manchmal schon fast deprimierend, wenn man merkt, auf welche Ideen man selbst nicht gekommen ist.
Sheets("noch offen").Range("A3").End(xlDown).Offset(1, 0).Resize(0, 7) = _
Array(RechDat, Netto, Brutto, Zahlbar, RechNr, KdNr, sName)
Das werde ich mir merken... ;-)
Klasse Tipp!
Gruß
Timo
OT: Bloß nächstes Mal fällt Rudi wieder was ...
07.04.2011 15:22:09
Luc:-?
…Neues ein, Timo… ;-))
Gruß Luc :-?
AW: Makro beschleunigen
07.04.2011 11:53:47
sawadee00
Hallo Rudi, vielen Dank für deinen Name-Tip,
das habe ich jetzt geändert.
Aber leider bin ich noch nicht in der Lage, den Code einzubauen.
Ich bekomme an der Stelle den Laufzeitfehler 1004,
Anwendungs- oder objektdefinierter Fehler.
Hast du aus der Ferne eine Idee, woran das jetzt liegen kann?
Anzeige
AW: Makro beschleunigen
07.04.2011 12:11:58
Rudi
Hallo,
mein Code ersetzt diesen:
Sheets("noch offen").Select
Range("A3").End(xlDown).Offset(1, 0).Select
ActiveCell.Offset(0, 0) = Rechdat
ActiveCell.Offset(0, 1) = Netto
ActiveCell.Offset(0, 2) = Brutto
ActiveCell.Offset(0, 3) = zahlbar
ActiveCell.Offset(0, 4) = RechNr
ActiveCell.Offset(0, 5) = KdNr
ActiveCell.Offset(0, 6) = Name

Fehler: ab A3 alles leer?
Versuch's so:
Sheets("noch offen").Range("A65536").End(xlUp).Offset(1, 0).Resize(0, 7) = _
Array(RechDat, Netto, Brutto, Zahlbar, RechNr, KdNr, sName)
Gruß
Rudi
AW: Makro beschleunigen
07.04.2011 12:41:03
sawadee00
Hallo Rudi,
ich danke dir für dein Engagement, aber es bleibt leider bei dem Fehler.
Ich habe genau den Teil meines Codes mit deinem ersetzt.
Liebe Grüße
Anzeige
Beispielmappe? owT
07.04.2011 12:54:37
Rudi
AW: Beispielmappe? owT
07.04.2011 13:09:10
sawadee00
Puha, das wäre jetzt ein zu großer Aufwand, da sie sehr komplex ist.
Ich habe aber einen Teil deines Codes verwenden können, komme aber zur Zeit um die
blöde select-Anweisung nicht herum. Schneller ist es dennoch geworden.
Ich danke dir vielmals (und natürlich auch Timo) für die Hilfe.
Liebe Grüße
AW: Makro beschleunigen
07.04.2011 11:23:47
Timo
Hi Sawadee,
Wie Rudi schon vermutet hat, hast Du da ein paar .select Anweisungen und das sind ziemliche Bremsen.
Statt
Sheets("Rechnung").Select
Rechdat = Names("Rechdat").RefersToRange
...
besser Du packst die RefersToRange Zeilen in eine With / End With:
Sub Beispiel()
With Sheets(Rechnung)
Rechdat = .Names("Rechdat").RefersToRange
KdNr = .Names("KdNr").RefersToRange
Name = .Names("Name").RefersToRange
Netto = .Names("Netto").RefersToRange
Brutto = .Names("Brutto").RefersToRange
End With
End Sub
Wichtig sind dabei die Punkte vor .Names.
Den anderen Teil würde ich auch umbauen:
Sub Beispiel()
Dim lZeile As Long
With Sheets("noch offen")
lZeile = .Range("A3").End(xlDown).Row + 1
.Cells(lZeile, 1).Value = Rechdat
.Cells(lZeile, 2).Value = Netto
.Cells(lZeile, 3).Value = Brutto
End With
End Sub
Gruß
Timo
Anzeige
Achtung, Fehlerquelle
07.04.2011 11:42:23
Rudi
Hallo,
wenn die Namen nicht lokal, sondern global sind, geht das schief:
With Sheets(Rechnung)
Rechdat = .Names("Rechdat").RefersToRange
KdNr = .Names("KdNr").RefersToRange
Name = .Names("Name").RefersToRange
Netto = .Names("Netto").RefersToRange
Brutto = .Names("Brutto").RefersToRange
End With

Gruß
Rudi
AW: Makro beschleunigen
07.04.2011 10:57:04
Rudi
Hallo,
am OffSet liegt's bestimmt nicht.
Eher an Select/ Activate und/ oder Berechnungen/ Ereignisprozeduren, die durch den Eintrag ausgelöst werden.
Gruß
Rudi
AW: Makro beschleunigen
07.04.2011 11:13:54
sawadee00
Hallo Rudi,
vielen Dank für deine Antwort.
Du hast natürlich recht. Am offset liegts nicht.
Liebe Grüße
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige