Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 3)

Автор: vaulin
Дата сообщения: 13.04.2010 11:01
TimoXa_Skot

Цитата:
так а почему в параметре label не выставить сразу Caption какой нужен...а по ходу меняй уже как вздумается:

да, я так и делал, только я не знаю как поменять это значение не по щелчку мыши, а как-то программно. Т.е. изначально у меня стоит Caption = Привет! а потом, после щелка мышью на форме по области Label, текст меняется на "Hello!!!"
Автор: Alexikit
Дата сообщения: 13.04.2010 11:21
vaulin

Так ведь Caption не меняется просто когда ему вздумается, должно быть какое-то условие для смены, Вы сейчас как условие задали щелчок мышью, задайте каое Вам надо условие, при его выполнении текст и изменится.
Автор: vaulin
Дата сообщения: 13.04.2010 11:51

Цитата:
Вы сейчас как условие задали щелчок мышью

Alexikit, а где я его задал? И как его поменять? Просто добавить условный оператор If что ли?
Автор: Alexikit
Дата сообщения: 13.04.2010 12:30
vaulin

Условие Вы задли сделав подпрограмму


Цитата:
Private Sub Label1_Click()
....
End Sub


а вот как менять, как Вам по смыслу надо, можно и if поставить. Ведь для того что бы текст изменился нужно, что бы что-то произошло во время работы программы. Вы можете щелкать по другой кнопке, а меняться будет Ваша надпись.
Автор: vaulin
Дата сообщения: 13.04.2010 13:38
Да, просто удалил эту подпрограмму для Label1, а содержимое перенес в подпрограмму для кнопки. Теперь надпись менятся после нажатия кнопки.
Теперь моя программка выглядит так:

Код: Private Sub CommandButton1_Click()
With Label1
.Caption = "Hello!!!"
End With
End Sub
Автор: Hugo121
Дата сообщения: 13.04.2010 14:37

Цитата:
Private Sub CommandButton1_Click()
With Label1
.Caption = "Hello!!!"
End With
End Sub


И впрямь, нет такой программы, которую нельзя сократить на строку (а то и на две )...
Автор: vaulin
Дата сообщения: 14.04.2010 06:49
А еще вопрос. Мне нужно на форме через TextBox организовать ввод чисел. Хочу сделать так, чтобы можно было вводить десятичные числа как с запятой, так и с точкой, т.е., например, "123,12" и "123.12". Но для этого нужно определять, есть ли в введенной строке запятая или нет, т.к. фун-ия Val не распознает запятой. Поиски в нете пока ничего не дали.
Спасибо заранее!


Добавлено:

Цитата:
И впрямь, нет такой программы, которую нельзя сократить на строку (а то и на две )...

да, Hugo121, можно еще сократить на строку:

Код: Private Sub CommandButton1_Click()
Label1.Caption = "Hello!!!"
End Sub
Автор: Dima White
Дата сообщения: 14.04.2010 07:27
Други памажите!
На листе исходных данных есть столбец со значениями, так же имеется 12 userform. Подскажите, как открыть форму в зависимости от значения в ячейке?
Автор: vaulin
Дата сообщения: 14.04.2010 08:05

Цитата:
Други памажите!
На листе исходных данных есть столбец со значениями, так же имеется 12 userform. Подскажите, как открыть форму в зависимости от значения в ячейке?

попробуй в управляющем модуле поставить условие типа:

Код: If Worksheets("Лист1").Range("номер_ячейки").Value ... Then
UserForm1.Show 'вызывается первая форма
Else ...
End If
Автор: Hugo121
Дата сообщения: 14.04.2010 08:19

Цитата:
Private Sub CommandButton1_Click()
Label1.Caption = "Hello!!!"
End Sub

... и даже на две! а еще на две сможешь?



Код: Private Sub CommandButton1_Click(): Label1.Caption = "Hello!!!": End Sub
Автор: vaulin
Дата сообщения: 14.04.2010 08:47

