2016-05-23 4 views
1

Будучи новым для VBA, я пытаюсь добавить настраиваемую полосу прокрутки на свой лист. По индивидуальному подходу я имею в виду, что я могу решить минимальное значение, максимальное значение и небольшой выбор полосы прокрутки с помощью Userform, где я задал нужные значения. До сих пор я хранила значения в публичных переменных следующие: screen of the UserformVBA Настроить полосу прокрутки с переменными 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.» с A, B и C в УСПЕШНОЙ полосе прокрутки код, указанных с помощью Excel:

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 ("Валидатор"). В принципе, моя идея состоит в том, чтобы выполнить эти 3 коробки с заранее определенными значениями (мин, макс и ...) и сохранить их в общедоступных переменных. На данный момент я просто запускаю свой код со вкладки разработки с помощью F5.

Я впервые запускаю пользовательскую форму. После того, как текстовые поля выполнены и CommandButton нажата, MessageBox возвращает значения, содержащиеся в переменных A, B и C. Затем я хочу использовать их для определения моей полосы прокрутки. Когда я нажимаю F5, полоса прокрутки показывает себя (см. Снимок экрана), но если я перейду к свойствам, все значения будут установлены на ноль. Кажется, я не называю переменные A, B, C правильным способом: scrollbar properties

Заранее за вашу помощь.

+0

Что именно происходит и чего не хватает? У вас есть одна форма с несколькими текстовыми полями? Потому что вы выгружаете после первой проверки. что говорит ваш msgbox? Как и когда вы вызываете свой код? Пожалуйста, добавьте некоторые детали, чтобы помочь нам помочь. Я не вижу, как вы перенаправляете параметры для ваших полос прокрутки ... – Jochen

+0

Я редактировал свой пост, добавляя 2 скриншота и более подробные объяснения. Помогает ли это? (Извините, так как я новичок в этом, я не уверен, какая информация вам нужна. Но это почти все, что касается моего кода здесь). Спасибо за вашу помощь. – beckq

ответ

0

Проблема в том, что ваш второй субордист не знает, какие значения вы назначили из своей формы. Переменные «уничтожаются» после завершения последнего бит вашего кода. Поэтому переменные A, B, C в curseur() не имеют значения.

Если вы добавите вызов процедуры в конец вашего 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 
+0

Еще раз спасибо. Но где-то еще где-то есть ... Звонок моего подпрокулога работает отлично (мне просто нужно было написать «curseur.curseur», так как мой Sub находится в модуле «Проклятье» ... Я прогрессирую знакомы с иерархией). Я все еще нахожусь, но если у вас есть идея, спасибо заранее – beckq

+0

У меня была работа, вызывающая переменные A, B и C в качестве переменных из пользовательской формы. Id est: ".Min = userform1.A". Чувствует ли это? – beckq

+0

Возможно, лучшим было бы объявить ваш sub как 'Sub curseur (A как INteger, B как Integer, C как Integer)' и изменить вызов 'Call curseur (A, B, C)'. В почти каждой ситуации лучше вызывать с параметрами вместо объявления и использования глобальных переменных. – Jochen