VBA-Code funktioniert nicht mehr
Hallo,
in meinem Excel-VBA-Script rufe ich an einer Stelle ein Modul auf (hier: "test"), welches dafür sorgt, dass - abhängig von einer "1" in einer bestimmten Spalte - verschiedene Felder in der jeweiligen Zeile kopiert werden. Hier ein Testmodul, das anstelle der Kopier-Zeilen eine (die zweite) MsgBox enthält (die erste MsgBox dient mir nur zur Überprüfung, ob überhaupt rein gesprungen wird):
Sub test()
Dim myReporting_taeglich_Quelle As Range
Dim myReporting_taeglich_Ziel As Range
Set myReporting_taeglich_Quelle = Range("ExcName_Reporting_taeglich_Quelle")
Set myReporting_taeglich_Ziel = Range("ExcName_Reporting_taeglich_Ziel")
MsgBox "test"
SpalteQuelle = Range(myReporting_taeglich_Quelle.Address).Column
SpalteZiel = Range(myReporting_taeglich_Ziel.Address).Column
intLetzteZeile = Sheets("Auswertung FM-DB-Int").Cells(Rows.Count, SpalteQuelle - 1).End(xlUp).Row
For intZaehler = intLetzteZeile To 108 Step -1
If Cells(intZaehler, SpalteZiel + 6) = "1" Then
MsgBox intZaehler & vbCrLf & Cells(intZaehler, SpalteZiel + 6)
End If
Next intZaehler
End Sub
Dies lief mehrere Monate gut. Inzwischen finden die Kopieraktionen aber nicht mehr statt, obwohl in der jeweiligen Zelle eine "1" steht und definitiv nach "test" gesprungen wird. Aus irgend welchen Gründen wird die "1" nicht mehr als "1" erkannt und die Kopieraktionen bleiben aus.
Hat jemand eine Ahnung, warum so etwas "von heute auf morgen" nicht mehr funktioniert?
Nach vielen Tests habe ich keine Lösung und auch keine Ideen mehr, was ich noch versuchen kann.
Vielen Dank schon mal
Jojo
Antwort schreiben
Antwort 1 von Kauz vom 03.07.2020, 05:36 Options
Hallo Jojo
das Einzige was mir dazu einfällt, wäre ein Formatproblem.
Also ein Unterschied zwischen einer 'echten' Eins und einem Textinhalt "1".
Ich meine, VBA kann bei Inhaltsabfragen in der Richtung auch ziemlich 'stur' sein.
Gruß
Andreas
Antwort 2 von jojo5 vom 03.07.2020, 07:47 Options
Hallo Andreas,
danke für die Antwort - aber das habe ich schon ausgetestet. Daran liegt es nicht.
Was ich aber noch vergessen habe (und was dieser Vermutung ebenfalls widerspricht): Wenn ich ausschließlich dieses Modul starte, funktioniert es einwandfrei ...
Wenn ich jedoch den gesamten VBA-Code laufen lasse, geht er - wie ich oben geschrieben habe - definitiv zwar in dieses Modul rein (mit "Call test"), stellt dann aber nicht fest, in welchen Zellen eine 1 steht. Ich habe auch den Modulaufruf an die erste Stelle des VBA-Codes gesetzt - negativ. Außerdem habe ich den Inhalt des Moduls "test" direkt in den VBA-Code kopiert - negativ.
Hoffentlich hat von euch noch jemand eine Idee - und wenn's "nur" weitere Testmöglichkeiten sind.
Viele Grüße
Jojo
Antwort 3 von jojo5 vom 03.07.2020, 09:07 Options
Hallo,
an alle, die vielleicht ein ähnliches Problem haben: Ich hab' die Ursache gefunden, juhu!
Also: Aus Performancegründen habe ich kürzlich meinen VBA-Code so umgestellt, dass keine selects mehr enthalten sind. Und genau da habe ich den Fehler selbst eingebaut. Denn mit dem Befehl
For intZaehler = intLetzteZeile To 108 Step -1
If Cells(intZaehler, SpalteZiel + 6) = "1" Then
sucht er in dem Tabellenblatt, in dem er sich gerade befindet nach der Zelle mit der 1. Und das war nicht das gewünschte Tabellenblatt (vor der Umstellung hatte ich dieses Tabellenblatt explizit selektiert).
D.h. mit der simplen Ergänzung
If Sheets("Auswertung FM-DB-Int").Cells(intZaehler, SpalteZiel + 6) = "1" Then
funktioniert alles wie vorgesehen. Ufffff
Vielleicht hilft mein stundenlanges Suchen wenigstens jemandem von euch.
Viele Grüße
Jojo