Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
812to816
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
812to816
812to816
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA&DDE überfordert?

VBA&DDE überfordert?
31.10.2006 23:06:53
HannaG.
Hallo,
hab unter eifriger Mithilfe des Forums mein Excelsheet fertiggestellt. Danke.
Jetzt aber die Enttäuschung:
Scheinbar kann VB nicht mit größeren Datenmengen umgehen?
Selbst, wenn man z.b. das Mustersheet nimmt(s.u.) taucht folgendes Problem auf:
Wenn man in die Spalte C7:C500 ein paar Daten manuell eingibt und jeweils mit Enter bestätigt, wirft das Sheet korrekt die betroffenen ganzen Zeilen in den obersten Zeilen aus.
Verlinkt man mit DDE mehrere Felder in Spalte C mit dem Mustersheet, was dazu führt, daß teilweise jede Sekunde eine oder mehrere Zahlenänderungen vorgenommen werden in den verschiedenen C-Zellen, so aktualisiert Excel zwar die Datenfelder in C zügig, aber die Ergebnisse durch VB beziehen sich immer nur auf einen Zelle(die zuletzt mit Drag&Drop verlinkte). Wie gesagt: Auch bei dem Mustersheet(sonst würde ich ja den Fehler bei mir suchen(i.d. Regel zurecht)).
Am Rechner kann es eigentlich nicht liegen. Ist ja auffällig, daß er Excel nicht verzögert abarbeitet, sondern nur eine Zelle.
Hab ich da einen Denkfehler?
Dazu das Mustersheet:
"

Die Datei https://www.herber.de/bbs/user/37790.xls wurde aus Datenschutzgründen gelöscht

Gruss
Franz
"

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA&DDE überfordert?
31.10.2006 23:34:48
Stefan
Hallo Franz,
Sollte wirklich eine Zeitspanne von bis zu einer Sekunde zwischen den Zahlenaenderungen vorkommen, dann denke ich das bei diesem Makro Excel sehrwohl in der Lage waere das abzuarbeiten. Ich habe keine Erfahrung mit DDE, aber kann es sein dass die neuen Zahlen einfach kein Worksheet_Change Ereignis ausloesen? Wenn sich im Zellinhalt nichts aendert (also in der Formel in der Zelle), sondern nur im Zellwert, also im Prinzip eine Berechnung mit einem neuen Ergebnis ablaeuft, wird kein Worksheet_Change Ereignis ausgeloest. Und wenn das nicht passiert, hilft Dir das schnellste Makro nichts...
Schoene Gruesse
Stefan
Anzeige
AW: VBA&DDE überfordert?
01.11.2006 00:11:43
HannaG.
Sehr interessantes Posting. Bis eben glaubte ich noch, daß das Makro jede Veränderung des Zelleninhaltes(es ändert sich eigentlich nur der Zahlenwert, aber der sehr schnell teilweise) verarbeitet und in die oberen Zeilen kopiert. Scheinbar ist es nicht so.
Wie gesagt: Bei manueller Eingabe in verschiedene Zellen klappt es(daher bin ich von einem "Geschwindigkeitsproblem" ausgegangen), bei DRag&Drop wird nur die letzte Zelle angesprochen.
LG Hanna
Was ist da zu ändern?(hier noch mal das Makro)

Private Sub Worksheet_Change(ByVal Target As Range)
'Überwacht Eingaben im Bereich C7:C507
If Target.Column = 3 And Target.Row >= 7 And Target.Row < 507 Then
'Trägt zuletzt geänderten Wert aus Spalte C in Zelle B2 ein
Cells(1, 2) = Target
'Kopiert Zeile mit zuletzt geändertem Wert in Zeile 2
Rows(Target.Row).Copy Destination:=Rows(2)
End If
End Sub

