Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema OptionButton
BildScreenshot zu OptionButton OptionButton-Seite mit Beispielarbeitsmappe aufrufen

Userform über Function aufrufen - keine Werte | Herbers Excel-Forum


Betrifft: Userform über Function aufrufen - keine Werte von: Burns
Geschrieben am: 26.02.2010 17:04:11

Guten Tag :-)

Ich besitze da ein Problem, an dem ich schon seit ca. 3 Tagen zu knabbern hab.
Nach stundenlangem suchen bin ich total am Ende und hoffe, dass Ihr mir helfen könnt x)

zur Theorie:
Ich besitze 3 Spalten mit jeweils folgenden Überschriften(A1:C1)
A1. Farbe B1. Hell C1. Dunkel

Wenn ich nun unterhalt der Zelle A1, sprich A2 eine Wert wie
z.B. Gelb eintrage, dann soll automatisch die Userform1 geöffnet werden
in der ich über 2 Optionbuttons auswählen kann"Hell" oder "Dunkel".
Je nachdem, welchen Button ich anklicke soll er unter der entsprechenden
Zeile(sprich entweder unter B1 oder unter C1) ein "x" einsetzen und die Userform
soll sich automatisch schließen.

Zur Praxis:
Ich habe eine "Function" geschrieben, die wie folgt aussieht
Function HellDunkel()
Call UserForm1.Show
End Function
' Hiermit rufe ich die Funktion auf

Die Userform besteht nur aus 2, wie oben schon beschrieben,
Optionbuttons, mit denen ich auswählen kann zwischen "hell"
oder "dunkel"

Der Vba-Code eines Optionsbuttons sieht folgendermaßen aus:

--


Private Sub OptionButton1_Click()
If OptionButton1.Value = True Then
Range("B2") = "x"
End If
UserForm1.Hide
End Sub

In der Zelle B2 steht folgende Funktion
"=wenn(A2="Gelb";HellDunkel();"")

Die Userform öffnet sich nachdem ich in die Zelle A2 den Wert
"Gelb" eingetragen habe, aber anschließend kann die Userform keinen
Wert in das Tabelleblatt übertragen.

Ich hoffe.., Ihr könnt mir helfen x)

Schonmal im Vorraus Vielen Dank x)

Liebe Grüße, Burns =)

  

Betrifft: AW: Userform über Function aufrufen - keine Werte von: Tino
Geschrieben am: 26.02.2010 17:11:17

Hallo,
verwende dafür keine Funktion sondern ein Eventmakro.
In die Tabelle stellst Du diesen Code

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A2") = "Gelb" Then
    UserForm1.Show
End If
End Sub
In der Userform passt Du den Code so an.
Private Sub OptionButton1_Click()
Application.EnableEvents = False
    If OptionButton1.Value = True Then
        Range("B2") = "x"
    End If
    
    Unload Me
Application.EnableEvents = True
End Sub
Gruß Tino


  

Betrifft: AW: Userform über Function aufrufen - keine Werte von: Burns
Geschrieben am: 26.02.2010 17:18:02

Ja Wahnsinn x))))))))))

Es funktioniert..., ich glaub echt ich Spinn x)

VIEIIIIIIIIIIIELEN DANK !!!!!!!!!!! :-)

Allerdings verstehe ich folgendes nicht:
Application.EnableEvents =

Ich nehme an, dass dieser Code der Userform erlaubt,
das "x" in die entsprechende Zeile zu schreiben.

Warum ging das vorher nicht mit einer "function"?

Grüße Burns =)


  

Betrifft: Du kannst auch noch die Zelle abfragen... von: Tino
Geschrieben am: 26.02.2010 17:20:20

Hallo,
wo die Eingabe stattgefunden hat.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("A2"), Target) Is Nothing Then
    If Range("A2") = "Gelb" Then
        UserForm1.Show
    End If
End If
End Sub
Gruß Tino


  

Betrifft: Weitere Daten eintragen und automaitsch Zeile erk von: Burns
Geschrieben am: 26.02.2010 17:39:55

In Ordnung =)

Das hab ich jetz so "halbwegs" verstanden mit hilfe von Google erreicht man mehr =)

