Доброго времени суток, уважаемые форумчане. В первую очередь хочу выразить благодарность создателям и активным пользователям за данный проект. Учиться самому можно, но сложно. Порой без совета просто не обойтись. Очень надеюсь, что данная тема не противоречит правилам форума и в дальнейшем будет пособием для начинающих пользователей. Теперь к сути: Мне дали задание написать программу для расчета зарплаты 6 цехов. Раньше все это было сделано на таблицах Excel и более менее все работало, сейчас появились дополнительные критерии и поэтому возникла мысль убрать несколько книг и сделать программу. Имеющиеся данные: Есть сторонняя база на Firebird, тетради/бланки заполняемые рабочими. Сделал подключение к базе данных, используя MSQuery , данные заполняются на отдельный лист - это позволяет избежать подвисания в момент обновления данных с базой. По совету nilem, делаю форму Ввода данных непосредственно в VBA. Столкнулся с проблемой написание в Caption названия на турецком. На ум пришло 3 решения. 1) Суппорт сайт Майкрософта рекомендует установить dll для Unicode и использовать Формы с него. 2) При поиске в гугле нашел советы по использованию графических изображений с нужным шрифтом 3) Подмена букв Unicode значениями. Вариант решения ниже
Доброго времени суток, уважаемые форумчане. В первую очередь хочу выразить благодарность создателям и активным пользователям за данный проект. Учиться самому можно, но сложно. Порой без совета просто не обойтись. Очень надеюсь, что данная тема не противоречит правилам форума и в дальнейшем будет пособием для начинающих пользователей. Теперь к сути: Мне дали задание написать программу для расчета зарплаты 6 цехов. Раньше все это было сделано на таблицах Excel и более менее все работало, сейчас появились дополнительные критерии и поэтому возникла мысль убрать несколько книг и сделать программу. Имеющиеся данные: Есть сторонняя база на Firebird, тетради/бланки заполняемые рабочими. Сделал подключение к базе данных, используя MSQuery , данные заполняются на отдельный лист - это позволяет избежать подвисания в момент обновления данных с базой. По совету nilem, делаю форму Ввода данных непосредственно в VBA. Столкнулся с проблемой написание в Caption названия на турецком. На ум пришло 3 решения. 1) Суппорт сайт Майкрософта рекомендует установить dll для Unicode и использовать Формы с него. 2) При поиске в гугле нашел советы по использованию графических изображений с нужным шрифтом 3) Подмена букв Unicode значениями. Вариант решения ниже
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] Не проверял, но должно работать. Только укажите лист для диапазонов.
[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
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 вот такую ошибку выдает. В какую сторону копать?
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
1. Уберите [] в фаормуле, если указываете переменные. 2. Что это? [lit&sif] 3. Прикладывайте файл. Гадать на какой строке и почему выдает ошибку - не интересно.
ЗЫ: Без файла я перестану отвечать в этой теме.
1. Уберите [] в фаормуле, если указываете переменные. 2. Что это? [lit&sif] 3. Прикладывайте файл. Гадать на какой строке и почему выдает ошибку - не интересно.
ЗЫ: Без файла я перестану отвечать в этой теме.SkyPro
skypro1111@gmail.com
Сообщение отредактировал SkyPro - Пятница, 07.02.2014, 17:42
[/vba] E19 - MT F19 - 17401 Поиск идет по МТ17401 , в правом столбце указаны данные как раз в таком формате. Искать нужно по объединенному результату двух ячеек.
[/vba] E19 - MT F19 - 17401 Поиск идет по МТ17401 , в правом столбце указаны данные как раз в таком формате. Искать нужно по объединенному результату двух ячеек.Stormy
Место для рекламы.
Сообщение отредактировал Stormy - Пятница, 07.02.2014, 17:58
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]
[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
Тоже самое выдает Хотя нет. Выделяет этот знак & амперсанду и выдает ошибку без номера. Наверное проще решить задачу через ячейку в Экзель. Получить там данные , а оттуда забрать в лейбл.
Тоже самое выдает Хотя нет. Выделяет этот знак & амперсанду и выдает ошибку без номера. Наверное проще решить задачу через ячейку в Экзель. Получить там данные , а оттуда забрать в лейбл.Stormy
Место для рекламы.
Сообщение отредактировал Stormy - Пятница, 07.02.2014, 18:14
На листе 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
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]
Попробуйте так: [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
Невозможно получить свойство класса 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 , но как это сделать не нашел.
Невозможно получить свойство класса 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
Место для рекламы.
Сообщение отредактировал Stormy - Пятница, 07.02.2014, 20:10
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]
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
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]
попробуйте так: [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