Цитата:
А еще вопрос. Мне нужно на форме через TextBox организовать ввод чисел. Хочу сделать так, чтобы можно было вводить десятичные числа как с запятой, так и с точкой, т.е., например, "123,12" и "123.12". Но для этого нужно определять, есть ли в введенной строке запятая или нет, т.к. фун-ия Val не распознает запятой. Поиски в нете пока ничего не дали.
Спасибо заранее!

Всё, нашел решение этой проблемы, оказывается всё очень просто:

Код: TextBox1.Value = Replace(TextBox1.Value, ",", ".") 'заменяю запятые на точки
считываемое_число_типа_Single = CSng(Val(TextBox1.Value))
Автор: SIgor33
Дата сообщения: 14.04.2010 09:39
возможно ли изменить ширину столбцов защищенного листа в excel программно не зная пароля?
Автор: vaulin
Дата сообщения: 14.04.2010 09:43

Цитата:
Private Sub CommandButton1_Click(): Label1.Caption = "Hello!!!": End Sub

Hugo121
работает! надо же, теперь всё в одной строчке
Автор: Dima White
Дата сообщения: 14.04.2010 09:58
Спасибо за ответы, А вот такя задача: если каждому значению комбобокса на главной форме соответствует своя форма, как вызвать соответствующую форму?
Автор: vaulin
Дата сообщения: 14.04.2010 10:05

Цитата:
если каждому значению комбобокса на главной форме соответствует своя форма, как вызвать соответствующую форму?

да, видимо, так же, только вместо "Worksheets("Лист1").Range("номер_ячейки").Value" в приведенных примерах поставить:
Код: ComboBox.Value
Автор: TimoXa_Skot
Дата сообщения: 15.04.2010 09:17
vaulin

Цитата:
Private Sub UserForm_Initialize()
  TextBox1.Value = "-0.15"    'задает начальное значение =-0,15 для TextBox1 на форме UserForm1
End Sub

В Вашем примере для UserForm, а так все прекрасно)
Автор: vaulin
Дата сообщения: 15.04.2010 09:52

Цитата:
В Вашем примере для UserForm, а так все прекрасно)

Если бы я для UserForm1 написал:

Код: Private Sub UserForm1_Initialize() ...
Автор: Drazhar
Дата сообщения: 16.04.2010 09:28
Глупый вопрос, но все же. Есть ли нативный способ дампить значения всех переменных в произвольный источник. Хочу прикрутить к error handler'у? Перебирать руками очень бы не хотелось
Автор: Sniper1
Дата сообщения: 19.04.2010 09:43
Ув. vlth и Maximus777 загляните в Личный Ящик.
Автор: Ilyansk
Дата сообщения: 20.04.2010 09:02
Уважаемое сообщество, скажите, а можно ли в форме с помощью кода VBA создать кнопку и назначить ЕЙ обработку события click c текстом some_my_sub some_global_variable ?
Кнопку-то я создаю
Код: controls.add "Forms.Commandbutton.1",name
Автор: NJCorp
Дата сообщения: 20.04.2010 10:40
а чем а чем не подходит.

Код: Private Sub name_Click()
...
End Sub
Автор: Ilyansk
Дата сообщения: 20.04.2010 11:13
да тем, что обработчик события ищется не по имени, а по какому-то внутреннему ID и эта связь (кнопка-обработчик) возникает при нажатии "View code" в контекстном меню, ну там еще в некоторых случаях. Тут важно что бы сам Эксель "породил" заголовок обработчика.
Я попробовал - не получается... Опять же, генерировать 400 sub'ов ручками.. Ой, а что такое "код события"
Во!! А если кнопку расположить на листе, а не в форме, то обработчик подхватывает событие нажатия. Чудеса..
Автор: NJCorp
Дата сообщения: 21.04.2010 08:35
цитата из книги Уокенбаха "Профессиональное программирование в Excel"

Цитата:

Листинг 28.5. Генерация диалогового окна UserForm, содержащего 100 кнопок

Пример данного раздела демонстрирует преимущества использования объекта D e s i g n e r
при создании диалоговых окон UserForm. В этом случае код добавляет 100 элементов управ-
ления CommandButton (которые соответствующим образом расположены и выровнены), уста-
наачивает значение свойства C a p t i o n для каждого элемента управления CammandButto:] и
создает 100 процедур обработки событий (для каждого элемента управления CommandButton).



