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

Вход

Регистрация

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

 

= Мир MS Excel/Советы и рекомендации по создаваемой программе. - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Советы и рекомендации по создаваемой программе. (Макросы Sub)
Советы и рекомендации по создаваемой программе.
Stormy Дата: Пятница, 07.02.2014, 13:31 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Доброго времени суток, уважаемые форумчане.
В первую очередь хочу выразить благодарность создателям и активным пользователям за данный проект. Учиться самому можно, но сложно. Порой без совета просто не обойтись.
Очень надеюсь, что данная тема не противоречит правилам форума и в дальнейшем будет пособием для начинающих пользователей.
Теперь к сути:
Мне дали задание написать программу для расчета зарплаты 6 цехов. Раньше все это было сделано на таблицах Excel и более менее все работало, сейчас появились дополнительные критерии и поэтому возникла мысль убрать несколько книг и сделать программу.
Имеющиеся данные: Есть сторонняя база на Firebird, тетради/бланки заполняемые рабочими.
Сделал подключение к базе данных, используя MSQuery , данные заполняются на отдельный лист - это позволяет избежать подвисания в момент обновления данных с базой.
По совету nilem, делаю форму Ввода данных непосредственно в VBA.
Столкнулся с проблемой написание в Caption названия на турецком. На ум пришло 3 решения.
1) Суппорт сайт Майкрософта рекомендует установить dll для Unicode и использовать Формы с него.
2) При поиске в гугле нашел советы по использованию графических изображений с нужным шрифтом
3) Подмена букв Unicode значениями. Вариант решения ниже

[vba]
Код
Private Sub UserForm_Initialize()

     Me.MultiPage.Pages(0).Label1.Caption = ChrW(304) & "cra" & ChrW(231) & ChrW(305)
    
End Sub
[/vba]


Место для рекламы.
 
Ответить
СообщениеДоброго времени суток, уважаемые форумчане.
В первую очередь хочу выразить благодарность создателям и активным пользователям за данный проект. Учиться самому можно, но сложно. Порой без совета просто не обойтись.
Очень надеюсь, что данная тема не противоречит правилам форума и в дальнейшем будет пособием для начинающих пользователей.
Теперь к сути:
Мне дали задание написать программу для расчета зарплаты 6 цехов. Раньше все это было сделано на таблицах Excel и более менее все работало, сейчас появились дополнительные критерии и поэтому возникла мысль убрать несколько книг и сделать программу.
Имеющиеся данные: Есть сторонняя база на Firebird, тетради/бланки заполняемые рабочими.
Сделал подключение к базе данных, используя MSQuery , данные заполняются на отдельный лист - это позволяет избежать подвисания в момент обновления данных с базой.
По совету nilem, делаю форму Ввода данных непосредственно в VBA.
Столкнулся с проблемой написание в Caption названия на турецком. На ум пришло 3 решения.
1) Суппорт сайт Майкрософта рекомендует установить dll для Unicode и использовать Формы с него.
2) При поиске в гугле нашел советы по использованию графических изображений с нужным шрифтом
3) Подмена букв Unicode значениями. Вариант решения ниже

[vba]
Код
Private Sub UserForm_Initialize()

     Me.MultiPage.Pages(0).Label1.Caption = ChrW(304) & "cra" & ChrW(231) & ChrW(305)
    
End Sub
[/vba]

Автор - Stormy
Дата добавления - 07.02.2014 в 13:31
Stormy Дата: Пятница, 07.02.2014, 16:43 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Код
=ВПР(A38;ВЫБОР({1;2};F$7:F$32;E$7:E$32);2;0)

Вот и первый камень о который споткнулся. Как написать эту формулу в VBA ?

С простой ВПР вроде разобрался

[vba]
Код
Me.MultiPage.Pages(0).Label7.Caption = "=VLOOKUP($E$19&$F$19,Таблица,2,0)"
[/vba]


Место для рекламы.
 
Ответить
Сообщение
Код
=ВПР(A38;ВЫБОР({1;2};F$7:F$32;E$7:E$32);2;0)

Вот и первый камень о который споткнулся. Как написать эту формулу в VBA ?

