Discussion:
VBA: ControlSource Eigenschaft aktualisieren?
(zu alt für eine Antwort)
Andre Spindler
2006-10-31 10:57:48 UTC
Permalink
Hallo,
bis jetzt habe ich alle meine VBA-Problem lösen können, ohne im Forum
Fragen zu stellen (Danke an alle aktiven Mitglieder), aber jetzt komme
ich nicht mehr weiter.

Ich habe folgendes Problem mit VBA in Excel:

Ein dynamisches UserFrom (Objekte kommen zur Laufzeit hinzu oder werden
gelöscht) hat mehrere Textfelder. Diese haben jeweils eine
ControlSource-Eigenschaft. Die zugeordneten Zellen im Excel-Sheet
stehen in der gleichen Spalte, zeilenweise untereinander.

Lösche ich jetzt per VBA-Code eine Zeile im Excel-Sheet, ändern sich
die Inhalte meiner Textfelder so, wie man es erwarten würde: Die
Zellbezüge der ControlSource-Eigenschaft bleiben erhalten, die Inhalte
der Textfelder rücken nach.
Dummerweise funktioniert das aber nur einmal. Löscht man eine weitere
Zeile im Excel-Sheet, werden die Inhalte der Textfelder nicht mehr
aktualisiert (obwohl die ControlSource-Eigenschaft erhalten bleibt,
d.h. Zellbezug und Textfeld enthalten nun unterschiedliche Werte).

Wie kann man die ControlSource-Eigenschaft aktualisieren oder gibt es
eine andere Lösung?
Vielen Dank.
Andre
stefan onken
2006-10-31 12:11:11 UTC
Permalink
hallo Andre,
Post by Andre Spindler
Ein dynamisches UserFrom (Objekte kommen zur Laufzeit hinzu oder werden
gelöscht) hat mehrere Textfelder. Diese haben jeweils eine
ControlSource-Eigenschaft. Die zugeordneten Zellen im Excel-Sheet
stehen in der gleichen Spalte, zeilenweise untereinander.
Lösche ich jetzt per VBA-Code eine Zeile im Excel-Sheet, ändern sich
die Inhalte meiner Textfelder so, wie man es erwarten würde: Die
Zellbezüge der ControlSource-Eigenschaft bleiben erhalten, die Inhalte
der Textfelder rücken nach.
Dummerweise funktioniert das aber nur einmal. Löscht man eine weitere
Zeile im Excel-Sheet, werden die Inhalte der Textfelder nicht mehr
aktualisiert (obwohl die ControlSource-Eigenschaft erhalten bleibt,
d.h. Zellbezug und Textfeld enthalten nun unterschiedliche Werte).
Wie kann man die ControlSource-Eigenschaft aktualisieren oder gibt es
eine andere Lösung?
Vielen Dank.
Andre
das Problem konnte ich bei mir (XL03) nachvollziehen.
Es ist nicht besonders elegant, aber du könntest die ControlSource
nach dem löschen der Zeile(n) neu zuweisen, etwa so:

For Each ctrl In UserForm1.Controls
If TypeName(ctrl) = "TextBox" Then
ctrl.ControlSource = ctrl.ControlSource
End If
Next

Gruß
stefan
Andre Spindler
2006-10-31 13:50:40 UTC
Permalink
Danke Stefan. Die TypeName - Funktion kannte ich noch nicht.
Nicht elegant in meinem Fall, aber robust.
Vielen Dank.

Andre

Loading...