Страницы: 1
RSS
TextBox - запись / Combobox - чтение - одна форма, Запись данных и считывание в одной форме
 
Всем доброго дня.
        Не прошло и нескольких десятков лет и пришлось погрузиться в изучение VisulBasic. Но возникают конфликты и ошибки, на которые не всегда получается найти ответы в инете. В связи с чем прошу помощи у форумчан, помочь разобраться, что делаю не так.
        Итак, есть Form_1, на ней TextBox_1 и CobmboBox_1, CommboBox2, а также кнопка CommandBattom1
        На листе "List1", создана умная таблица "utb_him"

Конопке назначен макрос: а1
Код
Private Sub CommandBattom1_Click()
    Call a1
End Sub
В модуле прописываю код:
Код
Option Explicit
Dim him_1 As ListRow

Sub a1()
   Set him_1 = ThisWorkbook.Worksheets("List1").ListObjects("utb_him").ListRows.Add
   him_1.Range(1) = Form_1.TextBox_1.Value
End Sub

На этом этапе всё работает отлично. При нажатию на кнопку CommandBattom1 данные из TextBox_1 записываются в умную таблицу "utb_him". Но стоит мне добавить в свойствах CobmboBox: RowSource ссылку на умную таблицу, как возникает ошибка.

А мне нужно вносить новые данные в таблицу через TextBox, если их нет, и считывать ComboBox на этой же форме.
Подскажите как быть?
 
Цитата
Sheriff написал:
Подскажите как быть?
Показать файл
 
Дело в том, что делаю отдельно файл - всё работает. А в моём - нет.

У меня на листе "бетон" в ComboBox "cbox_HimName1" и "cbox_HimName2" не могу свойство присвоить, что бы значение из таблицы utb_him забирало
Изменено: Sheriff - 25.06.2022 22:15:43
 
Цитата
Sheriff написал:
делаю не так.         Итак, есть Form_1, на ней TextBox_1 и CobmboBox_1, CommboBox2, а также кнопка CommandBattom1
и так, для начала обьясняете что за задачу пытаетесь решить ( ссылаясь на имена ячеек, все TextBoxы и CobmboBoxы...
если рассказ будет точным и желательно коротким, может кто-то вам поможет
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Задача простая.

Если есть данные в таблице, значит я их выбираю из списка. Если нет, то нужно добавить.
 
Эта статья из "Приемов" не поможет?
 
Юрий М, Спасибо. Но нет.

Мне нужно на форме сделать такой финт. Дело в том, что отдельно сделал файл - всё работает. А тут, что скинул - не хочет. Ошибка и перегрузка программы.
Пол дня сегодня бьюсь
 
Цитата
Sheriff написал:
Если нет, то нужно добавить.
если данных нет - добавить можно всякую ерунду? (замените "ерунду" на более приемлемое в этом случае слово)
Изменено: Ігор Гончаренко - 26.06.2022 00:43:12
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Sheriff написал:
Пол дня сегодня бьюсь
вот это реально ерунда, я некоторые проблемы месяцами решал, с перерывами, но месяцами... полдня - эка невидаль!
Изменено: Ігор Гончаренко - 26.06.2022 00:43:39
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Sheriff, проверьте, так?
 
Цитата
написал:
Sheriff , проверьте, так?
Да. Именно так как мне нужно было.
Спасибо огромное!!!
Только как вам так удалось сделать? Вижу код на 2 модуле, но разобрать как он работает - не могу.  
 
Sheriff, нет, код в модуле 2 можно удалить (он для печати имен именованных диапазонов)
вот этот код:
Код
Private Sub cbox_HimName1_Enter()
Dim arr
arr = Worksheets("Бетон").Range(Worksheets("Бетон").ListObjects("utb_Him").DataBodyRange.Address)
cbox_HimName1.List = Application.Transpose(arr)
End Sub

Private Sub cbox_HimName2_Enter()
Dim arr
arr = Worksheets("Бетон").Range(Worksheets("Бетон").ListObjects("utb_Him").DataBodyRange.Address)
cbox_HimName2.List = Application.Transpose(arr)
End Sub
он в модуле формы
 
artemkau88, всё гениальное просто ))).
Спасибо ещё раз. С этим кодом разобрался.

Не подскажите, есть возможность объединить в одну ячейку данные из формы (из textbox и combobox) и туда даже вставить данные из ячейки
Как объединить данные из textbox и combobox я знаю, через &, но как туда вставить данные из ячейки листа?

