2016-05-23 23 views
1

Da ich neu in VBA bin, versuche ich eine benutzerdefinierte Bildlaufleiste zu meinem Blatt hinzuzufügen. Mit customized kann ich den minimalen Wert, den maximalen Wert und die kleine Änderung der Bildlaufleiste unter Verwendung eines Benutzerformulars bestimmen, wo ich die gewünschten Werte anforderte. Bisher habe ich die Werte in den öffentlichen Variablen gespeichert folgende: „.SmallChange“ screen of the UserformVBA Anpassen der Bildlaufleiste mit UserForm-Variablen

Option Explicit 

Public A As Integer 
Public B As Integer 
Public C As Integer 


Private Sub Valider_Click() 

If IsNumeric(TextBox1.Value) Then 
    A = TextBox1.Value 
    Unload Me 
Else 
    MsgBox "Valeur mimimale incorrecte" 
End If 

If IsNumeric(TextBox2.Value) Then 
    B = TextBox2.Value 
    Unload Me 
Else 
    MsgBox "Valeur maximale incorrecte" 
End If 

If IsNumeric(TextBox3.Value) Then 
    C = TextBox3.Value 
    Unload Me 
Else 
    MsgBox "Pas incorrect" 
End If 

MsgBox A & " " & B & " " & C 

End Sub 

und ich zugewiesen nur die Werte für „· min“, „.Max“ und mit A, B und C im Code defaut Scrollbar von Excel gegeben:

Sub curseur() 

ActiveSheet.ScrollBars.Add(180, 45.75, 119.25, 13.5).Select 
With Selection 
    .Value = 0 
    .Min = A 
    .Max = B 
    .SmallChange = C 
    .LargeChange = 10 
    .LinkedCell = "$G$4" 
    .Display3DShading = True 
End With 
Range("F4").Select 
ActiveCell.FormulaR1C1 = "=RC[1]/100" 
Range("G4").Select 
With Selection.Interior 
    .Pattern = xlSolid 
    .PatternColorIndex = xlAutomatic 
    .ThemeColor = xlThemeColorDark1 
    .TintAndShade = -0.149998474074526 
    .PatternTintAndShade = 0 
End With 
With Selection.Font 
    .ThemeColor = xlThemeColorDark1 
    .TintAndShade = -0.149998474074526 
End With 
End Sub 

So habe ich 3 Textfelder und ein Befehlsschaltfläche ("Valider"). Grundsätzlich besteht meine Idee darin, diese 3 Boxen mit den vorgegebenen Werten (min, max, ...) zu füllen und in öffentlichen Variablen zu speichern. Im Moment benutze ich nur meinen Code aus dem Entwickler-Tab mit F5.

Ich benutze zuerst das Benutzerformular. Sobald die Textfelder erfüllt sind und der CommandButton gedrückt ist, gibt die MessageBox die Werte zurück, die in den Variablen A, B und C enthalten sind. Dann möchte ich diese verwenden, um meine Bildlaufleiste zu "definieren". Wenn ich F5 drücke, wird die Bildlaufleiste angezeigt (siehe Screenshot), aber wenn ich zu den Eigenschaften gehe, werden alle Werte auf Null gesetzt. Scheint, ich rufe die Variablen A, B, C nicht richtig auf: scrollbar properties

Vielen Dank im Voraus für Ihre Hilfe.

+0

Was genau passiert und was fehlt? Haben Sie ein Formular mit mehreren Textfeldern? Weil Sie nach der ersten Überprüfung entladen. Was sagt deine msgbox? Wie und wann rufen Sie Ihren Code an? Bitte fügen Sie einige Details hinzu, um uns zu helfen. Ich kann nicht sehen, wie Sie die Parameter für Ihre Bildlaufleisten weiterleiten ... – Jochen

+0

Ich habe meinen Beitrag bearbeitet und 2 Screenshots und detailliertere Erläuterungen hinzugefügt. Hilft es ? (Es tut mir leid, da ich neu bin, ich bin mir nicht sicher, welche Informationen Sie brauchen. Aber das ist so ziemlich alles zu meinem Code hier). Danke für deine Hilfe, übrigens! – beckq

Antwort

0

Das Problem ist, dass Ihr zweiter Sub (Curseur) nicht weiß, welche Werte Sie aus Ihrem Formular zugewiesen haben. Variablen werden "zerstört", nachdem das letzte Bit Ihres Codes endet. So haben die Variablen A, B, C in curseur() keinen Wert.

Wenn Sie den Aufruf der Prozedur am Ende Ihres valider_click Sub hinzufügen, sollte dies Ihr Problem beheben. Sie sollten Ihr Sub-Objekt vorher beenden, wenn Ihre Werte nicht numerisch sind:

Private Sub Valider_Click() 

    If IsNumeric(TextBox1.Value) Then 
     A = TextBox1.Value 
    Else 
     MsgBox "Valeur mimimale incorrecte" 
     Exit Sub 
    End If 

    If IsNumeric(TextBox2.Value) Then 
     B = TextBox2.Value 
    Else 
     MsgBox "Valeur maximale incorrecte" 
     Exit Sub 
    End If 

    If IsNumeric(TextBox3.Value) Then 
     C = TextBox3.Value 
    Else 
     MsgBox "Pas incorrect" 
     Exit Sub 
    End If 

    MsgBox A & " " & B & " " & C 
    Call curseur 
    Unload Me 

End Sub 
+0

Danke nochmal. Aber da ist immer noch ein Problem ... Der Anruf meines Sub "Curseur" funktioniert gut (ich musste nur "curseur.curseur" schreiben, da mein Sub in einem Modul Call "curseur" ist ... ich komme progressiv vertraut mit der Hierarchie). Ich bin immer noch drauf, aber wenn Sie eine Idee haben, danke im Voraus – beckq

+0

Ich hatte es funktioniert Aufruf der Variablen A, B und C als Variablen aus dem Benutzerformular. Id est: ".Min = Benutzerformular1.A". Macht es Sinn? – beckq

+0

Am besten wäre es, wenn Sie Ihr Sub als 'Sub curseur 'deklarieren (A als INteger, B als Integer, C als Integer)' und den Call in 'Call curseur (A, B, C)' ändern. In fast jeder Situation ist es besser, Parameter aufzurufen, anstatt globale Variablen zu deklarieren und zu verwenden. – Jochen