Anzeige
AW: VBA&DDE überfordert?
01.11.2006 00:17:45
HannaG.
Sehr interessantes Posting. Bis eben glaubte ich noch, daß das Makro jede Veränderung des Zelleninhaltes(es ändert sich eigentlich nur der Zahlenwert, aber der sehr schnell teilweise) verarbeitet und in die oberen Zeilen kopiert. Scheinbar ist es nicht so.
Wie gesagt: Bei manueller Eingabe in verschiedene Zellen klappt es(daher bin ich von einem "Geschwindigkeitsproblem" ausgegangen), bei DRag&Drop wird nur die letzte Zelle angesprochen.
LG Hanna
Was ist da zu ändern?(hier noch mal das Makro)

Private Sub Worksheet_Change(ByVal Target As Range)
'Überwacht Eingaben im Bereich C7:C507
If Target.Column = 3 And Target.Row >= 7 And Target.Row < 507 Then
'Trägt zuletzt geänderten Wert aus Spalte C in Zelle B2 ein
Cells(1, 2) = Target
'Kopiert Zeile mit zuletzt geändertem Wert in Zeile 2
Rows(Target.Row).Copy Destination:=Rows(2)
End If
End Sub

Anzeige
AW: VBA&DDE überfordert?
01.11.2006 01:10:03
Stefan
Hallo Hanna,
Erst mal entschuldige dass ich Dich mit dem falschen Namen angesprochen hab, da wa wohl im letzten Posting entwas zu viel Text...
Ersetze mal Deinen Code hiermit:
Dim myArray(501) As Double

Private Sub Worksheet_Calculate()
For i = 7 To 507
If Range("C" & i).Value <> myArray(i - 7) Then
If Not IsNull(myArray(i - 7)) Then Range("B1").Value = Range("C" & i)
myArray(i - 7) = Range("C" & i)
End If
Next i
End Sub

(mit der myArray Definiton ausserhalb der Sub)
Das Problem liegt darin dass es zwar ein Ereignis gibt das auf neu-Berechnungen reagiert, allerdings gibt Dir das keinen Ziel-Bereich zurueck den man auswerten koennte. Die Loesung hier liest deshalb erst einmal alle Zellen im Bereich C7:C507 in einen Array ein, um dann bei dem Ausloesen des Calculation-Ereignisses diesen Array mit den neuen Werten in der Spalte zu vergleichen. Wenn eine Abweichung gefunden wird, wird der Wert der Zelle in B2 ausgegeben.
Ich hoffe das funktioniert mit Deiner DDE. Die Geschwindigkeit scheint ok zu sein, zumindest bei 500 Zeilen.
Schoene Gruesse
Stefan
Anzeige
AW: VBA&DDE überfordert?
01.11.2006 01:48:48
HannaG.
Welch ein Service um kurz vor 2 Uhr.., Stefan!
Aktuell hab ich folgende Formel(s.u.) Und zwar soll die gsamte Zeile, in der der Wert auftaucht, in Reihe 2 kopiert werden.
Muß zugeben, daß mich deine Formel etwas überfordert. Wie könnte ich diesen Clou mit der "gesamten Zeile" noch in dein Gebilde reinbringen?
Gute Nacht ansonsten.
Hanna
Bisheriger Code:

Private Sub Worksheet_Change(ByVal Target As Range)
'Überwacht Eingaben im Bereich C7:C507
If Target.Column = 4 And Target.Row >= 7 And Target.Row < 700 Then
'Trägt zuletzt geänderten Wert aus Spalte C in Zelle B2 ein
Cells(1, 2) = Target
'Kopiert Zeile mit zuletzt geändertem Wert in Zeile 2
Rows(Target.Row).Copy Destination:=Rows(2)
End If
End Sub

Anzeige
AW: VBA&DDE überfordert?
01.11.2006 02:06:24
Stefan
Hallo Hanna,
Aus welchem Grund auch immer zuckt mein Code ein bisschen rum wenn ich die Copy Funktion so benutze wie in deinem Code, deshalb hier eine etwas erweiterte Version:
Dim myArray(501) As Double

