Excel VBA - Wert wird nicht in Zelle geschrieben

MickH74

Lieutenant
Registriert
Apr. 2009
Beiträge
591
Hallo liebes Forum,

ich plage mich schon länger mit diesem Problem herum, finde aber den Fehler nicht. Leider führen Google-Suchen zu dem Thema immer zu Antworten zu anderen Fragen und nicht zu diesem speziellen Problem.

Ich habe einen VBA-Code in dem diese beiden Zeilen stehen:

Code:
Debug.Print ("Ersetze Kunde " & Sheets("TB_KundenRef").Cells(j, 2) & " durch " & CStr(arrKE33(i, 5)))
Sheets("TB_KundenRef").Cells(j, 2) = CStr(arrKE33(i, 5))

Im Debug-Fenster wird der Text richtig ausgegeben, aber der Wert in der Tabelle wird nicht verändert. Es erscheint auch keine Fehlermeldung.

Bei der Fehlersuche habe ich mal ein:
Sheets("TB_KundenRef").Cells(j, 2) = "Test"
ausprobiert, um zu sehen, ob es mit dem Array zu tun hat. Aber auch das funktioniert nicht.
Ich habe gedacht, vielleicht muss das Blatt erst aktiviert werden und habe es mit
Sheets("TB_KundenRef").activate oder Sheets("TB_KundenRef").select
versucht.
Aber alles ohne Erfolg. Der Zellwert lässt sich nicht verändern.

Hat jemand eine Idee, was ich da übersehen?

Danke und Gruß,
Mick
 
Hast Du es mit dem Value-Property versucht? (bin gerade nur am Tablet und kann es nicht selbst testen)
 
Ja, hatte auch probiert, ein .value anzuhängen. Aber hat auch nicht geholfen.
Und es gibt auch keinen Schreibschutz.
 
Dann bin ich leider raus bis ich heute Abend andere Ideen am Rechner testen kann.
 
Folgendes funktioniert bei mir:
Sheets("Tabelle3").Cells(1, 2) = "Test"

Wie ist j definiert?
 
j ist ein Integer und wird durchgezählt von 2 bis zum UBound eines anderen Array.

Habe gerade mal versucht, j durch eine feste Zahl zu ersetzen. Auch das hilft aber nicht.

Wenn ich den gleichen Befehl direkt im Debug-Fenster ausführe, dann funktioniert er.
 
Ist das Blatt oder die Arbeitsmappe geschützt?
Kannst Du das auf einem anderen Blatt testen, folgendes funktionert hier.

Sub Makro1()
Dim j As Integer
j = 2
Sheets("TB_KundenRef").Cells(j, 2) = "Test"
End Sub

Setz mal einen Haltepunkt in deinem Makro, um zu prüfen, ob es überhaupt bis dahin läuft (oder mit F8 Zeile für Zeile....)
 
Zuletzt bearbeitet:
Blatt und Mappe haben keinen Schreibschutz.
Das Makro1() funktioniert und schreibt den Wert "Test" in die richtige Zelle.
Der Haltepunkt in meinem Programm funktioniert auch. Es wird ja auch die Debug-Zeile direkt darüber ausgeführt.
 
Sorry, keine Ahnung, eigentlich sollte das klappen, manchmal sieht man den Wald vor lauter Bäumen nicht.
 
Ich glaube, ich habe das Problem gefunden. Am Anfang der Sub habe ich

ActiveWorkbook.RefreshAll

benutzt. Ohne die Zeile funktioniert alles wie gewünscht. Vielleicht kann mir jemand erklären, warum diese Anweisung das Schreiben in ein Tabellenblatt verhindert. Das würde ich gerne verstehen.

Danke euch auf jeden Fall für eure Mühe!
 
Wird vielleicht irgendwo ein weiteres Workbook angelegt? Sodass dann dort reingeschrieben würde? Die externen Datenquellen /-verbindungen sind nach meinem Geschmack ohnehin irgendwie komisch.
Kannst du eine Beispieldatei hochladen, bei der man das reproduzieren kann? Am besten auch noch Excel-Version angeben.
 
Wie lange dauert denn der Refresh?
Koennte es sein, dass das Makro weiterlaeuft, waehrend Excel die Tabellenblaetter noch aktualisiert?
 
Der Refresh ist nicht zu erkennen, aber Excel müsste ihn doch abschließen bevor die nächste Zeile ausgeführt wird. DoEvents o.ä. verwende ich da nicht.
Ich könnte das natürlich mal testen, indem ich ein Application.Wait einbaue...
 
Zurück
Oben