Sanim, Формулами указать первый и последний день месяца, проблемм нет. Проставить везде 31, а в зависимости от месяца прописывать фактически сколько дней можно, но это только шапка айсберга. Из 3 строки собираются данные по дням и окрашиваются ячейки графика. Выложил часть, с которой у меня сложности. Всё остальное реализовано.
Приходится выкручиваться с постоянным объединением. Если бы ещё не было высокостного года... а так много условий. Вот и подумал, что можно было бы объединить ячейки макросом по условию. Создать кнопку и в зависимости от месяца начала и продолжительности графика, объединить ячейки в 1 и 2 строках. В интернете нашёл только такой вариант: https://exceltable.com/vba-macros/kak-obedinit-yacheyki-makros, но к решению моей задачи применить не смог.
Сталкнулся со следующей задачей, как реализовать, не знаю. Может кто подскажет, буду крайне благодарен.
Есть строка, в которой указывается дата начала, и далее все ячейки +1 к данной дате. Получается период начала и окончания. (это строка 3) В строке 1, объединённые ячейки групируют месяц, и формулой я подгружаю из строки 3, имя месяца и год В строке 2, в объединённых ячейках указываю периоды месяца: 1-10, 11-20, 21 - 30(31, 28, 29) В зависимости от того, какой месяц, мне приходится в ручную переобъединять ячейки с месяцем и датами.
Вопрос, можно ли, в зависимости от месяца, по условию макросом объединять ячейки в 1 строке (1-30, 1-31, 1-28 (29)) и во второй строке аналогично? Файл прилагаю.
ddmax, а можно поинтересоваться, как указали имя умной таблицы с помощью формулы?
А по вашему вопросу, я через фунццию ДВССЫЛ() ссылку прописываю. Если "Умная таблица" из одного столбца, то просто указываю ссылку на ячейку где её имя, если несколько, то комбинирую.
например имя Умной таблицы - QWA и у меё 3 столбца: Столбец_1, Столбец_2 и Столбец_3. Мне нужно найти значение в Столбец_3 на основании данных из Столбец_1. В ячейке скажем A1 указано имя Умной таблицы. Формула следующая:
Jack Famous, Да не нужны мне ячейки, сам с ними справлюсь. Не получается переделать, как только не пробовал. И так:
Код
Sub test()
Dim x, tx$
tx = UserForm1.TextBox1.Value
x = SplitBy58(tx): If Not IsArray(x) Then UserForm1.TextBox2.Value x = vbInformation: Exit Sub
UserForm1.TextBox2.Value x(1) = vbInformation: UserForm1.TextBox3.Value x(2) = vbInformation
End Sub
И так:
Код
Sub test()
Dim x, tx$
tx = UserForm1.TextBox1.Value
x = SplitBy58(tx): If Not IsArray(x) Then UserForm1.TextBox2.Value = x, vbInformation: Exit Sub
UserForm1.TextBox2.Value = x(1), vbInformation: UserForm1.TextBox3.Value = x(2), vbInformation
End Sub
И так:
Код
Sub test()
Dim x, tx$
tx = UserForm1.TextBox1.Value
x = SplitBy58(tx): If Not IsArray(x) Then UserForm1.TextBox2.Value = vbInformation: Exit Sub
UserForm1.TextBox2.Value = vbInformation
UserForm1.TextBox3.Value = vbInformation
End Sub
Msi2102, Я вас услышал. Но как из textbox перенести в ячейку, я знаю, а как при этом обработать запрос и разделить в разные ячейки таблицы, для меня тёмный лес.
Msi2102, Да я так и собирался. Но что бы проще объяснить что мне нужно, описал суть проблемы, что нужно и как разбить. Но как это сделать с вашими примерами, я так и не понял. Пока понимаю VBA на примитивном уровне.
Jack Famous, отлично написан макрос! в окнах выскакивает как мне нужно! И я вместо MsgBox прописываю UserForm1.TextBox2.Value - И у меня ошибка. Понимаю, что ни так как то нужно. А как правильно, не знаю.
Msi2102, нет, там не ручной ввод. Я ComboBox-ами выбираю, город, улицу, объект. все данные соединяются в textbox1. И должны по нажатию кнопки заполнить форму в excel. Но длина строки в форме вмещает не более 58 символов. вот и нужно сделать перенос на другую строку.
Есть три textBox. В один, скажем textbox1 записывается адрес. Если адрес более определённого количества символов (более 58), то нужно разделить текст на 2 части. До 58 символов в textbox2 и весь остаток в textbox3.
Но есть одна заковырка, если 59 символ является продолжением не законченного слова, то нужно найти начало этого слова, и перенести его в textbox3 целиком, а в textbox2 записать соответственно не 58 символов, а меньше, до начало слова.
Пример: г. Санкт-Петербург, ул. Бухарестская, 27 корп.12, (м-н Старая Деревня) 'текст который в textbox1. Всего 71 символ г. Санкт-Петербург, ул. Бухарестская, 27 корп.12, (м-н 'текст который должен попасть в textbox2 - 55 символов Старая Деревня) 'остальной текст в textbox3
Мои мысли, проверить 59 символ, если пробел, то всё ОК. 58 символов в textbox2, остальное в textbox3. Если нет, то проверяем 57 символ, потом 56, 55, 54 и т.д. пока не найдём пробел. Как только пробел найден, то осуществляем деление на 2 части. Но как это написать кодом? Подскажите пожалуйста.
Нашёл решение другим способом обработать запрос. Так правда и не понял, почему мой способ не работает..., ну да ладно.
Вот кусок кода, вдруг кому не будь пригодится:
Код
Set Cell_k = ShopListObj.ListColumns.Item(1).Range.Find(FormShop.CBoxGP.Value, LookAt:=xlWhole)
If Not Cell_k Is Nothing Then 'Если компания найдена
FormShop.tb_INN.Value = Cell_k.Cells(1, 2)
End If
Всем доброго! Есть умная таблица. В ней несколько столбцов. В первый я ввожу наименование организации. Во второй её ИНН Если такая компания уже есть, то ИНН должен автоматом заполнить TextBox. Если нет, то я в ручном вводе вношу и компанию и ИНН. Прописал в Коде к форме, по клику по TextBox, вызов функции из модуля. Вот код в модуле:
Код
Sub AddINN() 'Заполняем textbox значением ИНН в зависимости от выбора компании
Set ShopSheet = ThisWorkbook.Worksheets("Покупатель")
Set ShopListObj = ShopSheet.ListObjects("UTBShop")
If IfNa(Match(FormShop.CBoxGP, ShopListObj.ListColumns(1), 0), 0) > 0 Then
FormShop.tb_INN = Application.VLookup(FormShop.CBoxGP, ShopListObj.Range, 2, 0)
End If
End Sub
Если убрать "ЕСЛИ", то из списка в ComboBox я выбираю компанию, появляется в TextBox её ИНН. Но если компании в списке нет, то у меня выскакивает ошибка. Прописал условие If, вообще всё перестало работать. Ногами сильно не бейте, просто укажите, где ошибка? Я только учусь.
Пробовал в модуле прописать, тоже ни чего не выходит:
Код
Sub AddINN()
Set ShopSheet = ThisWorkbook.Worksheets("Покупатель")
Set ShopListObj = ShopSheet.ListObjects("UTBShop")
FormShop.tb_INN = Application.VLookup(FormShop.CBoxGP, ShopListObj, 2, 0)
End Sub
Пробую применить у себя, но как то не выходит каменный цветок. У меня есть combobox: CBoxGP В него я из выпадающего списка ввожу название компании, если она есть. Если нет, то заполняю вручную А в textbox (tb_INN) я хочу, что бы автоматом прописывался ИНН компании, если естественно такая компания присутствует в списке. Если нет, то ввожу соответственно вручную. Данные беру из умной таблицы: UTBShop на листе "Покупатель"
Вот мой код:
Код
Private Sub CBoxGP_Change()
tb_INN = Application.VLookup(CBoxGP, ListObjects("UTBShop"), 2, 0)
End Sub
Что делаю нет?
Извините, за глупые вопросы, но VBA только постигаю.
Мне необходимо, чтобы подтягивал номер смены в зависимости от явки. Например 1 смена это явка 00 ночи до 7 утра, далее 5ДН явка с 6,8 часов до 8 часов, далее 2* смена явка с 12,8 часов до 14,0, еще одна 2 смена явка с 18 до 22. И если время с 14 до 18 , то чтобы выдал ОШИБКУ/ЛОЖЬ, так как это или опоздание или сверхурочка. Время перевела в число.
Во первых есть несколько конфликтов в данном описании: 1. Числовые значения от 6,8 до 7 - по вашим данным дублируются. Т.е значение к примеру 6,9 актуально и для Смены 1, и для смены 5ДН. Я в формуле внёс диапазон с 0 до 6,8 и следующий с 6,8 до 8 - так данные не пересекаются.
2. Есть данные, которые не вошли не в один из намеченных вами диапазоном, например такие как: 21,58 или 20,57.... У себя в формуле я их пометил как "Недопустимое значение"
Ігор Гончаренко, да в textbox номер будет следующий, но если ввели данные не корректно, и нужно изменить строку. То предполагается, что введя уже существующий номер, программа предложит заменить ранее введённые данные. Т.е. должна быть ещё проверка при вводе, на уникальность номеров. В самом начале я описал подробно, что должно получится..., но как это сделать мне не доходит. Я к сожалению только начал изучать VBA.
Ирина Медведева, и теперь по русски, без формул, при каких условиях что должно проставляться? А то там так на мудрено, что я голову сломал разбираться. При каких параметрах должны быть значения: 1, 2, 2* и 5ДН
Связанный впадающий список в каждой ячейке столбца, В зависимости от выбранного поставщика и типа товара выпадать должен соответствующий список с артикулами. Особенность в том, что выпадающий список должен быть в каждой ячейке столбца, а не только в одной.
Юрий М, приложенный файл, это часть большой программы. Запускается макрос не с активного листа. формулы, их много будет, хочу прописывать не в коде Формы или листе, а в Module1. Вызываться формулы будут тоже по разным событиям. Некоторые при загрузке формы, другие после ввода данных в Combobox и пр.
Option Explicit
Dim ShopSheet As Worksheet 'Лист Заказ
Dim ShopListObj As ListObject
Sub NOrder()
Set ShopSheet = ThisWorkbook.Worksheets("Заказ")
Set ShopListObj = ZakSheet.ListObjects("utb_Company")
FormZak.tb_NZak.Value = Max(ShopListObj.Range(1)) + 1
End Sub
Задача такая, есть форма для заполнения заказа (часть кода во вложении). При её вызове, в TextBox (№ Заказа) должен по умолчанию отображаться следующий номер из столбца (№ Order) в умной таблице. В таблице столбцы: № Order; Data; Company и т.д. Если заполнено к примеру 16 строк с различными данными, то при вызове формы, в TextBox (№ Заказа) по умолчанию стоит - 17... Если же при нажатии на кнопку ввода данных в таблицу номер к примеру уже существует в таблице, то выскочить должно предупреждение типа: «Данный номер присутствует в базе, желаете его переписать?» Соответственно если «ОК», то строка с этим номером переписывается, если «Cancel» то возврат к форме.
P.S. И у меня ошибка в работе макроса AddGp(), вроде всё правильно написал, но он ListObjects - не определяет... Не могу понять причину. Но это не особо важно, Но если кто укажет на ошибку, буду тоже крайне признателен.