Private Sub Worksheet_Calculate()
For i = 7 To 507
If Range("C" & i).Value <> myArray(i - 7) Then
If Not IsNull(myArray(i - 7)) Then
Application.ScreenUpdating = False
Rows(i).Copy
Rows(2).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Range("C" & i).Select
Application.ScreenUpdating = True
End If
myArray(i - 7) = Range("C" & i)
End If
Next i
End Sub

Zum Thema Service: Ich sitz ein wenig weiter im Westen, bei mir ist's erst kurz nach 8...
Gute Nacht!
Stefan
Anzeige
AW: Laufzeitfehler 13
01.11.2006 10:38:52
HannaG.
Stefan, deine Formel bringt mein Excel ganz schön zum rattern(nicht sehr flott, aber so ca. 5 Werte pro Sekunde werden eingelesen). Sieht gut aus.
Aber hab mich dann doch zu früh gefreut:
Die Verlinkung mit DDE bringt es mit sich, daß bei 1000 Datenreihen auch immer mal Aussetzer vorhanden sind. Excel markiert die Leerstellen dann mit 3 Punkten "...".
Und schon bricht Excel ab und meldet: Fehlermeldung "Laufzeitfehler``13`. Typen unverträglich".
Würde mich auch nicht stören, wenn anstatt Leerzeichen bzw. der 3 Punkte eine 0(Zahl muß wohl sein, wenn ich die Fehlermeldung richtig interpretiere) auftaucht, sofern kein Wert da ist.
LG
Hanna
(ich nehme an, daß du bei der Zeitverschiebung ein Nickerchen häslt)
Anzeige
AW: Laufzeitfehler 13
01.11.2006 12:53:42
Stefan
Hallo Hanna,
Recht gehabt....
Ersetze die Zeile fuer die Dimensionierung des Arrays mit
Dim myArray(501)
, also lass das "as Double" weg.
Bei Dir sollte die Zeile dann ohnehin schon eine 1000 drin haben, wenn Du mit so vielen Zahlen rechnest.
Schoene Gruesse
Stefan
AW: Laufzeitfehler 13
01.11.2006 18:59:18
HannaG.
Hallo, Stefan!
Danke erstmal für die Hilfe. Leider hat deine Formel einen Nachteil, der meinem DDE nicht bekommt scheinbar. Das Makro wird nonstop abgearbeitet. Scheinbar kommt man sich da mit dem DDE ins Gehege, weil es plötzlich zu Datenlücken kommt. Wenn ich das Makro anhalte, läuft es wieder rund.
Wie immer eine Frage dazu: Kann ich das Makro evtl. auch nur alle 20 Sekunden durchlaufen lassen. Zwar in Schleife, aber halt mir einigen Sekunden Pause dazwischen.
(CPU-Auslastung nie über 3 %, aber DDE bockt dennoch)
Gnauso beim Start des Sheet: Sofort kommt wieder eine Fehlermeldung. Schlielich müssen die Daten erst kurz von der DDE-Schnittstelle gezogen werden(dauert unterschiedlich lange). Ein manueller Start des Macros wäre als günstig.
LG
Hanna
Anzeige
AW: Laufzeitfehler 13
01.11.2006 19:59:11
Stefan
Hallo Hanna,
Anbei eine Datei mit dem bisher umgesetzten:
https://www.herber.de/bbs/user/37833.xls
Ueber das Makro Tabelle2.Start_Ueberwachung wird das ganze gestartet, mit Tabelle2.Stopp_Ueberwachung wieder gestoppt.
Dabei wird alle 20 Sekunden nach Aenderungen gesucht. Allerdings wirst Du dann immer nur die Veraenderung aus der untersten Zeile, die sich in dem Zeitraum veraendert hat, sehen, da das Makro deine Daten von oben nach unten durchlaeuft, und in den 20 Sekunden ja mehr als eine Aenderung haette passieren koennen.
Schoene Gruesse
Stefan
Anzeige
AW: Laufzeitfehler 13
01.11.2006 22:02:45
HannaG.
Klasse. Bisher klappt es problemlos!!! Super Hilfe hier im Bord!
Gruß
Hanna

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige