Microsoft Excel

Herbers Excel/VBA-Archiv

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 TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Variblenwert wird nicht in Funktion übernommen

Betrifft: Variblenwert wird nicht in Funktion übernommen von: Marius Schon
Geschrieben am: 29.07.2014 15:48:52

Hallo liebes Forum,

ich arbeite seit ein paar Tagen mit VBA und wurschtel mich da so ein wenig rein.
zu meinem Problem habe ich hier keine lösung finden können, weswegen ich nun hier poste. Ich hoffe ihr könnt mir helfen.

Ich habe eine Userform zur Dateneingabe erstellt. Zur Problemlösung gehe ich gerade nach Eingabemöglichkeiten vor, weswegen der Code hier so kurz ist.
Dieser sieht nun wie folgt aus:

Private Sub Boxes()
        
        ComboBox2.Enabled = truth
        ComboBox3.Enabled = truth
        TextBox2.Enabled = truth
        TextBox3.Enabled = truth
        
        Label3.Enabled = truth
        Label4.Enabled = truth
        Label5.Enabled = truth
        Label9.Enabled = truth

End Sub

Public Sub Combobox1_afterupdate()
    
    Dim truth As Boolean

    If ComboBox1.Text = "Beratung" Then
        truth = False
    Else
        truth = True
    End If
    Boxes
    MsgBox truth
    
End Sub
Der Code soll folgendes machen:
Wenn in der Combobox1 "Beratung" eingegeben wird, sollen alle anderen Textboxes und Labels deaktiviert werden, damit keine Eingabe mehr möglich ist. Jedoch, wenn man sich aus versehen verklicken haben sollte, sollen die Felder bei richtger Eingabe wieder zur Bearbeitung geöffnet werden.
(Die Msgbox ist gerade nur zur Überprüfung da und wird wieder entfernt)

Jetzt hab ich das Problem, dass die Funktion Boxes nur einmal ausgeführt wird. Dummerweis immer mit False. Wenn ich den Boxes-Code Manuel in die Else-Teil von afterupdate einfüge klappt alles. Die Boolian-Variable wird auch richtig gesetzt, aber... die Felder bleiben dennoch gesperrt.

Für jeden Denkanstoß bin ich sehr dankbar!

Viele Grüße
Marius

  

Betrifft: AW: Variblenwert wird nicht in Funktion übernommen von: Robert
Geschrieben am: 29.07.2014 15:54:47

Hallo,

Füge den "Boxes" Code nicht in den Else Teil, sondern nach "End If" ein.

Viele Grüße
Robert


  

Betrifft: AW: Variblenwert wird nicht in Funktion übernommen von: Daniel
Geschrieben am: 29.07.2014 15:55:05

Hi

bevor du weiter machst:
das hier lesen, verstehn und anwenden.
http://www.online-excel.de/excel/singsel_vba.php?f=4
wenn das geschen ist, Frage nochmal stellen.

gruß Daniel


  

Betrifft: AW: Variblenwert wird nicht in Funktion übernommen von: Marius Schon
Geschrieben am: 29.07.2014 18:12:29

Danke für den Link. Werde es künftig umsetzt.
Ich hatte woanders gelesen, dass man Variablen sub-übergreifend verwenden kann, wenn man sie in ner Public Sub deklariert. Hat bisher auch prima geklappt.


  

Betrifft: AW: Variblenwert wird nicht in Funktion übernommen von: Daniel
Geschrieben am: 30.07.2014 09:57:13

Hi
das hast du falsch verstanden und das kann auch nicht funktionieren.
Variablen, die innerhalb einer Sub deklariert werden, sind nur innerhalb dieser Sub gültig.
Sie werden normalerweise auch gelöscht, wenn die Sub durchgelaufen ist. Das gilt auch für Public Subs.

wenn du Variablen von mehreren Subs nutzen willst, musst du sie oberhalb der Makros direkt unter Option Explict deklarieren.
Deklarierst du Dim x as Long, dann kann x von allen Makros innerhalb dieses Moduls verwendet werden
Deklarierst du Public x as Long in einem allgemeinen Modul, dann kann die Variable von allen Markos innerhalb der Datei verwendet werden.

Gruß Daniel


  

Betrifft: AW: Variblenwert wird nicht in Funktion übernommen von: ChrisL
Geschrieben am: 29.07.2014 15:58:10

Hi Marius

Wenn Du die Variable innerhalb der Prozedur deklarierst, steht diese nicht in der anderen Prozedur zur Verfügung resp. ist der Wert immer False.

Variante 1:

Dim truth As Boolean

Private Sub Boxes()
        MsgBox truth
End Sub

Public Sub Combobox1_afterupdate()
    If ComboBox1.Text = "Beratung" Then
        truth = False
    Else
        truth = True
    End If
    Boxes
End Sub

Variante 2:
Private Sub Boxes(bBeratung As Boolean)
    MsgBox bBeratung
End Sub

Public Sub Combobox1_afterupdate()
    If ComboBox1.Text = "Beratung" Then
        Call Boxes(False)
    Else
        Call Boxes(True)
    End If
End Sub


Würde Nr. 2 wählen.

cu
Chris


  

Betrifft: AW: Variblenwert wird nicht in Funktion übernommen von: Rudi Maintaire
Geschrieben am: 29.07.2014 16:18:40

Hallo,

Public Sub Combobox1_afterupdate()
    Boxes ComboBox1.Text = "Beratung"
End Sub

Private Sub Boxes(truth As Boolean)
        
        ComboBox2.Enabled = truth
        ComboBox3.Enabled = truth
        TextBox2.Enabled = truth
        TextBox3.Enabled = truth
        
        Label3.Enabled = truth
        Label4.Enabled = truth
        Label5.Enabled = truth
        Label9.Enabled = truth

End Sub

Gruß
Rudi


  

Betrifft: AW: Variblenwert wird nicht in Funktion übernommen von: Marius Schon
Geschrieben am: 29.07.2014 18:03:26

Schon mal vielen Dank für das schnelle Feedback.

@ Robert: entweder ich verlese mich, oder das habe ich schon getan.
@ Daniel: von Option Explicit habe ich schon gehört. Hatte allerdings auch gelesen, wenn man Variablen in ner public sub deklariert können sie in jeder private Sub verwendet werden. Ausserdem, die Variable wird ja ordentlich übernommen, das sehe ich an der msgbox, jedoch nicht an die Funktion übergeben. Oder verwechsel ich hier was?
@Chris mit dem "call"-befehl kann ich also einen spezifischen variablenwert direkt in die Sub übergeben? wird ich mal probieren. danke.
@ Rudi: sorry die Syntax verstehe ich nicht. was macht das?

Vielen Dank fürs Feedback
Marius


  

Betrifft: AW: Variblenwert wird nicht in Funktion übernommen von: Marius Schon
Geschrieben am: 29.07.2014 18:14:31

Sorry für den Doppelpost. Irgendwie steige ich hier nur langsam durch, wie das mit dem antworten funktioniert :)


  

Betrifft: was macht das? von: Rudi Maintaire
Geschrieben am: 29.07.2014 22:08:37

Hallo,
Boxes ComboBox1.Text = "Beratung"
übergibt True an Boxes wenn ComboBox1.Text = "Beratung" ist. Ansonsten False.

Gruß
Rudi


 

Beiträge aus den Excel-Beispielen zum Thema "Variblenwert wird nicht in Funktion übernommen"