Wenn ich jetzt unterhalb noch mehr Farben eintrage,
wie kann ich zu diesem sagen, dass er automatisch in die
Zeile gehen soll, in der ich eine Farbe reinschreibe?
Bzw. wenn ich in Zeile5 Gelb reinschreibe, dass er er ebenso in B5
gegebenfalls in C5 das entsprechende Kreuz reinschreibt?

Ich habe folgendes probiert:

Private Sub Worksheet_Change(ByVal Target As Range)
 If Range("A2:A10") = "Gelb" Then
     UserForm1.Show
 End If
 End Sub
Kommt aber nur ne Fehlermeldung =(....

Darf ich Dich nochmals um Deine Hilfe bitten =)


  

Betrifft: AW: Weitere Daten eintragen und automaitsch Zeile erk von: Tino
Geschrieben am: 26.02.2010 18:05:52

Hallo,
für mehrere Zellen müsste es so gehen.

kommt als Code in Tabelle1

Option Explicit 
 
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim rngRange As Range 
Set rngRange = Intersect(Range("A2:A10"), Target) 
 
If Not rngRange Is Nothing Then 
    For Each rngRange In rngRange 
       If rngRange = "Gelb" Then 
           lngRow = rngRange.Row 
           UserForm1.Show 
       End If 
    Next rngRange 
End If 
 
lngRow = 0 
End Sub 
kommt als Code in UserForm1
Option Explicit 
 
Private Sub OptionButton1_Click() 
Application.EnableEvents = False 
    If OptionButton1.Value Then 
        Cells(lngRow, 2).Value = "x" 
    End If 
    Unload Me 
Application.EnableEvents = True 
End Sub 
 
 
kommt als Code in Modul1
Option Explicit 
 
Public lngRow As Long 
Gruß Tino


  

Betrifft: VielenDank x) von: Burns
Geschrieben am: 26.02.2010 18:15:52

Hat alles funktioniert...

verstehen kann ichs zwar noch nicht ganz...

ich werd mich weiter in die Büchers stürzen,
um dieses i-wann mal zu verstehen =)

Vielen Dank für Alles - Grüße Burns =)


  

Betrifft: Um dir deine noch offene, von Tino nicht... von: Luc:-?
Geschrieben am: 27.02.2010 01:13:09

…beantwortete Frage Warum ging das vorher nicht mit einer "function"? zu beantworten, Burns…
Eine (im TabBlatt) eingesetzte Fkt darf so etwas nicht, es gäbe sonst ggf ein heilloses Durcheinander bis hin zum xlAbsturz. Du kannst mit einer udFkt maximal eine MsgBox, evtl auch eine InputBox anzeigen und einen unformatierten Kommentar bzw ein leeres, unformatiertes Textfeld auf der FmlZelle anlegen.
Man kann diese Einschränkungen zwar umgehen, aber eben auch nur über die Auslösung eines Ereignisses, das dann seinerseits eine von der udFkt physisch entkoppelte (d.h., nicht mit ihr direkt zusammenhängende) Subroutine aufruft. Dabei kann/muss die udFkt ggf eine Globalvariable füllen, die von der Subroutine ausgewertet wird. Je nachdem, was die udFkt darüber hinaus liefern soll, muss die Subroutine ggf ihre Neuberechnung veranlassen und ihr dabei eine evtl Antwort, die sie dann in einem alternativen Lösungsstrang auswertet, in der Globalvariablen zukommen lassen.
So etwas sollte man aus den o.g. Gründen natürl nicht exzessiv betreiben. Außerdem entspricht diese Technik eigentl noch nicht deinem VBA-Level. Aber da du ja lernwillig bist, könntest du so etwas irgendwann sicher mal realisieren wollen. So kannst du dann auch Füllen und Formatieren beliebiger Zellen quasi per udFkt bewerkstelligen. Die landläufige und immer wieder kolportierte Meinung ist nämlich, dass das nicht ginge; aber Vorsicht, wenn du mal so weit bist — kann ins Auge gehen → also nur was für Einzelfälle! Auch 'ne kleine Tabelle aus lauter einzelnen Textfeldern ist so mit udFktt erzeugbar.
Du hast sicher Verständnis dafür, dass ich das hier nicht mit BspCodes unterlegen will…
Gruß+schöWE, Luc :-?


Beiträge aus den Excel-Beispielen zum Thema "Userform über Function aufrufen - keine Werte"