Seite 2 von 2
Re: Dubletten entfernen
Verfasst: So, 18.12.2011 11:44
von sven-my
Hallo alle zusammen,
jetzt habe ich vier Mal die Tabelle (A1 - J530 / ca. 10% Doubletten) durchforsten lassen, bei der DPunch's Code so lange brauchte.
Dabei ergaben sich Zeiten für das Zeilenlöschen zwischen 540E-5sec und 630E-5sec. (Maßeinheit geändert !)
Was da gestern los war - ein Rätsel !
gruß
sven-my
Re: Dubletten entfernen
Verfasst: So, 18.12.2011 16:21
von sven-my
Hallo DPunch,
eine Erklärung für den übermäßigen Zeitbedarf sehe ich in der Tatsache, daß die Tabelle, die ich nach Doubletten durchsucht habe, reichlich VERWEISE beinhaltet, und fünf andere Tabellenblätter per VERWEIS auf dieses Tabellenblatt zugreifen.
Was aber noch dazu kommt, ist, daß die im Makro gemessene Zeit nicht mit der Zeit übereinstimmt, die vom Aufruf des Makros bis zu dem Zeitpunkt, zu dem man weiterarbeiten kann, vergeht, recht unterschiedlich sind.
Innerhalb des Makros habe ich 127msec gemessen, mit einer Stopuhr in der Hand, verging vom Anklicken des Buttons für das Makro, bis zu Anzeige der msgbox mit der Zeitanzeige, ganze 2min38sec.
Gemessen habe ich so:
Code: Alles auswählen
oDoc.unlockControllers
eZ = now
vZ = (fix((eZ - aZ)*86400*1000))/1000
msgbox "fertig nach " & vZ & " msec"
gruß
sven-my
Re: Dubletten entfernen
Verfasst: So, 18.12.2011 18:25
von DPunch
Aloha
Ich kann zwar reproduzieren, dass der Vorgang durch eine große Anzahl von Verweisen erheblich länger dauert, aber auf derart lange Zeiten wie Du komme ich trotzdem nicht.
Das bewegt sich dann im Bereich von 1-3 Sekunden bei einer sehr großen Anzahl von Verweisen, statt der 34 ms vorher.
Vielleicht könntest Du mal eine Beispieldatei hochladen, damit wir wenigstens auf gleicher Basis vergleichen.
sven-my hat geschrieben:UND eine neues Phänomen ist aufgetreten : starte ich das Makro mehrmals hintereinander, wird die Anzeige nicht mehr aktualisiert; erst wenn ich auf ein anderes Tabellenblatt gehe, und dann wieder zurück, habe ich die aktuelle Ansicht.
Das tritt nur auf, wenn Du das Makro einmal nicht hast durchlaufen lassen, z.B. weil Du einen Typo hattest, als Du die MsgBox-Zeile in den Code eingefügt hast und das Makro mit einer entsprechenden Fehlermeldung abgebrochen wird.
Erreicht das Makro die Zeile
nicht, bleiben die Controller des Dokuments bis zum nächsten Neuladen gesperrt - diese sind z.B. zuständig für das Aktualisieren von Anzeigen im Dokument.
Im Zweifelsfalle kannst Du die Anweisung abändern in
Code: Alles auswählen
Do While oDoc.hasControllersLocked
oDoc.unlockControllers
Loop
dann werden alle Controller zumindest nach dem nächsten erfolgreichen Durchlauf des Makros wieder freigegeben.
Re: Dubletten entfernen
Verfasst: So, 18.12.2011 18:46
von sven-my
Hallo DPunch,
DPunch hat geschrieben:Vielleicht könntest Du mal eine Beispieldatei hochladen, damit wir wenigstens auf gleicher Basis vergleichen.
wird schwierig, denn das Dokument ist recht groß, mal sehen, ob ich es morgen "eindampfen" kann.
DPunch hat geschrieben:Das tritt nur auf, wenn Du das Makro einmal nicht hast durchlaufen lassen, z.B. weil Du einen Typo hattest, als Du die MsgBox-Zeile in den Code eingefügt hast und das Makro mit einer entsprechenden Fehlermeldung abgebrochen wird.
Was, bitte schön, ist ein Typo ?
Das wäre mir durch die Hinweismeldung aufgefallen [Das Programm muß neu gestartet werden...]. Ich habe immer erst am Makro was geändert, wenn die letzte MSGBOX (Zeit-Anzeige) zu sehen war. Außerdem habe ich zwischen >oDoc.lockControllers< und >oDoc.unlockControllers< zuerst im Test-Dokument etwas geändert, und wenn es dort ohne Fehlermeldung lief, rüberkopiert (ich bin nun mal kein großer, kaum ein kleiner, Basic-Programierer - daher etwas übervorsichtig).
gruß
sven-my
Re: Dubletten entfernen
Verfasst: So, 18.12.2011 18:53
von DPunch
Aloha
sven-my hat geschrieben:Was, bitte schön, ist ein Typo ?
Ein Vertipper.
sven-my hat geschrieben:Das wäre mir durch die Hinweismeldung aufgefallen [Das Programm muß neu gestartet werden...].
Diese Hinweisemeldung wirst Du da nicht bekommen.
Der Effekt, den Du schilderst, weist jedenfalls recht eindeutig darauf hin, dass Du (mindestens) einmal das Makro gestartet hattest, es aber nicht bis zum Ende durchgelaufen ist - warum auch immer.
Re: Dubletten entfernen
Verfasst: So, 18.12.2011 21:33
von sven-my
Hallo DPunch,
mit aller Gewalt habe ich das Tabellen dokument abgespeckt, aber unter 478kB (von 845kB) bekomme ich es nicht gedrückt, ohne es zu sehr zu verändern.
Das ist die Meldung, die ich weiter oben meinte, d.h. die Meldung, wenn ich in einem laufenden Makro etwas ändern wollte.
gruß
sven-my
Re: Dubletten entfernen
Verfasst: Di, 20.12.2011 10:41
von sven-my
Hallo an Alle,
nun bin ich dahinter gekommen, weshalb die per Stopuhr gemessene Zeit (von sven-my » 18.12.2011, 16:21 ) nicht mit der vom Makro angezeigten Zeit übereinstimmt hat : DENKFEHLER !
siehe hier:
http://de.wikipedia.org/wiki/Dezimalzeit Überschrift: Umrechnen
Code: Alles auswählen
Sub Main
msgbox "Start"
aZ = now
msgbox "Ende"
eZ = now
vZ = eZ - aZ
msgbox vZ
vZr = (fix((eZ - aZ)*86400*100))/100
msgbox vZr & " sec"
End Sub
Die Zahl "vZ" in ein Tabellenblatt, und >MM:SS,00< formatiert ergibt genau die Zeit in "vZr"
"*100))/100" -> für zwei Nachkommastellen
gruß
sven-my
Re: Dubletten entfernen
Verfasst: Fr, 11.05.2012 08:52
von theindless
Hallo,
nachdem ich vor kurzem ebenfalls versucht habe, das Dubletten-Problem zu lösen (funktioniert auch einigermaßen) bin ich über diesen Thread gestolpert.
Bei meinen Tests hat das Macro von DPunch aber nur mit Zahlen und nicht mit Daten (=Mehrzahl von Datum), wie von mir benötigt, funktioniert.
Mache ich was falsch oder geht das einfach nicht?
theindless
Re: Dubletten entfernen
Verfasst: Fr, 11.05.2012 09:12
von Karolus
Hallo
Wahrscheinlich hast du gleiche Daten unterschiedlich formatiert ?
Das macht für die vorgestellten Makros einen Unterschied.
Karo
Re: Dubletten entfernen
Verfasst: Fr, 11.05.2012 09:42
von theindless
Hallo Karolus,
ich hatte nur zu Testzwecken in die Zellen A1:A4 folgendes eingegeben:
01.01.12
01.02.12
01.02.12
01.03.12
und das hat nicht funktioniert.
Ich habe das nochmals getestet und die Daten extra nochmals einheitlich formatiert.
-> funktioniert immer noch nicht.
theindless
Re: Dubletten entfernen
Verfasst: Fr, 11.05.2012 10:05
von Karolus
Hallo
Formatiere die Spalte mit 4stelliger Jahresanzeige dann tut es!
( .getString() setzt das vollständige Datum mit 4stelliger Anzeige ein, aber die "suchen und Ersetzen"-methode vergleicht dann mit den "sichtbaren" Einträgen der anderen Zellen. )
Karo
Re: Dubletten entfernen
Verfasst: Fr, 11.05.2012 10:15
von theindless
Hallo Karolus,
funzt!
Danke!