С простой ВПР вроде разобрался

[vba]
Код
Me.MultiPage.Pages(0).Label7.Caption = "=VLOOKUP($E$19&$F$19,Таблица,2,0)"
[/vba]

Автор - Stormy
Дата добавления - 07.02.2014 в 16:43
SkyPro Дата: Пятница, 07.02.2014, 16:56 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub bb()
Dim ar()
ar = Array(1, 2)
With Application.WorksheetFunction
     Me.MultiPage.Pages(0).Label7.Caption = .VLookup([a38], .Choose(ar, [F$7:F$32], [E$7:E$32]), 2, 0)
End With
End Sub
[/vba]
Не проверял, но должно работать. Только укажите лист для диапазонов.


skypro1111@gmail.com
 
Ответить
Сообщение[vba]
Код
Sub bb()
Dim ar()
ar = Array(1, 2)
With Application.WorksheetFunction
     Me.MultiPage.Pages(0).Label7.Caption = .VLookup([a38], .Choose(ar, [F$7:F$32], [E$7:E$32]), 2, 0)
End With
End Sub
[/vba]
Не проверял, но должно работать. Только укажите лист для диапазонов.

Автор - SkyPro
Дата добавления - 07.02.2014 в 16:56
Stormy Дата: Пятница, 07.02.2014, 17:02 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
а VBA именованные диапазоны из Excel не принимает?


Место для рекламы.
 
Ответить
Сообщениеа VBA именованные диапазоны из Excel не принимает?

Автор - Stormy
Дата добавления - 07.02.2014 в 17:02
SkyPro Дата: Пятница, 07.02.2014, 17:05 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
А в поиске задать текст вашего поста не вариант? :)

[vba]
Код
range("имя_диапазона")
[/vba]


skypro1111@gmail.com
 
Ответить
СообщениеА в поиске задать текст вашего поста не вариант? :)

[vba]
Код
range("имя_диапазона")
[/vba]

Автор - SkyPro
Дата добавления - 07.02.2014 в 17:05
Stormy Дата: Пятница, 07.02.2014, 17:37 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Dim Formula_Shirket, Litord_of_Base, ItemName_of_Base, ar, sif, lit()
   ar = Array(1, 2)
   sif = Worksheets("Proqram2").Range("sif")
   lit = Worksheets("Proqram2").Range("lit")
   Litord_of_Base = Worksheets("Base_of_DS").Range("K4:K50")
   ItemName_of_Base = Worksheets("Base_of_DS").Range("F4:F50")
      
     With Application.WorksheetFunction
     Me.MultiPage.Pages(0).Label18.Caption = .VLookup([lit&sif], .Choose(ar, [Litord_of_Base], [ItemName_of_Base]), 2, 0)
End With
[/vba]
Run time error "13"
Type mismatch
вот такую ошибку выдает. В какую сторону копать?


Место для рекламы.
 
Ответить
Сообщение[vba]
Код
Dim Formula_Shirket, Litord_of_Base, ItemName_of_Base, ar, sif, lit()
   ar = Array(1, 2)
   sif = Worksheets("Proqram2").Range("sif")
   lit = Worksheets("Proqram2").Range("lit")
   Litord_of_Base = Worksheets("Base_of_DS").Range("K4:K50")
   ItemName_of_Base = Worksheets("Base_of_DS").Range("F4:F50")
      
     With Application.WorksheetFunction
     Me.MultiPage.Pages(0).Label18.Caption = .VLookup([lit&sif], .Choose(ar, [Litord_of_Base], [ItemName_of_Base]), 2, 0)
End With
[/vba]
Run time error "13"
Type mismatch
вот такую ошибку выдает. В какую сторону копать?

Автор - Stormy
Дата добавления - 07.02.2014 в 17:37
SkyPro Дата: Пятница, 07.02.2014, 17:40 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
1. Уберите [] в фаормуле, если указываете переменные.
2. Что это? [lit&sif]
3. Прикладывайте файл. Гадать на какой строке и почему выдает ошибку - не интересно.

ЗЫ: Без файла я перестану отвечать в этой теме.


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Пятница, 07.02.2014, 17:42
 