У меня в первый столбец на листе собираются данные из разных элементов формы чередуясь с текстовым значением, и в середину нужно вставить данные из таблицы. Я пытаюсь указать формулой, но не выходит каменный цветок.
 
Sheriff, не совсем понял Вас.
Можете более подробно описать задачу?
 
Конечно. Прям согласно файла:

На листе "Бетон" есть таблица utb_Beton. Из первого столбца этой таблицы я на форме FromBeton в Freme: "Показатели бетонной смеси" выбираю "Класс бетонной смеси".
Потом данные из: comboBox (cbox_B) и TextBox (tb_W и tb_F) - собираются в одну в первом столбце таблицы utb_Recept.
Вот код:
Код
BetonListRow.Range(1) = FormBeton.cbox_Ab.Value & " B" & FormBeton.cbox_B.Value & " (" & "____" & ") W" & FormBeton.tb_W.Value _
                            & " F" & FormBeton.tb_F.Value
Но вместо "______" я хочу чтобы подставлялись данные из второго столбца таблицы utb_Beton.
Изменено: Sheriff - 27.06.2022 16:01:29
 
Sheriff, код в событии кнопки "Внести рецепт в базу" модуля формы FormBeton. Проверяйте
 
artemkau88, в принципе так, но есть нюансы.
А в модуле обрабатываю добавление строк и внесение изменений в каждый столбец. И добавляется строка. Код на кнопке только изменяет одну ячейку не добавляя. И отключая переменную на кнопке, соответственно в модуле ни чего не запускается.
Мне не нужно писать код, нужна подсказка, есть ли возможность соединить данные из формы с ячейкой.
Я понял, что можно, буду теперь думать как это сделать в модуле, что бы сразу обновлялась при нажатии ОК.

Спасибо большое, что уделили мне столько своего времени.
Изменено: Sheriff - 27.06.2022 19:08:12
 
Sheriff, вместо:
Код
BetonListRow.Range(1) = FormBeton.cbox_Ab.Value & " B" & 
FormBeton.cbox_B.Value & " (" & "____" & ") W" & 
FormBeton.tb_W.Value _
                            & " F" & FormBeton.tb_F.Value
поменяйте на:
Код
Dim val
With Application
    val = .Index(rng, .Match(CDbl(Replace(cbox_B.Value, ".", ",")), rng.Columns(1), 0), 2)
End With
BetonListRow.Range(1) = FormBeton.cbox_Ab.Value & " B" & FormBeton.cbox_B.Value & " (" & val & ") W" & FormBeton.tb_W.Value _
                            & " F" & FormBeton.tb_F.Value
:)

Если подскажете в какой код вставлять конкатенацию (имя модуля и процедуры), поменяю у Вас в коде. :)  
Изменено: artemkau88 - 27.06.2022 19:13:39
 
Код
Private Sub cbox_HimName1_Enter()
Dim arr
arr = Лист6.ListObjects("utb_Him").DataBodyRange.Cells
cbox_HimName1.List = arr
End Sub
это короче (см. сообщ. 12)
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Михаил Лебедев, artemkau88,  код программы работает безупречно, но должно быть введено минимум 2 строки. Если я очищаю таблицу с Хим.добавками. И добавляю только одну, то при попытки выбора, выскакивает ошибка.

Из за чего может это быть?
 
Цитата
написал:
Sheriff , вместо:
Код
    [URL=#]?[/URL]       1  2  3  4      BetonListRow.Range(1) = FormBeton.cbox_Ab.Value &   " B"   &     FormBeton.cbox_B.Value &   " ("   &   "____"   &   ") W"   &     FormBeton.tb_W.Value _                                  &   " F"   & FormBeton.tb_F.Value   
  поменяйте на:
Код
    [URL=#]?[/URL]       1  2  3  4  5  6      Dim   val    With   Application          val = .Index(rng, .Match(  CDbl  (Replace(cbox_B.Value,   "."  ,   ","  )), rng.Columns(1), 0), 2)    End   With    BetonListRow.Range(1) = FormBeton.cbox_Ab.Value &   " B"   & FormBeton.cbox_B.Value &   " ("   & val &   ") W"   & FormBeton.tb_W.Value _                                  &   " F"   & FormBeton.tb_F.Value   
   

Если подскажете в какой код вставлять конкатенацию (имя модуля и процедуры), поменяю у Вас в коде.  
Поменял, не работает. Выдаёт ошибку.
 
Проверьте (см. файл)
Страницы: 1
Наверх