Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Полоса прокрутки и ее связь с TextBox - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Полоса прокрутки и ее связь с TextBox (Макросы/Sub)
Полоса прокрутки и ее связь с TextBox
t330 Дата: Четверг, 18.04.2019, 16:30 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Всем привет!

У Уокенбаха есть пример мастера по расчету платежей по кредиту (см вложенный файл Loan.xlsm Файл весит 108кб поэтому пришлось заинуть в облако) [moder]Файл вложен в сообщение #4[/moder]

Я решил добавить в ЮзерФорму под названием FormMain на шаге №2 полосу ScrollBar (в коде ее название: sbPurchasePrice) (см вложенный рисунок), которая связана с полем "Возвращаемая сумма" (в коде ее название: tbPurchasePrice) так, что пользователь может не только руками сумму в этом поле набивать, но и менять сумму прокручивая эту полосу прокрутки sbPurchasePrice

Вот так я добавил полосу прокрутки в форму ForMain:
[vba]
Код


Private Sub sbPurchasePrice_Change()
With sbPurchasePrice
        .Min = 0
        .Max = 10000000
        .SmallChange = 1000
        .LargeChange = 10000
        tbPurchasePrice.Text = .Value
    End With
End Sub

[/vba]

Когда крутишь полосу прокрутки , сразу меняется и значение возвращаемой сумму в поле tbPurchasePrice

Теперь , хотелось бы сделать так, чтобы когда пользователь вручную забивает значение в поле tbPurchasePrice , чтобы в этот же момент ползунок в полосе прокрутки sbPurchasePrice тоже бы менял свое положение.

В коде формы FormMain я попытался решить задачу , добавив в изначальный код Уокенбаха вот эту закомментированную строку:

[vba]
Код


'STEP 2 EVENT HANDLERS
Private Sub tbPurchasePrice_Change()
   ' sbPurchasePrice.Value = Val(tbPurchasePrice.Text)
    Call UpdateLoanAmount
End Sub

[/vba]

Если ее раскомментировать, то Макрос выдает ошибку!

Хотя , например точно такой же метод работает во вложенном файле TestSB и никаких ошибок нет
[vba]
Код

Option Explicit

Private Sub OK_Click()
Unload Me
End Sub

Private Sub ScrollBar1_Change()
    With ScrollBar1
        .Min = 0
        .Max = 10000000
        .SmallChange = 1000
        .LargeChange = 10000
        TextBox1.Text = .Value
    End With
End Sub

Private Sub TextBox1_Change()
ScrollBar1.Value = Val(TextBox1.Text)
End Sub

[/vba]

Помогите пожалуйста понять в чем затык?
К сообщению приложен файл: 3450588.jpg (25.6 Kb) · TestSB.xlsm (16.5 Kb)
 
Ответить
СообщениеВсем привет!

У Уокенбаха есть пример мастера по расчету платежей по кредиту (см вложенный файл Loan.xlsm Файл весит 108кб поэтому пришлось заинуть в облако) [moder]Файл вложен в сообщение #4[/moder]

Я решил добавить в ЮзерФорму под названием FormMain на шаге №2 полосу ScrollBar (в коде ее название: sbPurchasePrice) (см вложенный рисунок), которая связана с полем "Возвращаемая сумма" (в коде ее название: tbPurchasePrice) так, что пользователь может не только руками сумму в этом поле набивать, но и менять сумму прокручивая эту полосу прокрутки sbPurchasePrice

Вот так я добавил полосу прокрутки в форму ForMain:
[vba]
Код


Private Sub sbPurchasePrice_Change()
With sbPurchasePrice
        .Min = 0
        .Max = 10000000
        .SmallChange = 1000
        .LargeChange = 10000
        tbPurchasePrice.Text = .Value
    End With
End Sub

[/vba]

Когда крутишь полосу прокрутки , сразу меняется и значение возвращаемой сумму в поле tbPurchasePrice

Теперь , хотелось бы сделать так, чтобы когда пользователь вручную забивает значение в поле tbPurchasePrice , чтобы в этот же момент ползунок в полосе прокрутки sbPurchasePrice тоже бы менял свое положение.

В коде формы FormMain я попытался решить задачу , добавив в изначальный код Уокенбаха вот эту закомментированную строку:

[vba]
Код


'STEP 2 EVENT HANDLERS
Private Sub tbPurchasePrice_Change()
   ' sbPurchasePrice.Value = Val(tbPurchasePrice.Text)
    Call UpdateLoanAmount
End Sub

[/vba]

Если ее раскомментировать, то Макрос выдает ошибку!

Хотя , например точно такой же метод работает во вложенном файле TestSB и никаких ошибок нет
[vba]
Код

Option Explicit

Private Sub OK_Click()
Unload Me
End Sub

Private Sub ScrollBar1_Change()
    With ScrollBar1
        .Min = 0
        .Max = 10000000
        .SmallChange = 1000
        .LargeChange = 10000
        TextBox1.Text = .Value
    End With
End Sub

Private Sub TextBox1_Change()
ScrollBar1.Value = Val(TextBox1.Text)
End Sub