Ответить
Сообщение1. Уберите [] в фаормуле, если указываете переменные.
2. Что это? [lit&sif]
3. Прикладывайте файл. Гадать на какой строке и почему выдает ошибку - не интересно.

ЗЫ: Без файла я перестану отвечать в этой теме.

Автор - SkyPro
Дата добавления - 07.02.2014 в 17:40
Stormy Дата: Пятница, 07.02.2014, 17:46 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Вот файл
К сообщению приложен файл: 9339544.rar (39.6 Kb)


Место для рекламы.
 
Ответить
СообщениеВот файл

Автор - Stormy
Дата добавления - 07.02.2014 в 17:46
Stormy Дата: Пятница, 07.02.2014, 17:49 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Что это? [lit&sif]

Поиск в Base_of_DS идет по правому столбцу.
lit - это ячейка Е19 и sif это ячейка F19 на листе Proqram2


Место для рекламы.
 
Ответить
Сообщение
Что это? [lit&sif]

Поиск в Base_of_DS идет по правому столбцу.
lit - это ячейка Е19 и sif это ячейка F19 на листе Proqram2

Автор - Stormy
Дата добавления - 07.02.2014 в 17:49
SkyPro Дата: Пятница, 07.02.2014, 17:54 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
И какую из этих ячеек будет искать ВПР ? Вот её и укажите.


skypro1111@gmail.com
 
Ответить
СообщениеИ какую из этих ячеек будет искать ВПР ? Вот её и укажите.

Автор - SkyPro
Дата добавления - 07.02.2014 в 17:54
Stormy Дата: Пятница, 07.02.2014, 17:57 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
И какую из этих ячеек будет искать ВПР ? Вот её и укажите.

В Excel-e формула выглядела таким образом
[vba]
Код
=ВПР(E19&F19;ВЫБОР({1;2};Litord_of_Base;CompanyName_of_Base);2;ЛОЖЬ )
[/vba]
E19 - MT
F19 - 17401
Поиск идет по МТ17401 , в правом столбце указаны данные как раз в таком формате. Искать нужно по объединенному результату двух ячеек.


Место для рекламы.

Сообщение отредактировал Stormy - Пятница, 07.02.2014, 17:58
 
Ответить
Сообщение
И какую из этих ячеек будет искать ВПР ? Вот её и укажите.

В Excel-e формула выглядела таким образом
[vba]
Код
=ВПР(E19&F19;ВЫБОР({1;2};Litord_of_Base;CompanyName_of_Base);2;ЛОЖЬ )
[/vba]
E19 - MT
F19 - 17401
Поиск идет по МТ17401 , в правом столбце указаны данные как раз в таком формате. Искать нужно по объединенному результату двух ячеек.

Автор - Stormy
Дата добавления - 07.02.2014 в 17:57
SkyPro Дата: Пятница, 07.02.2014, 18:05 | Сообщение № 12
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
[vba]
Код

Dim fnd$
fnd = Worksheets("Proqram2").Range("sif") & Worksheets("Proqram2").Range("lit")
With Application.WorksheetFunction
      Me.MultiPage.Pages(0).Label18.Caption = .VLookup(fnd , .Choose(ar, Litord_of_Base, ItemName_of_Base), 2, 0)
End With
[/vba]

или
[vba]
Код
With Application.WorksheetFunction
      Me.MultiPage.Pages(0).Label18.Caption = .VLookup(sif & lit, .Choose(ar, Litord_of_Base, ItemName_of_Base), 2, 0)
End With
[/vba]


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Пятница, 07.02.2014, 18:06
 
Ответить
Сообщение[vba]
Код

Dim fnd$
fnd = Worksheets("Proqram2").Range("sif") & Worksheets("Proqram2").Range("lit")
With Application.WorksheetFunction
      Me.MultiPage.Pages(0).Label18.Caption = .VLookup(fnd , .Choose(ar, Litord_of_Base, ItemName_of_Base), 2, 0)
End With
[/vba]