Код: Sub AddlOOButtons()
Dim UFvbc As Object 'VBComponent
Dim CMod As Object 'Модуль кода
Dim ctl As Control
Dim cb As CommandButton
Dim n As Integer, с As Integer, r As Integer
Dim code As String
Set UFvbc = ThisWorkbook.VBProject.VBComponents("UserForml")
' Удаление всех элементов управления
For Each ctl In UFvbc.Designer.Controls
UFvbc.Designer.Controls.Remove ctl.Name
Next ctl
' Удаление всего кода VBA
UFvbc.CodeModule.DeleteLines 1, UFvbc.CodeModule.CountOfLines
' Добавление 100 элементов управления CommandButton
n = 1
For r = 1 To 10
For с = 1 To 10
Set cb = UFvbc.Designer.Controls.Add("Forms.CommandButton.1")
With cb
.Width = 22
.Height =22
.Left = {c * 26) - 16
.Top = {r * 26) - 16
.Caption = л
End With
' Добавление кола процедуры обработки события
With UFvbc.CodeModule
code = ""
code = code & "Private Sub CommandButton" & n & "_Click" & vbCr
code = code & "Msgbox ""This is CommandButton" & n & " " " " & vbcr
code = code & "End Sub"
. I n s e r t L i n e s .CountOfLines + 1, code
End With
n = n + 1
Next с
Next r
' VBA.UserForms.Add("UserFonnl").Show
End Sub


Процедура AddlOOButtons требует наличия диалогового окна, которое называется UserFonnl. Процедура начинает работу с удаления всех элементов управления на этом диало-
говом окне. Затем удаляется весь код в модуле кода данного диалогового окна. Для этого ис-
пользуется метод DeleteLin.es объекта CodeModule. Далее добавляются элементы управле-
ния CoinmandButton и процедуры обработки события для этих элементов управления с помо-
щью двух циклов For-Next. Процедуры обработки событий очень просты. Ниже приведен
пример одной из них (процедура задана для элемента управления CommandButtonl).


Код: P r i v a t e Sub CommandButtonl_Click()
MsgBox "Это CommandButtonl"
End Sub
Автор: Sniper1
Дата сообщения: 21.04.2010 10:00

Цитата:
цитата из книги Уокенбаха "Профессиональное программирование в Excel"


NJCorp а где есть эта книга? и загляните в Личный Ящик
Автор: NJCorp
Дата сообщения: 21.04.2010 10:20

Цитата:
а где есть эта книга?

У меня нету, ето процитировано с другого форума...
Автор: Ilyansk
Дата сообщения: 21.04.2010 13:27
Спасибо.
Это требует подключения, отключенной по умолчанию библиотеки Microsoft Visual Basic for Applications Extensibility
Так и сделал..
Автор: Levitant
Дата сообщения: 21.04.2010 16:37
Всем здравствуйте.
Подскажите пожалуйста, как можно узнать? Файл, который открывает макрос доступен для записи, или он кем-то уже занят и доступен только для чтения? Каким образом осуществить проверку.

В идеале хочу, что при условии, если файл доступен только для чтения, выводить MsgBox ()
Автор: filemoto
Дата сообщения: 22.04.2010 12:16
2all,
а как можно сменить иконки в файле *.xla?
Когда-то сделал в 2003 специальные надстройки,
а теперь не понимаю, как можо сменить иконки на панели?
Использую Excell2007.
Автор: Drazhar
Дата сообщения: 22.04.2010 12:34
Levitant
Попробуйте отключать обработчик ошибок, затем сохранение файла и проверка вида
if err.number<>0 then
msgbox("Защищен")
end if
Автор: Levitant
Дата сообщения: 22.04.2010 16:08
Drazhar
Блин, обработчик ошибок отключать не хотелось бы.
А нежели нет стандартной функции, что бы узнать режим доступа к файлу?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

Предыдущая тема: VS 2010


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.