VBA使用UserForm变量

时间:2016-05-23 09:28:43

标签: excel-vba scrollbar userform vba excel

作为VBA的新用户,我尝试在自己的工作表中添加自定义滚动条。通过自定义,我的意思是我可以使用Userform来确定滚动条的最小值,最大值和小变化,在那里我询问了所需的值。到目前为止,我已将值存储在以下公共变量中: screen of the Userform

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

我刚刚重新分配了#34; .Min"," .Max"和" .SmallChange。"在Excel给出的defaut滚动条代码中使用A,B和C:

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

所以我有3个文本框和一个Commandbutton(" Valider")。基本上我的想法是用前面的值(min,max,...)来实现这3个盒子并将它们存储在公共变量中。目前我只是使用F5从开发者选项卡运行我的代码。

我首先运行用户表单。一旦完成文本框并按下CommandButton,MessageBox就会返回变量A,B和C中包含的值。 然后我想用它们来定义"我的滚动条。当我按F5时,滚动条显示自己(见截图),但如果我转到属性,则所有值都设置为零。似乎我没有以正确的方式调用变量A,B,C:scrollbar properties

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

问题是你的第二个子(curseur)不知道你从表单中分配了什么值。变量被销毁了#39;在你的代码的最后一点结束之后。所以curseur()中的变量A,B,C没有任何价值。

如果您将程序调用添加到valider_click sub的末尾,这应该可以解决您的问题。如果您的值不是数字:

,您应该退出子
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