или
[vba]
Код
With Application.WorksheetFunction
      Me.MultiPage.Pages(0).Label18.Caption = .VLookup(sif & lit, .Choose(ar, Litord_of_Base, ItemName_of_Base), 2, 0)
End With
[/vba]

Автор - SkyPro
Дата добавления - 07.02.2014 в 18:05
Stormy Дата: Пятница, 07.02.2014, 18:11 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Тоже самое выдает :( Хотя нет. Выделяет этот знак & амперсанду и выдает ошибку без номера.
Наверное проще решить задачу через ячейку в Экзель. Получить там данные , а оттуда забрать в лейбл.


Место для рекламы.

Сообщение отредактировал Stormy - Пятница, 07.02.2014, 18:14
 
Ответить
СообщениеТоже самое выдает :( Хотя нет. Выделяет этот знак & амперсанду и выдает ошибку без номера.
Наверное проще решить задачу через ячейку в Экзель. Получить там данные , а оттуда забрать в лейбл.

Автор - Stormy
Дата добавления - 07.02.2014 в 18:11
SkyPro Дата: Пятница, 07.02.2014, 18:24 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Да, оба варианта не будут работать. Передавайте значения диапазонов, а не сами диапазоны.

Или напишите функцию, которая будет делать то, что вы хотите.
Если честно, то я не совсем понимаю, что именно..


skypro1111@gmail.com
 
Ответить
СообщениеДа, оба варианта не будут работать. Передавайте значения диапазонов, а не сами диапазоны.

Или напишите функцию, которая будет делать то, что вы хотите.
Если честно, то я не совсем понимаю, что именно..

Автор - SkyPro
Дата добавления - 07.02.2014 в 18:24
Stormy Дата: Пятница, 07.02.2014, 18:35 | Сообщение № 15
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Проблема в том, что диапазон будет меняться , поэтому логичнее использовать именованный, дабы не править каждый раз.
Если честно, то я не совсем понимаю, что именно..

На листе Base_of_DS есть столбец LITORD (К5:К100) и COMPANY_NAMEE (F5:F100)
На листе Proqram2 есть две ячейки E19 - lit и F19 - sif .
Мне нужно, объединить ячейки E19 - lit и F19 - sif и при помощи функций ВПР и ВЫБОР , обратившись к столбцу LITORD получить данные из столбца COMPANY_NAME . В самом Excele это получается без проблем ( для примера гляньте в ячейку G19 на листе Proqram2)


Место для рекламы.
 
Ответить
СообщениеПроблема в том, что диапазон будет меняться , поэтому логичнее использовать именованный, дабы не править каждый раз.
Если честно, то я не совсем понимаю, что именно..

На листе Base_of_DS есть столбец LITORD (К5:К100) и COMPANY_NAMEE (F5:F100)
На листе Proqram2 есть две ячейки E19 - lit и F19 - sif .
Мне нужно, объединить ячейки E19 - lit и F19 - sif и при помощи функций ВПР и ВЫБОР , обратившись к столбцу LITORD получить данные из столбца COMPANY_NAME . В самом Excele это получается без проблем ( для примера гляньте в ячейку G19 на листе Proqram2)

Автор - Stormy
Дата добавления - 07.02.2014 в 18:35
SkyPro Дата: Пятница, 07.02.2014, 18:53 | Сообщение № 16
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Попробуйте так:
[vba]
Код
Dim fnd$
fnd = Worksheets("Proqram2").Range("sif").Value & Worksheets("Proqram2").Range("lit").Value
With Application.WorksheetFunction
     Me.MultiPage.Pages(0).Label18.Caption = .VLookup(fnd , .Choose(ar, Litord_of_Base, ItemName_of_Base), 2, 0)
End With
[/vba]


skypro1111@gmail.com
 
Ответить
СообщениеПопробуйте так:
[vba]
Код
Dim fnd$
fnd = Worksheets("Proqram2").Range("sif").Value & Worksheets("Proqram2").Range("lit").Value
With Application.WorksheetFunction
     Me.MultiPage.Pages(0).Label18.Caption = .VLookup(fnd , .Choose(ar, Litord_of_Base, ItemName_of_Base), 2, 0)
End With
[/vba]

Автор - SkyPro
Дата добавления - 07.02.2014 в 18:53
Stormy Дата: Пятница, 07.02.2014, 18:58 | Сообщение № 17
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
Невозможно получить свойство класса Worksheet Function

Насколько правильно использовать это событие для обновления label ?

[vba]
Код
Private Sub ComboBox3_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Me.MultiPage.Pages(0).Label7.Caption = Worksheets("Proqram2").Cells(19, 15)
End Sub
[/vba]
В идеале хотелось бы, чтобы сразу после выбора строки вComboBox происходило обновление в Label , но как это сделать не нашел.


Место для рекламы.

Сообщение отредактировал Stormy - Пятница, 07.02.2014, 20:10
 
Ответить
СообщениеНевозможно получить свойство класса Worksheet Function

Насколько правильно использовать это событие для обновления label ?

[vba]
Код
Private Sub ComboBox3_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Me.MultiPage.Pages(0).Label7.Caption = Worksheets("Proqram2").Cells(19, 15)
End Sub
[/vba]
В идеале хотелось бы, чтобы сразу после выбора строки вComboBox происходило обновление в Label , но как это сделать не нашел.

Автор - Stormy
Дата добавления - 07.02.2014 в 18:58
nilem Дата: Суббота, 08.02.2014, 11:33 | Сообщение № 18
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Run time error "13"
Type mismatch
возникает из-за Dim lit() - скобочки уберите. Вообще все уберите из Private Sub UserForm_Initialize(). И попробуйте так
[vba]
Код
Private Sub TextBox2_Change()
Call FillLabel18
End Sub

Private Sub ComboBox2_Change()
Call FillLabel18
End Sub

Private Sub FillLabel18()
Dim s As String, r As Range
s = Me.ComboBox2 & Me.TextBox2
With Sheets("Base_of_DS").ListObjects(1)
     Set r = .ListColumns("LITORD").Range.Find(s, lookat:=xlWhole)
     If Not r Is Nothing Then
         Me.Label18.Caption = r(1, -4).Value
     Else
         Me.Label18.Caption = "no data"
     End If
End With
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеRun time error "13"
Type mismatch
возникает из-за Dim lit() - скобочки уберите. Вообще все уберите из Private Sub UserForm_Initialize(). И попробуйте так
[vba]
Код
Private Sub TextBox2_Change()
Call FillLabel18
End Sub

Private Sub ComboBox2_Change()
Call FillLabel18
End Sub

Private Sub FillLabel18()
Dim s As String, r As Range
s = Me.ComboBox2 & Me.TextBox2
With Sheets("Base_of_DS").ListObjects(1)
     Set r = .ListColumns("LITORD").Range.Find(s, lookat:=xlWhole)
     If Not r Is Nothing Then
         Me.Label18.Caption = r(1, -4).Value
     Else
         Me.Label18.Caption = "no data"
     End If
End With
End Sub
[/vba]

Автор - nilem
Дата добавления - 08.02.2014 в 11:33
Stormy Дата: Вторник, 11.02.2014, 14:55 | Сообщение № 19
Группа: Проверенные
Ранг: Обитатель
Сообщений: 357
Репутация: 12 ±
Замечаний: 0% ±

Excel 2010
nilem,
Спасибо. Этот код планирую использовать в дальнейшем, когда дойду до оптимизации. Сейчас все работает на вычисление в ячейке.

Немного заплутал в логических цепочках.
Есть код, который выполняется при определенном условии.

[vba]
Код
If Worksheets("Proqram2").Cells(19, 15) = 1 Then

Me.MultiPage.Pages(0).TextBox3.Locked = True
Me.MultiPage.Pages(0).TextBox3.Enabled = False
Me.MultiPage.Pages(0).TextBox4.Locked = True
Me.MultiPage.Pages(0).TextBox4.Enabled = False
Me.MultiPage.Pages(0).Label10.Caption = "Тест1"
[/vba]
А как правильно написать, что при втором условии , выполнялся другой код, при третьем - третий и т.д. ?
[vba]
Код
If Worksheets("Proqram2").Cells(19, 15) = 2 Then

Me.MultiPage.Pages(0).TextBox3.Locked = True
Me.MultiPage.Pages(0).TextBox3.Enabled = False
Me.MultiPage.Pages(0).TextBox4.Locked = True
Me.MultiPage.Pages(0).TextBox4.Enabled = False
Me.MultiPage.Pages(0).Label10.Caption = "Тест2"
[/vba]
[vba]
Код
If Worksheets("Proqram2").Cells(19, 15) = 3 Then

Me.MultiPage.Pages(0).TextBox3.Locked = True
Me.MultiPage.Pages(0).TextBox3.Enabled = False
Me.MultiPage.Pages(0).TextBox4.Locked = True
Me.MultiPage.Pages(0).TextBox4.Enabled = False
Me.MultiPage.Pages(0).Label10.Caption = "Третий вариант"
[/vba]
Дублировать поочередно все условия и необходимые действия или можно как-то более умно поступить?


Место для рекламы.
 
Ответить
Сообщениеnilem,
Спасибо. Этот код планирую использовать в дальнейшем, когда дойду до оптимизации. Сейчас все работает на вычисление в ячейке.

Немного заплутал в логических цепочках.
Есть код, который выполняется при определенном условии.

[vba]
Код
If Worksheets("Proqram2").Cells(19, 15) = 1 Then

Me.MultiPage.Pages(0).TextBox3.Locked = True
Me.MultiPage.Pages(0).TextBox3.Enabled = False
Me.MultiPage.Pages(0).TextBox4.Locked = True
Me.MultiPage.Pages(0).TextBox4.Enabled = False
Me.MultiPage.Pages(0).Label10.Caption = "Тест1"
[/vba]
А как правильно написать, что при втором условии , выполнялся другой код, при третьем - третий и т.д. ?
[vba]
Код
If Worksheets("Proqram2").Cells(19, 15) = 2 Then

Me.MultiPage.Pages(0).TextBox3.Locked = True
Me.MultiPage.Pages(0).TextBox3.Enabled = False
Me.MultiPage.Pages(0).TextBox4.Locked = True
Me.MultiPage.Pages(0).TextBox4.Enabled = False
Me.MultiPage.Pages(0).Label10.Caption = "Тест2"
[/vba]
[vba]
Код
If Worksheets("Proqram2").Cells(19, 15) = 3 Then

Me.MultiPage.Pages(0).TextBox3.Locked = True
Me.MultiPage.Pages(0).TextBox3.Enabled = False
Me.MultiPage.Pages(0).TextBox4.Locked = True
Me.MultiPage.Pages(0).TextBox4.Enabled = False
Me.MultiPage.Pages(0).Label10.Caption = "Третий вариант"
[/vba]
Дублировать поочередно все условия и необходимые действия или можно как-то более умно поступить?

Автор - Stormy
Дата добавления - 11.02.2014 в 14:55
nilem Дата: Вторник, 11.02.2014, 15:53 | Сообщение № 20
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
попробуйте так:
[vba]
Код
Private Sub UserForm_Initialize()
Select Case Cells(19, 15)    'Sheets("Proqram2") is Active sheet
     Case 1
         Me.Label10.Caption = "Test1"
     Case 2
         Me.Label10.Caption = "Test1"
     Case 3
         Me.Label10.Caption = "The 3d option"
End Select
Me.TextBox3.Enabled = False 'Locked and Enabled - practically the same thing
Me.TextBox4.Enabled = False
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениепопробуйте так:
[vba]
Код
Private Sub UserForm_Initialize()
Select Case Cells(19, 15)    'Sheets("Proqram2") is Active sheet
     Case 1
         Me.Label10.Caption = "Test1"
     Case 2
         Me.Label10.Caption = "Test1"
     Case 3
         Me.Label10.Caption = "The 3d option"
End Select
Me.TextBox3.Enabled = False 'Locked and Enabled - practically the same thing
Me.TextBox4.Enabled = False
End Sub
[/vba]

Автор - nilem
Дата добавления - 11.02.2014 в 15:53
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Советы и рекомендации по создаваемой программе. (Макросы Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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