Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Universal-Formular/ControlSource

Betrifft: Universal-Formular/ControlSource
von: dkli
Geschrieben am: 16.04.2003 - 23:26:02

Hallo an den Spezialisten,

habe schon öfter interessante Anregungen im Forum gefunden, allerdings bisher nicht zu meinem derzeitigen Problem.

Programmiere ein wenig mit Excel97-VBA und schicke voraus, dass ich Variablen nicht deklariert, sondern einfach vor mich hin programmiert habe, vielleicht liegt da der Fehler.

Okay, um was geht's?

Habe mir ein Formular "gestrickt", dass bestimmte Zellen über die ControlSource-Eigenschaft einliest, darstellt und auch bearbeiten lässt. Sobald ich allerdings mit einem Click-Ereignis auf dem Formular das Tabellenblatt wechsle, wird weiterhin Bezug genommen auf die entsprechenden Zellen auf dem Tabellen-Blatt, welches beim Start des Formulares gültig war. Ich hätte allerdings gerne ein Universal-Formular, dass immer Daten vom gerade aktuellen Tabellenblatt anzeigt.

Wie lässt sich eine Gesamt-Aktualisierung während der Programm-Ausführung hinbekommen ohne dass ich explizit alle Zellbezüge per Anweisung neu setze.

Behelfe mir vorübergehend damit, dass ich das Formular nach jedem Tabellenblattwechsel z.B. über eine Schaltfläche immer neu starte. Da das geht, hat mein Problem vermute ich irgendetwas mit der Variablen-Initialisierung des Formulars zu tun.

Hoffe, ich habe mich verständlich ausgedrückt. Noch mehr hoffe ich natürlich auf eine erklärende Antwort.

Vorab schon einmal DANKE!

Dieter

  

Re: Universal-Formular/ControlSource
von: PeterW
Geschrieben am: 16.04.2003 - 23:30:48

Hallo Dieter,

bin zwar nicht der Spezialist aber ohne Code ist das kaum zu beantworten.

Gruß
Peter

  

Re: Universal-Formular/ControlSource
von: Ramses
Geschrieben am: 16.04.2003 - 23:34:13

Hallo Dieter,

so ohne Code ist das schwierig zu sagen, aber ein Tip

Die Routine die zum füllen des Formulars verwendest in ein eigenes Modul auslagern und zum Beispiel

Sub Fill_Form()

benennen. Das Click-Ereignis kannst du dann so kombinieren:

Private Sub Commandbutton1_Click()
Worksheets("Andere Tabelle").Activate
Call Fill_Form()
End Sub

Damit wechselst du die Tabelle und rufst anschliessend die Routine auf, welche dir normalerweise das Formular füllt.

Zum füllen der Userform musst du dann nur noch die Anweisung

Textbox1.Value = Range("A1")

in

Userformname.Textbox1.Value = Range("A1")

umwandeln, und du hast dein Universalformular.

Gruss Rainer

  

Re: Universal-Formular/ControlSource
von: dkli
Geschrieben am: 17.04.2003 - 10:01:59

Hallo Rainer,

danke für die Antwort, aber:

Es gibt keine Routine zum Füllen!

Beim Erstellen des Formulares habe ich Textfelder verwendet und direkt im Eigenschaftsfenster als Bezug für ControSource z.B. A1 oder B12 angegeben.

Somit werden Daten beim Aktivieren des Formulares direkt aus dem aktiven Arbeitsblatt eingelesen und können bearbeitet werden.

Ein Wechsel des Arbeitsblattes per Schaltfläche und Click-Ereignis beläßt aber trotzdem den Fokus auf dem ursprünglichen Arbeitsblatt.

Wollte mir einfach Programmieraufwand sparen, da ich sonst explizit den Textfelder die entsprechenden Werte zuweisen müsste und bei Verlassen des Formulares diese dann auch in der Tabelle neu zu schreiben wären.

Hoffe, jetzt wird's klarer.

Ansonsten maile ich auch gerne eine kleine Demo-Datei.

Danke für deine Hilfe!

Dieter

  

Workaround
von: Ramses
Geschrieben am: 17.04.2003 - 10:37:51

Hallo,

nicht schön aber funktioniert

In das Click-Ereignis:

'Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False
'Formular schliessen
Unload Me
'Wechsel in das Tabellenblatt
Worksheets("Neue Tabelle").Select
'Userform neu laden
Load Userform1
'Bildschirmaktualisierung wieder einschalten
Application.ScreenUpdating = True

Hintergrund:
Mit der Controlsource Eigenschaft verweist du immer auf den Bereich der gerade aktuellen Tabelle.

Sollte also gehen.

Gruss Rainer

  

Re: Workaround
von: dkli
Geschrieben am: 17.04.2003 - 11:10:59

Hallo Rainer,

wärst du so nett und würdest direkt mit mir Kontakt aufnehmen.

Weiß nicht wie sicher das ganze läuft (Werbung...), aber trotzdem hier meine Adresse:

dklingelhoefer11@freenet.de

Würde dir dann gerne meine Beispiel-Datei mailen, komme nämlich irgendwie nicht weiter...

Danke!

Dieter

  

Re: Workaround
von: dkli
Geschrieben am: 17.04.2003 - 23:22:48

Hallo Rainer,

es hat mir einfach keine Ruhe gelassen. Kam mit deinen Daten irgendwie nicht weiter.

Dein letztlich entscheidender Tipp war die Zeile:
Unload Me

Habe damit noch ein wenig probiert und so läuft's jetzt:

Private Sub CommandButton1_Click()
If ActiveSheet.Name = "Blatt_1" Then
Unload Me
Worksheets("Blatt_2").Activate
UserForm1.Show
Else
Unload Me
Worksheets("Blatt_1").Activate
UserForm1.Show
End If
End Sub

Danke dir und frohe Ostern!

Dieter