[/vba]

Помогите пожалуйста понять в чем затык?

Автор - t330
Дата добавления - 18.04.2019 в 16:30
_Boroda_ Дата: Четверг, 18.04.2019, 16:44 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16672
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
ПЕресохраните файл из ссилки в xlsb и положите сюда


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПЕресохраните файл из ссилки в xlsb и положите сюда

Автор - _Boroda_
Дата добавления - 18.04.2019 в 16:44
t330 Дата: Четверг, 18.04.2019, 16:57 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
ПЕресохраните файл из ссилки в xlsb и положите сюда


xlsb получился еще на 2 КБ больше, чем xlsm
 
Ответить
Сообщение
ПЕресохраните файл из ссилки в xlsb и положите сюда


xlsb получился еще на 2 КБ больше, чем xlsm

Автор - t330
Дата добавления - 18.04.2019 в 16:57
_Boroda_ Дата: Четверг, 18.04.2019, 17:03 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16672
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Зачем Вам там второй лист?
Убил его, ровно 100 получилось. Прикладываю без изменений. Кстати, для этого вопроса и формы не все нужны

А ответ прост - у Вас максимум у полосы прокрутки какой? 30 с чем-то тысяч. Как только руками вводите больше - не съедает
К сообщению приложен файл: loan.xlsb (97.8 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЗачем Вам там второй лист?
Убил его, ровно 100 получилось. Прикладываю без изменений. Кстати, для этого вопроса и формы не все нужны

А ответ прост - у Вас максимум у полосы прокрутки какой? 30 с чем-то тысяч. Как только руками вводите больше - не съедает

Автор - _Boroda_
Дата добавления - 18.04.2019 в 17:03
t330 Дата: Четверг, 18.04.2019, 17:18 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
А ответ прост - у Вас максимум у полосы прокрутки какой? 30 с чем-то тысяч.


А где написано, что максимум для полосы прокрутки 30тыс? Это какая -то программная константа Экселя?
В файле TestSB я ввожу и 5 000 000 и полоса прокрутки не ругается.
 
Ответить
Сообщение
А ответ прост - у Вас максимум у полосы прокрутки какой? 30 с чем-то тысяч.


А где написано, что максимум для полосы прокрутки 30тыс? Это какая -то программная константа Экселя?
В файле TestSB я ввожу и 5 000 000 и полоса прокрутки не ругается.

Автор - t330
Дата добавления - 18.04.2019 в 17:18
_Boroda_ Дата: Четверг, 18.04.2019, 17:21 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16672
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
К сообщению приложен файл: 2616497.gif (20.8 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение

Автор - _Boroda_
Дата добавления - 18.04.2019 в 17:21
t330 Дата: Четверг, 18.04.2019, 17:34 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Все понял,спасибо:)
 
Ответить
СообщениеВсе понял,спасибо:)

Автор - t330
Дата добавления - 18.04.2019 в 17:34
t330 Дата: Четверг, 18.04.2019, 17:35 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Удивительно, что в файле TestSB максимальнео значение для полосы прокрутки тоже 32 тыс, но это никак не смущает Эксель когда вводишь больше 32 тыс...
 
Ответить
СообщениеУдивительно, что в файле TestSB максимальнео значение для полосы прокрутки тоже 32 тыс, но это никак не смущает Эксель когда вводишь больше 32 тыс...

Автор - t330
Дата добавления - 18.04.2019 в 17:35
RAN Дата: Четверг, 18.04.2019, 18:59 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А вы в этом файле введите 10000000 и 10000001.
Может тогда тайное станет явным?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеА вы в этом файле введите 10000000 и 10000001.
Может тогда тайное станет явным?

Автор - RAN
Дата добавления - 18.04.2019 в 18:59
t330 Дата: Четверг, 18.04.2019, 21:36 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
А вы в этом файле введите 10000000 и 10000001.
Может тогда тайное станет явным?


Нет не станет.
В файле TestSB так же как и в Уокенбаховском файле стоит максимальное значение для СкроллБара
32000 (см скрин) и только в самой процедуре прописано, что максимум может быть до 10 000000
[vba]
Код
ScrollBar1.Max = 10000000
[/vba]

Понятно, что если ввести 10 000 001 - Эксель должен ругнуться , но не понятно почему он не ругается когда вводишь цифру более 32000 и менее 10 000 000.

А Уокенбаховский файл ругается в любом случае
К сообщению приложен файл: 1881341.jpg (72.5 Kb)


Сообщение отредактировал t330 - Четверг, 18.04.2019, 21:37
 
Ответить
Сообщение
А вы в этом файле введите 10000000 и 10000001.
Может тогда тайное станет явным?


Нет не станет.
В файле TestSB так же как и в Уокенбаховском файле стоит максимальное значение для СкроллБара
32000 (см скрин) и только в самой процедуре прописано, что максимум может быть до 10 000000
[vba]
Код
ScrollBar1.Max = 10000000
[/vba]

Понятно, что если ввести 10 000 001 - Эксель должен ругнуться , но не понятно почему он не ругается когда вводишь цифру более 32000 и менее 10 000 000.

