vikttur, В 10-м посте я написал конкретный вопрос. "Почему в данном конкретном примере код просто не закончил цикл, а отработал его до вот этого условия и добавил строку в таблицу, тогда как в таблице есть и "Отчет по складу" и "Октябрь 2018" в одной строке" Ведь даже убрав ваще все екситфоры цикл не работает как цикл. Как прописать алгоритм цикла так, что бы, если не найдя первое условие в первой строке первого столбца код искал его в следующей и тд. Как только он находит первое условие, то проверяет второе условие так же циклом по всем строкам столбца 3. Если нашел второе условие, то просто выходит из цикла, если нет, то добавляется одну строку с
vikttur, так я Ваш код ничем особо и не поменял. Просто добавление строк вставил в саму процедуру, а не отдельным сабом. Плюс, если определить Dim ar As Range, то вылезает ошибка и ругается на UBound.
Так мне нужно, что бы он нашел совпадение "Отчет по складу" в первом столбце и "Октябрь 2018" в третьем в одной и той же строке. Если не нашел, то добавляется строка, если нашел то нет...
Юрий М, в общих чертах. Я вижу, что он находит несовпадение в первой строке с искомым и улетает на 20-тую строку кода. Как его заставить искать дальше я не понимаю. Запутался совсем...
vikttur,Спасибо за подсказку. Делал на автомате и не задумывался.
Сделал пример максимально приближенный к боевому
Код
Sub sfsdfsdf()
Set ShUF_Main = ThisWorkbook.Worksheets("Лист1")
Set UF_MainListObj = ShUF_Main.ListObjects("Перечень_накл_tb")
Set UF_MainListRow = UF_MainListObj.ListRows.Add
Dim ar, k
ar = Range("Перечень_накл_tb")
' With UF_Main
For k = 1 To UBound(ar)
If ar(k, 1) = "Отчет по складу" Then
If ar(k, 3) = "Октябрь 2018" Then
' Call RaschetDS
Exit For
Else
UF_MainListRow.Range(1) = "Отчет по складу"
UF_MainListRow.Range(2) = "1"
UF_MainListRow.Range(3) = "Октябрь 2018"
' Call RaschetDS
End If
Else
UF_MainListRow.Range(1) = "Отчет по складу"
UF_MainListRow.Range(2) = "2"
UF_MainListRow.Range(3) = "Октябрь 2018"
' Call RaschetDS
Exit For
End If
Next k
' End With
End Sub
Почему в данном конкретном примере код просто не закончил цикл, а отработал его до
Александр П.,Спасибо за помощь vikttur, суть не в заполнении ячейки, а самом поиске. Реальный кусок кода выглядит так
Код
Dim ar, k
ar = Range("перечень_накл_tb")
With UF_Main
For k = 1 To UBound(ar)
If ar(k, 1) = "Отчет по складу" Then
If ar(k, 3) = .cbx_PeriodSpirt Then
Call RaschetSklad
Exit For
Else
Set ShUF_Main = ThisWorkbook.Worksheets("Медикаменты")
Set UF_MainListObj = ShUF_Main.ListObjects("перечень_накл_tb")
Set UF_MainListRow = UF_MainListObj.ListRows.Add
UF_MainListRow.Range(1) = "Отчет по складу"
UF_MainListRow.Range(2) = ""
UF_MainListRow.Range(3) = .cbx_PeriodSpirt
Call RaschetSklad
End If
Else
Set ShUF_Main = ThisWorkbook.Worksheets("Медикаменты")
Set UF_MainListObj = ShUF_Main.ListObjects("перечень_накл_tb")
Set UF_MainListRow = UF_MainListObj.ListRows.Add
UF_MainListRow.Range(1) = "Отчет по складу"
UF_MainListRow.Range(2) = ""
UF_MainListRow.Range(3) = .cbx_PeriodSpirt
Call RaschetSklad
Exit For
End If
Next k
End With
Он ищет в таблице совпадение в первом столбце "Отчет по складу", а во третьем - период из формы .cbx_PeriodSpirt и, если находит, то дальше происходит процедура RaschetSklad, а если не находит, то либо "Отчет по складу", либо период из формы .cbx_PeriodSpirt, то сначала добавляется в таблицу,
vikttur, я предлагал новое название в сообщении, которое Вы потерли. Видимо, оно тоже не отвечает правилам форума. У меня появилась потребность в помощи, ибо я совсем не понимаю в чем проблема и впустую просидев кучу времени с проблемой я решил сюда написать. Потратив кучу сил и изругавшись на себя, воображение мне больше не дает никаких вариантов названия. Поэтому смело удаляйте тему. Прошу прощения за потраченное время.
Добрый день! Подскажите, пожалуйста, почему код работает не правильно. Код ищет первое условие в столбце - находит. Проверяет второе условие и, не находя его в в строке с первым "октябрь 2018", не проверяет дальше, а останавливается. Понимаю, что я где-то не указал, что по второму условию цикл нужно продложить. Но где…
Александр, это тут 10 строк, а в реале и условий больше и таблица существенно больше. Макросом побыстрее будет. Обработанные данные используются в регулярных отчета: нажал - сформировалось - распечатал - закрыл.
Добрый день! Помогите, пожалуйста, написать код, который бы перенес список продуктов из таблицы на листе1 на лист2 начиная с ячейки F5, причем именно те продукты, у которык в столбце "ответ" стоит "да".
Юрий М,А я еще для эксперимента комментирую строчки по одной и ничего не меняется. еще думаю что за мистика, а они оказываются дублируют друг друга)) спасибо)
Мне нужно нарисовать в таблице границы. Если рисовать их через select, но все работает только если открыт лист
Код
Sub wwww()
With ThisWorkbook.Worksheets("лист1")
Dim col, arr
col = .Cells(.Rows.Count, Range("A13:A200").Column).End(3).Row
arr = .Range(Cells(13, 1), Cells(col, 9)).Select
With Selection
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin
.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlThin
End With
.Range("D8").Select
End With
End Sub
Я пытаюсь сделать, что бы он работал в фоне.
Код
Sub wwww()
With ThisWorkbook.Worksheets("лист1")
Dim col, arr
col = .Cells(.Rows.Count, Range("A13:A200").Column).End(3).Row
arr = .Range(Cells(13, 1), Cells(col, 9))
With arr
.Borders.LineStyle = xlContinuous
.Borders.Weight = xlThin
.Borders(xlEdgeLeft).Weight = xlThin
.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
.Borders(xlEdgeRight).Weight = xlThin
.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlThin
End With
.Range("D8").Select
End With
End Sub
Но вылезает ошибка "object required" И ругается на ".Borders.LineStyle = xlContinuous"
Казанский, прелесть умных таблицы - диапазоны. На сегодняшний день у меня файлик на 2000 строк кода, притом, что я макросами занимаюсь только месяц-полтора и я физически не могу охватить объем всех знаний, которые бы мне позволили безболезненно вносить правки в работу макросов. Может когда-то я взгляну на него и посмеюсь сам над собой, но сейчас меня может запутать любая мелочь...
БМВ написал: Предположу, что вы хотели ввести формулу и размножить её, то это просто по иному делается.
Вцелом, да, я понял, что нельзя формулу массива разом влипить в несколько ячеек умной таблицы. Размножить - это более точно слово. Подскажите как можно ее размножить на весь диапазон умной таблицы?
vikttur, Я не особо в макросах, почти никак во всяких циклах, а надо из рабочего файла убрать формулы, что бы файл работал полегче. Все расчеты (вернее формулы ползут из макросов, считаются и отражают результат) как мог перенес в макросы, а с формулами массивами тупик...
Добрый день! Подскажите, пожалуйста, почему нельзя внести данные в диапазон строк умной таблицы через FormulaArray? Вылезает ошибка "Нельзя установить свойство FormulaArray класса Range". Вернее даже не почему, а как внести?
Добрый день! Помогите, пожалуйста. Нужно средствами VBA сравнить таблицы "Склад" и "Выдача" и отличия вынести в таблицу "Результат". В таблицах только цифры. Могут быть пустые ячейки.
Которая выглядит как СТРОКА(G1) в массивной формуле при заполнении диапазона D16:D18 не меняется, то есть во все три ячейки залетает СТРОКА(G1) хотя должна меняться на СТРОКА(G1) СТРОКА(G2) СТРОКА(G3) и так далее . Сам я не знаю как это исправить. Помогите пожалуйста