【问题标题】:VBA Customize scrollbar with UserForm variablesVBA 使用 UserForm 变量自定义滚动条
【发布时间】:2016-05-24 19:40:04
【问题描述】:

作为 VBA 的新手,我正在尝试将自定义滚动条添加到我的工作表中。通过自定义,我的意思是我可以使用我询问想要的值的用户窗体来决定滚动条的最小值、最大值和小变化。到目前为止,我已将值存储在以下公共变量中: 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

我刚刚重新分配了“.Min”、“.Max”和“.SmallChange”的值。在 Excel 给出的默认滚动条代码中使用 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 个文本框和一个命令按钮(“验证器”)。基本上我的想法是用预先确定的值(最小值、最大值、...)来完成这 3 个框,并将它们存储在公共变量中。目前我只是使用 F5 从开发者选项卡运行我的代码。

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

提前感谢您的帮助。

【问题讨论】:

  • 到底发生了什么,缺少什么?您是否有一个带有多个文本框的表单?因为您是在第一次检查后卸载的。你的 msgbox 说什么?您如何以及何时调用您的代码?请添加一些详细信息以帮助我们。我看不到您如何转发滚动条的参数...
  • 我编辑了我的帖子,添加了 2 个屏幕截图和更详细的说明。它有帮助吗? (对不起,由于我是新手,我不确定您需要哪些信息。但这几乎就是我的代码的全部内容)。顺便说一句,感谢您的帮助!

标签: excel scrollbar userform vba


【解决方案1】:

问题是您的第二个子(curseur)不知道您从表单中分配了哪些值。在代码的最后一点结束后,变量被“销毁”。所以curcur()中的变量A、B、C没有价值。

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

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

【讨论】:

  • 再次感谢。但是某处仍然存在问题......我的子“curseur”的调用工作正常(我只需要写“curseur.curseur”,因为我的子在模块调用“curseur”中......我正在进步熟悉层次结构)。我仍在尝试,但如果您有任何想法,请提前致谢
  • 我让它在用户窗体中调用变量 A、B 和 C 作为变量。 Id est:“.Min = userform1.A”。这有意义吗?
  • 可能最好的方法是将您的子声明为Sub curseur(A as INteger, B as Integer, C as Integer) 并将调用更改为Call curseur(A, B, C)。在几乎所有情况下,最好使用参数调用而不是声明和使用全局变量。
猜你喜欢
  • 1970-01-01
  • 2013-07-02
  • 2011-11-13
  • 1970-01-01
相关资源
最近更新 更多