А Уокенбаховский файл ругается в любом случае

Автор - t330
Дата добавления - 18.04.2019 в 21:36
t330 Дата: Пятница, 19.04.2019, 17:35 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
А ответ прост - у Вас максимум у полосы прокрутки какой?


Скажите пожалуйста, можно ли SmallChange у ScrollBar сделать меньше единицы?
Например, если нужно с помощью скролл бара менять процент ставки по 0,5% , а не по 1% сразу?
 
Ответить
Сообщение
А ответ прост - у Вас максимум у полосы прокрутки какой?


Скажите пожалуйста, можно ли SmallChange у ScrollBar сделать меньше единицы?
Например, если нужно с помощью скролл бара менять процент ставки по 0,5% , а не по 1% сразу?

Автор - t330
Дата добавления - 19.04.2019 в 17:35
RAN Дата: Пятница, 19.04.2019, 17:56 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
можно ли SmallChange у ScrollBar сделать меньше единицы?

Можно. При условии, что это будет целое число.
Цитата
object.SmallChange [= Long]

А для вашего случая - сделать шаг 5 и значение поделить на 10.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
можно ли SmallChange у ScrollBar сделать меньше единицы?

Можно. При условии, что это будет целое число.
Цитата
object.SmallChange [= Long]

А для вашего случая - сделать шаг 5 и значение поделить на 10.

Автор - RAN
Дата добавления - 19.04.2019 в 17:56
t330 Дата: Пятница, 19.04.2019, 19:01 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
object.SmallChange [= Long]


Не понял.
Нужно где-то прописать эту строку в коде?

Во вложенном файле я попытался присвоить .SmallChange = 5 / 10 и не сработало....

[vba]
Код


Private Sub sbRate_Change()
    With sbRate
        .Min = 0
        .Max = 100
        .SmallChange = 5 / 10
        .LargeChange = 1
        tbRate.Text = .Value
    End With
End Sub

[/vba]
К сообщению приложен файл: 7113091.xlsm (32.3 Kb)
 
Ответить
Сообщение
object.SmallChange [= Long]


Не понял.
Нужно где-то прописать эту строку в коде?

Во вложенном файле я попытался присвоить .SmallChange = 5 / 10 и не сработало....

[vba]
Код


Private Sub sbRate_Change()
    With sbRate
        .Min = 0
        .Max = 100
        .SmallChange = 5 / 10
        .LargeChange = 1
        tbRate.Text = .Value
    End With
End Sub

[/vba]

Автор - t330
Дата добавления - 19.04.2019 в 19:01
RAN Дата: Пятница, 19.04.2019, 19:22 | Сообщение № 14
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Нужно где-то прописать эту строку в коде?

Какую "эту строку"?
И что, по вашему 5/10 это целое число?
Я описал 2 действия, которые нужно выполнить.
Вы выполнили одно, и то неверно.
[vba]
Код
.SmallChange = 5
....
tbRate.Text = .Value/10
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Нужно где-то прописать эту строку в коде?

Какую "эту строку"?
И что, по вашему 5/10 это целое число?
Я описал 2 действия, которые нужно выполнить.
Вы выполнили одно, и то неверно.
[vba]
Код
.SmallChange = 5
....
tbRate.Text = .Value/10
[/vba]

Автор - RAN
Дата добавления - 19.04.2019 в 19:22
t330 Дата: Пятница, 19.04.2019, 23:39 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
Вы выполнили одно, и то неверно.


Спасибо, теперь понял, что вы советовали сделать.

Сделал, но все равно не работает:

[vba]
Код

Private Sub sbRate_Change()
    With sbRate
        .Min = 0
        .Max = 1000
        .SmallChange = 5
        .LargeChange = 10
        tbRate.Text = .Value / 10
    End With
End Sub
[/vba]
 
Ответить
Сообщение
Вы выполнили одно, и то неверно.


Спасибо, теперь понял, что вы советовали сделать.

Сделал, но все равно не работает:

[vba]
Код

Private Sub sbRate_Change()
    With sbRate
        .Min = 0
        .Max = 1000
        .SmallChange = 5
        .LargeChange = 10
        tbRate.Text = .Value / 10
    End With
End Sub
[/vba]

Автор - t330
Дата добавления - 19.04.2019 в 23:39
t330 Дата: Суббота, 20.04.2019, 03:00 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 147
Репутация: 0 ±
Замечаний: 20% ±

Excel 2016
В общем, нашел в чем затык.

Надо было также и в текстбоксе умножить на 10

[vba]
Код

Private Sub tbRate_Change()
sbRate.Value = Val(tbRate.Text * 10)
End Sub
[/vba]
 
Ответить
СообщениеВ общем, нашел в чем затык.

Надо было также и в текстбоксе умножить на 10

[vba]
Код

Private Sub tbRate_Change()
sbRate.Value = Val(tbRate.Text * 10)
End Sub
[/vba]

Автор - t330
Дата добавления - 20.04.2019 в 03:00
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Полоса прокрутки и ее связь с TextBox (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!