В выпадающем списке должно быть видно все строки - но выбирать в выпадающем списке можно было только строки с префиксом SVC. Если выбрать строку без префикса SVC - выдать какое-либо сообщение. Пример во вложении.
Почему то создаваемое мною меню на ленте имеет название "Надстройка". Видимо, по умолчанию...Но переименовать не получается. Да и размеры внутри меню безобразные - можно починить? Файл сего безобразия приложил.
Код
Sub NewMenu100()
On Error Resume Next
Application.CommandBars.Add("Отчет ТОП 100").Delete
With Application.CommandBars.Add("Отчет ТОП 100", , False, True)
With .Controls.Add
.Caption = "ТОП 100"
.FaceId = 69
.Style = 3
.TooltipText = "Формирование отчета ТОП 100"
.OnAction = "Start100"
End With
.Visible = True
End With
End Sub
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Добрый день, друзья! Столкнулся с проблемой такого порядка.
Есть лист, в нем с шаблон с формулами,настроенными на формирование данных из соседней вкладки построчно. Перебираю циклом строки в соседнем листе, все нормально, формулы отрабатывают, данные. вставляются в шаблон. На основе строки с полями заполняются ячейки с формулами, шаблон копируется дальше вниз, после текущего. В общем из 198 шаблонов формируется только первые 175, дальше чисто. Вроде все проверил, но чего то не вижу... Файл прилагаю.
Может, кто подскажет где собака порылась?... Что бы количество шаблонов совпадало с количеством строк в соседней вкладке...
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Спасибо, работает - в первом блоке для каждой ячейки формулу подкорректировал, что бы данные верные забирала. Сейчас блок копируется, формулы вставляются в ячейки так как надо, данные забираются. Осталось циклы, скопировать и вставить, доделать.
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Кратко суть проблемы: При выделении и копировании блока A1:K19 ,в другое место, начиная со строки A20, формулы плывут. В изначальном блоке формулы стоят правильно(=лист1!$C2), данные из соседнего листа лист1. При копировании этого блока вниз формула в блоке встает как =лист1!$C21.. Хотя думалось что встанет =лист1!$C3 Макрорекордер не помог. Можно ли как то сделать так что бы при копировании выделенного блока вниз - в новом блоке формулы вставали как =лист1!$C2+1??? Во вкладке лист1 23 строки, соответственно будет 23 блока и в каждом блоке от предыдущего надо =лист1!$C2+1
Изменено: Джек Восмеркин - 01.06.2022 14:40:47(Вложить файл)
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Дело в том, что это предполагается использовать далее - и именно в целочисленном формате числа. Умножить на 100 не проблема - нужно вычисленное значение подставить вместо формулы
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Не. 3 класса церковно-приходской. Могу только отнять и поделить... Может, меня переклинило - но 1393,75 Х 100 = 139375,00 Но мне надо целое число в формате 139375
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Есть потребность проверить средствами VBA каталог(любой) на наличие xml файлов. Если xml файлы есть - их наименование и содержимое скопировать на лист.
С VBA знаком, но с xml не работать не приходилось.
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Обход(или множественный выбор) комбобоксов(с занесением данных в переменные) на форме, с подготовкой переменных для запроса, Обойти контролы с выбором на форме, занести их данные в переменные, по кнопке подготовленные переменные использовать в запросе
1. Да не, в комбобокс идет весь результат запроса - из которого можно выбирать любое значение. 2.Связи действительно не видно...)))... Ее надо сделать. ID1, ID2 - это просто поля одной таблицы и никаких условий там нет. Если в ComboBox1 выбрать 1элемент "Иванов", то в ComboBox2 должны отобразиться соответствующие 4 "Иван". Вот как то вот так...))) 3. Мне кажется, не стоит. Хотя возможно и ошибаюсь. 4. Данные для комбобоксов запрашиваются с сервера SQL - так что каждый раз при инициализации формы приходится запрашивать заново, во избежание.
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Обход(или множественный выбор) комбобоксов(с занесением данных в переменные) на форме, с подготовкой переменных для запроса, Обойти контролы с выбором на форме, занести их данные в переменные, по кнопке подготовленные переменные использовать в запросе
Обращаюсь к вам - так как VBA занимаюсь раз в год, а ЭТО у самого получилось неважно. Суть вроде простая... 0. Форма инициализирована, контролы заполнены данными из таблицы на SQL-сервере. 1. Прошелся на форме по контролам мышкой, выбрал из них то, что надо. 1.1 На контроле висит событие Change, при его срабатывании значение контрола заносится в переменную. 1.2 Переменные предполагается использовать как условие после where, запрос типа select * from xxx where a & b & c & d 1.2.1 Использовал ActiveControl.Name - это если фокус на контроле,но видимо переборщил....))) 2. Кнопка "получить результат" собирает переменные, обрабатывает к удобоваримому виду - для использование в WHERE, как в п1.2 2.1 Запускается запрос с сформированным WHERE, примерно такой:
Код
rs.Open "SELECT * FROM Itog WHERE " & st1 & st3 & st4 & st5 & st6 & st7 & st2 & " ORDER BY 1", cn, adOpenStatic, adLockReadOnly
Worksheets(Jnxtn gj ghjtrnfv").Range("B6").CopyFromRecordset rs
rs.Close
Вот, в общем то и все - как смог. Есть еще несколько нюансов, но это уже по возможности
Надеюсь что результат будет лучше моего...))) Мой "пример" прилагаю.
Буду рад если кто изъявит готовность взяться за работу, с указанием стоимости и сроков. Связь - личка, почта, телефон, можно скайп
Заранее благодарю!
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Есть два комбобокса, заполненные из таблицы с сервера. Выглядят так:
Код
'Соединение с базой и получение данных в Combobx-ы'
cn.Open
sSQL = "Select distinct id1 From Itog Where id1 IS NOT NULL Order by 1"
Set rs = cn.Execute(sSQL)
If Not cn.State = 1 Then Exit Sub
a = rs.GetRows
Me.ComboBox1.List = Application.Index(a, 1, 0)
rs.Close:
cn.Close
'-------------------
cn.Open
sSQL = "Select distinct id2 FROM Itog ORDER BY 1"
Set rs = cn.Execute(sSQL)
If Not cn.State = 1 Then Exit Sub
a = rs.GetRows
Me.ComboBox2.List = Application.Index(a, 1, 0)
rs.Close:
cn.Close
Как организовать связь между комбобоксами? Что бы при выборе данных в комбобоксе подтягивались данные из другого комбобокса, если они есть?
Мне бы надо сориентироваться что быстрее - особенно в высоконагруженных листах(10000х100), коих может быть не один десяток. Если разница будет небольшая - то да, не стоит городить огород, надо брать то, что попроще.
Ну и тренировки, да, никто не отменял...))) Может, код удастся вылизать до того, что его можно будет совать всегда и везде...)))
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Пробовал - не работает так как надо в моем случае, выдает А2 - при пустом B1,B2, B3 и A3(а там диапазон A1:BB57 - забит плотненько...)
Код
СПОСОБ 4:
Определение последней строки и столбца, а так же адрес ячейки методом Find Dim rF As Range
Dim lLastRow As Long, lLastCol As Long
'ищем последнюю ячейку на листе, в которой хранится хоть какое-то значение
Set rF = ActiveSheet.UsedRange.Find("*", , xlValues, xlWhole, xlPrevious)
If Not rF Is Nothing Then
lLastRow = rF.Row 'последняя заполненная строка
lLastCol = rF.Column 'последний заполненный столбец
MsgBox rF.Address 'показываем сообщение с адресом последней ячейки
Else
'если ничего не нашлось - значит лист пустой
'и можно назначить в качестве последних первую строку и столбец
lLastRow = 1
lLastCol = 1
End If
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Ознакомился - и с дебатами, и сторонним ресурсом...))) Дебаты - вычисление последней заполненной строки идет по 1 или последнему столбцу. Не хотелось бы такой привязки - поскольку они могут быть пустые, и тогда полное фиаско...))) Вот если бы искался и вычислялся столбец с максимальным количеством строк...
Сторонний ресурс - нужный код не работает так как надо.
Вариант с UsedRange.Rows - вполне себе рабочий Но опять же, встречалось что UsedRange принимает во внимание и учитывает удаленные данные.
Может перебор столбцов, вычисление последней заполненной ячейки в каждом столбце,сравнение всех последних ячеек - ячейка с максимальным значение строки и будет самой последней строкой?
Какие еще есть варианты?
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.