Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
[ Закрыто] Выпадающий список, Выпадающий список на основе Проверка данных
 
Добрый день уважаемые форумчане.

Пока не смог победить тему, поможите..

В выпадающем списке должно быть видно все строки - но выбирать в выпадающем списке можно было только строки с префиксом SVC.
Если выбрать строку без префикса SVC - выдать какое-либо сообщение.
Пример во вложении.
Изменено: Джек Восмеркин - 10.11.2023 10:25:47
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Как переименовать созданное меню на ленте?, Создал макросом свое меню на ленте. Поменять название меню не могу.
 
Добрый день, коллеги!

Никогда такого не было, и вот опять...))

Почему то создаваемое мною меню на ленте имеет название "Надстройка". Видимо, по умолчанию...Но переименовать не получается.
Да и размеры внутри меню безобразные - можно починить?
Файл сего безобразия приложил.
Код
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
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Длинный текст в ячейке., Формула ограничивает справа текст в 100 символов. Граница ограничения не должна делить слово.
 
Добрый день, друзья!

Есть формула:

=ПРАВСИМВ(ИНДЕКС(Лист1!a:a;ОТБР((СТРОКА()-4)/28)+2);13)

Ограничивает в 13 символов справа текст в ячейке.

Как сделать -  что бы ограничение не разрезало слово?

Есть какое-либо простое решение?

Файл с моими опусами прилагаю...
Изменено: Джек Восмеркин - 10.08.2022 16:57:28
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Последовательное копирование выделенного блока с формулами, Неполное копирование выделенного блока с формулами
 
Добрый день, друзья!
Столкнулся с проблемой такого порядка.

Есть лист, в нем с шаблон с формулами,настроенными на формирование данных из соседней вкладки построчно.
Перебираю циклом строки в соседнем листе, все нормально, формулы отрабатывают, данные. вставляются в шаблон.
На основе строки с полями заполняются ячейки с формулами, шаблон копируется дальше вниз, после текущего.
В общем из 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 (Вложить файл)
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Как в ячейке из рублей получить целочисленные копейки?
 
Добрый день, форумчане!

Совсем запутался..
Как в ячейке  из 1393,75 получить 139375 в формате число.
И потом его использовать в дальнейших операциях
Изменено: Джек Восмеркин - 04.03.2020 14:12:36
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Проверить наличие в каталге файлов XML и их список и содержимое поместить на лист
 
Добрый день, форумчане!

Есть потребность проверить средствами VBA каталог(любой) на наличие xml файлов.
Если xml файлы есть - их наименование и содержимое скопировать на лист.

С VBA знаком, но с xml не работать не приходилось.
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Обход(или множественный выбор) комбобоксов(с занесением данных в переменные) на форме, с подготовкой переменных для запроса, Обойти контролы с выбором на форме, занести их данные в переменные, по кнопке подготовленные переменные использовать в запросе
 
Доброго времени суток, коллеги!

Обращаюсь к вам - так как 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

Как организовать связь между комбобоксами?
Что бы при выборе данных в комбобоксе подтягивались данные из другого комбобокса, если они есть?
Изменено: Джек Восмеркин - 14.01.2020 08:12:45
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Вычисление последней строки, столбцы могут быть заполнены по разному
 
Как, средствами VBA, надежно вычислить последнюю строку, заполненную данными -  при разном заполнении столбцов?
Какие есть методы, способы, решения?
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Как ускорить вывод данных из массива на лист
 
Доброго всем времени суток!
Нужен коллективный разум - стрелкам осциллографа не беспокоится...
Массивы в памяти обрабатываются быстро - но вот с выводом беда
Можно ли, каким либо образом поправить положение - ускорить вывод данных?

Какие есть идеи, предложения,  думы, способы и механизмы?
Код
'1)время обработки данных
    T1 = Timer
    T3 = T1 - t
'    2)вывод на лист
Application.ScreenUpdating = False 'Выключаем обновление экрана'
MsgBox "Обработка данных - " & T3 & "cek"
   With Sheets("Sheet1")
'        Set Cel = .Cells(Rows.Count, 1).End(xlUp).Offset(1)
        .Cells(6, 1).Resize(K, Col).Value = Result ' Вывод данных из массива на лист
   End With
Application.ScreenUpdating = True 'Выключаем обновление экрана'
   T2 = Timer - T1
'   информация о времени работы.
   MsgBox "Вывод на лист - " & T2 & "cek" & Chr(10) , , "Проверка на скорость"

Гонял на такой конфигурации - Win7 32, ОЗУ 4гб, Xeon E5450 3.40 ГГЦ, видяха GTS 250 1 Гб шина 256 bit
3 раза запускал алгоритм на 100 000 строк.
Расчетная часть отрабатывает за 3.8 сек - тут проблем нет.
Но вот с выводом данных на экран беда - лопатит больше 20 мин., ни разу не дождался...)))
Причем система загружена на 25 процентов всего, Excel в ОЗУ занимает 800 Мб...
Решил спуститься пониже - на 50 000 строк.
Расчетная часть отработала за 2.01 сек - нормально.
Вывод данных - 1094 сек

Сейчас прогнал на более мощном.
Конфигурация такая -Win10 64, OЗУ 8гб, i5-7500 3.4 ГГЦ, видяха встроенная HD Graphics 630.
на 10 000строк - обработка данных - 0,218 сек, вывод данных - 17 сек
на 50 000 строк - обработка данных - 1 сек., вывод данных на экран - 660 сек.
на 100 000 строк - обработка данных-2,01 сек, вывод данных на экран - 2435 сек.
То есть обработка на высоте, с выводом беда.
Обработка данных - зависимость просто линейная.
Вывод данных - прямо таки настоящая экспонента...)))
Вот как то вот так...)))
Изменено: Джек Восмеркин - 16.04.2019 11:28:24
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Модернизация макроса. Заполнение ячеек , вставка строк - по условию., Модернизация макроса. Заполнение ячеек , вставка строк - по условию.
 
Хотел разобраться и сделать сам - но нету пока того вагона времени.
Обращаюсь к специалистам.

Макрос вставляет данные на лист из другого листа.
По условию надо дополнительно заполнить ячейки, вставить строки из других листов.
Желательна скоростное решение(массивы, словари) - как получится.
Более подробно - в прикрепленном файле.
Неплохо было бы управиться до понедельника
Изменено: Джек Восмеркин - 13.04.2019 06:55:09
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Использование циклов в массивах. Не копируются, не вставляются данные из массива.
 
Добрый день!

Только осваиваю массивы, написал макрос.
Сегодня уже не один десяток раз правлю этот макрост, так наисправлял - в итоге перестал работать и потерял нить..((
Помогите разобраться,  еще только вникаю в массивы...

Кратко суть такова: все листы связаны по ключу id.
В Лист1, в столбе 5 и 7, при совпадении ключа, вставляется email из Лист4.
Потом, в Лист1, при совпадении ключа в Лист3(если 2 одинаковых id), строка Лист1 дублируется и вставляется в Лист1 с таким же id.

Прошу тапками не бросаться.
Кросс
Изменено: Джек Восмеркин - 12.04.2019 17:00:14
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Медленная работа штатного цикла Do WHILE при копировании строк
 
Добрый день!

Лист1 содержит 50 столбцов, 60 строк - данным кодом копируется построчно на Лист2 18 секунд.
Хотя по идее должны копироваться за 0.5 сек
Код
n = 1
Do While Worksheets("Лист1").Cells(n, 1) <> ""
   Worksheets("Лист1").Rows(n).Copy Worksheets("Лист2").Range("A" & n)
   'MsgBox Sheets("Лист1").Cells(n, 1).Value & " = " & Sheets("Лист2").Cells(n, 1).Value
n = n + 1
Loop

Укажите, пжлст, где собака порылась...
Кто виноват и что делать?...)))

Традиционное спасибо всем откликнувшимся!
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
[ Закрыто] Ускорение. Перестройка..., Ускорение. Перестройка...Цикл копирование строк из Лист1 в Лист2
 
Добрый день!
Лист1 содержит 50 столбцов, 60 строк - данным кодом копируется построчно на Лист2 18 секунд.
Хотя по идее должны копироваться за 0.5 сек
Код
n = 1
Do While Worksheets("Лист1").Cells(n, 1) <> ""
   Worksheets("Лист1").Rows(n).Copy Worksheets("Лист2").Range("A" & n)
   'MsgBox Sheets("Лист1").Cells(n, 1).Value & " = " & Sheets("Лист2").Cells(n, 1).Value
n = n + 1
Loop


Укажите, пжлст, где собака порылась...
Как ускориться и где перестроиться...)))


Традиционное спасибо всем откликнувшимся!
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Программное включение\выключение разрешения выполнять макросы., Программное включение\выключение разрешения выполнять макросы.
 
Добрый день!

Включил макрорекордер, пошел выключил макросы в Центре управления безопасностью Excel.
Рекордер ничего не записал - макрос пустой...(((
Как так?

Можно все таки отработать это программно???
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Копирование строк с обработкой, Копирование в активный лист строк из других листов, с обработкой.
 
Доброго всем дня, друзья!

Встала задача - по кнопке просто скопировать на активный лист строки из других листов, с обработкой.
Но, поскольку, количество полей в обрабатываемых листах оказались немного(их немного - но они есть) несоответствующим - непонятно, как сделать что бы данные не плыли и вставали правильно.
Не все так просто оказалось для меня, поплыл.
В примере, в коде кнопки - условия, постановка.
Свое творчество на эту тему, плюнул и  из кода кнопки убрал...))) - дабы народ не смеялся(ну не гуру я, не гуру...)
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Ускорение перебора, Как ускорить перебор ячеек
 
Доброго всем дня!

Код рабочий, но данных, однако, добавилось немного...))
Код
For j = 1 To 800
    For i = 1 To 4000
         If StrComp(Sheets("Город").Range("A" & j), Sheets("Улица").Range("A" & i), vbTextCompare) = 0 Then
            Sheets("Улица").Range("D" & j).Interior.Color = 0
             Exit For
        Else
            Sheets("Улица").Range("D" & j).Interior.Color = 255
        End If
    Next i
Next j
Покажите более скоростные методы,  какой прирост скорости даст.
В массивах не силен...(

Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Из события книги запустить событие листа
 
Приветствую всех!

Вводная: на листе "Лист1", при наступлении события  Worksheet_Activate() - код заливает ячейки цветом.

Вопрос:
Можно ли из события "Workbook_BeforeClose"
1. Обратиться к листу "Лист1,
2. Запустить событие Worksheet_Activate()
   Поскольку код обернут в событие Worksheet_Activate() - ячейки должон покрасить...
3. Вернуться в событие Workbook_BeforeClose
4. Продолжить работу-посчитать залитое.

Какие есть варианты?
Может код события переместить в функцию или процедуру - и потом вызывать из события Workbook_BeforeClose???
Хотя в этом я пока не сильно продвинут - есть недопонимания работы этих механизмов

Первое что пришло в голову - не работает
Код
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
   Private Sub Worksheet_Activate()
       ... Код_Заливаем ячейки
   End Sub
... Код_Считаем честно залитое
End Sub

Надеюсь на помощь коллективного разума...
Изменено: Джек Восмеркин - 29.03.2019 11:50:51
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Устранение дубликатов в 4-уровневым связанном выпадающем списке
 
Приветствую многоуважаемых форумчан!

Есть 4-уровневый связанный выпадающий список, реализован штатными(Диспетчер имен и проверка данных...) средствами Excel.
Есть проблема - устранения дубликатов в этом 4-уровневом связанном выпадающем списке.
Условие - не модифицировать вкладку "справочник" и желательно без добавления новых вкладок.
Есть ли относительно простое решение этой проблемы средствами Excel?

Если приемлемого решения нет - возможно ли реализация средствами VBA и как это примерно будет выглядеть?
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
VBA. Получение последнего дня текущего месяца
 
Приветствую многоуважаемых форумчан!

Есть вот это на VBA, EXCEL 2016
Код
UserForm2.TextBox1 = Date
UserForm2.TextBox2 = WorksheetFunction.EoMonth(Date, 0)
В TextBox2 EoMonth() возвращает число 43524.
Как заставить функцию EoMonth() просто возвратить последний день текущего месяца в формате даты?
Изменено: Джек Восмеркин - 01.02.2019 12:42:00
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
При формировании строки SQL-запроса объединить две даты в одно поле, При формировании строки SQL-запроса объединить две разные даты из двух переменных в одно поле
 
Приветствую уважаемых форумчан!
Не могу добиться что бы в строке запроса, в одном поле  встали две даты(& DateBeg1 & "-" & DateEnd1 &), через дефис...
Пробовал даже вставлять CAST и CONVERT, надеясь что SQL-сервер сам разберется и вернет то, что надо - не помогло.
То есть единичную дату отрабатывает и вставляет в одно поле, но вот вторую дату  - уже нет.
Может кто делал подобное, подскажите...
Код
Private Sub CommandButton2_Click()
'---------      Формирование результатов - послать на сервер запрос      ---------'
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim ConnectionString As String
Dim DateBeg As String, DateEnd As String, st1 As String, st2 As String, DateBeg1 As String, DateEnd1 As String

'Формируем и открываем строку подключения, подключаемся к SQL-серверу '
cn.ConnectionString = "Provider=sqloledb;Data Source=10.52.1.72;Initial Catalog=OMNI_Report;Integrated Security=SSPI;" 'Строка соединения с SQL-сервером'
cn.Open ConnectionString

DateBeg = Format$(UserForm1.TextBox1, "'YYYYMMDD'")
DateEnd = Format$(UserForm1.TextBox2, "'YYYYMMDD'")
'DateBeg1 = Format$(UserForm1.TextBox1, "'YYYYMMDD'")
'DateEnd1 = Format$(UserForm1.TextBox2, "'YYYYMMDD'")
'MsgBox TypeName(DateEnd)
MsgBox DateBeg & " - " & DateEnd, vbOKOnly, "ОП"
DateBeg1 = """" & DateBeg & """" '& " _ " & DateEnd
MsgBox DateBeg1
MsgBox TypeName(DateBeg1)


st1 = "'%" & UserForm1.ComboBox1 & "%'" ' Подготовка переменной к иcпользованию в LIKE

rs.Open "SELECT ROW_NUMBER() OVER(ORDER BY Исполнитель), " _
      & "Группа, Исполнитель, " _
      & DateBeg1 & ",SUM(затраты), " _
      & "'', '','' " _
      & "FROM Труд " _
      & "WHERE Исполнитель LIKE " & st1 & "" _
      & "AND Дата BetWeen " & DateBeg & " AND " & DateEnd & "" _
      & "GROUP BY Группа, Исполнитель " _
      & "ORDER BY 3", cn, adOpenStatic, adLockReadOnly

'----     Копирование RecordSet на РАБОЧИЙ лист    ------'
Worksheets("Лист1").Range("A5").CopyFromRecordset rs

rs.Close
cn.Close

End Sub
Изменено: Джек Восмеркин - 26.11.2018 14:34:34
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Поиск дубликатов и пустых ячеек в произвольном столбце средствами VBA, Поиск и выделением их цветом. дубликатов и пустых ячеек в произвольном столбце средствами VBA
 
Приветствую уважаемых форумчан!

В столбце планируется серийники - дубликаты и пустые ячейки не допускаются.
Макрос из макрорекордера дубликаты подсвечивает, но на пустые ячейки не реагирует:
Код
Selection.FormatConditions.AddUniqueValues
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    Selection.FormatConditions(1).DupeUnique = xlDuplicate
    With Selection.FormatConditions(1).Font
        .Color = -16383844
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 13551615
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
Изменено: Джек Восмеркин - 09.10.2018 14:45:36
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Сравнение ячеек в столбце одного листа с ячейками столбца в другом листе, несовпадение выделить красным, Сравнить ячейки столбца, столбцы А и B на разных листах.
 
Приветствую уважаемых форумчан!
Прошу помочь, запутался...

Есть листы "Sheet1"(главный) и "Категория КЕ"(подчиненный).
В листе Sheet1 надо перебрать ячейки столбца А, проверить каждую ячейку этого столбца на соответствие в листе "Категория КЕ" столбца G(G2:G100).
Если соответствие есть - соответствующая ячейка листа "Sheet1" желтая, Если соответствия нет - эта ячейка красная...
Вроде должно быть 2 цикла, внешний и внутренний  - каждую ячейку проверять полным перебором в подчиненной таблице..
Но что то заплюхался совсем..код что то не работает так как надо...
Код
For j = 5 To iLastRow
    For i = 1 To iLastRow1
        If Sheets("Sheet1").Range("G" & j) = Sheets("Категория КЕ").Range("A" & i) Then
            Sheets("Sheet1").Range("G" & j).Interior.ColorIndex = 0
        Else
        'MsgBox Range("G" & j)
            Sheets("Sheet1").Range("G" & j).Interior.ColorIndex = vbRed 'vbBlue
        End If
    Next i
Next j

Изменено: Джек Восмеркин - 08.10.2018 13:57:10
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
При выборе CheckBox не перемещать туда фокус, При выборе CheckBox оставить фокус на предыдущем ComboBox
 
Приветствую уважаемых форумчан!

У CommandButton есть такое замечательное свойство - TakeFocusOnClick.
Иногда удобно не передавать фокус на кнопку, оставив его на предыдущем контроле.
У CheckBox такого аналогичного свойства нет, по крайней мере не нашел...

Какие есть способы, идеи, обходные маневры -  при выборе CheckBox, оставлять фокус на предыдущем контроле.
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Передача значения переменной между combobox-ами, Значение переменной не передается между контролами
 
Приветствую уважаемых форумчан!

Пользуюсь для обхода контролов на форме вот  такой конструкцией
Код
Private st As String
SPrivate Sub CommandButton1_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Worksheets("Config").Cells(3, 2) & "Project.mdb; Jet OLEDB:Database;"
'Dim st As String'
'Static st As String'
   
If ActiveControl.Name = "ComboBox1" Then
   st=ComboBox1 'Значение комбобокса в переменную'
   MsgBox st & "1"
End If

If ActiveControl.Name = "ComboBox2" Then
   msgbox st & "2"   ' при переходе в ComboBox2 - переменная st очищается, Не передается (
cn.Open ConnectionString
'значение переменной st не передается в запрос'
rs.Open "SELECT * FROM Itog WHERE Status='" & st & "' AND Kod_zak='" & ComboBox2 & "' AND Kod_zak IS NOT NULL ORDER BY 1", cn, adOpenStatic, adLockReadOnly
End If
End Sub

Пытаюсь значение из ComboBox1 передать в переменную st - передается.
При переходе в Combobox2 переменная st очищается - не передается значение.
Видимо, что то неверно делаю...
Подскажите, как передавать значения переменной между контролами. И можно ли таким образом...
Изменено: Джек Восмеркин - 14.09.2018 09:16:45
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Ошибка при сравнение дат в запросе, В запросе, в блоке WHERE не сравниваются даты
 
Приветствую уважаемых форумчан!
Не могу в WHERE сравнить даты в запросе, выдает сообщение  " Число содержит синтаксическую ошибку в выражении запроса 'Cdate(BegProekt>01.01.201)' ".
Проверил содержание переменной DateBeg - все верно, тип Date, содержит значение 01.01.2018.
Однако в сообщение дата обозвана числом и почему то обрезана справа до 01.01.201 - выглядит подозрительно.
И почему ошибка именно синтаксическая - непонятно...
Перебрал варианты которые знал - не помогло...
Помогите разобраться, не могу понять где ошибся в строке:
Код
rs.Open "SELECT * FROM Itog WHERE CDate(BegProekt) >" & DateBeg & " ORDER BY 1", cn, adOpenDynamic, adLockBatchOptimistic

Сам текст, вроде ничего подозрительного
Код
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

Dim DateBeg As String

DateBeg = UserForm.TextBox1
MsgBox TypeName(DateBeg)
MsgBox DateBeg

cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Worksheets("Config").Cells(3, 2) & "Project.mdb; Jet OLEDB:Database;"
cn.Open ConnectionString

DateBeg = CDate(UserForm.TextBox1)
MsgBox TypeName(DateBeg)
MsgBox DateBeg

rs.Open "SELECT * FROM Itog WHERE CDate(BegProekt) >" & DateBeg & ", cn, adOpenDynamic, adLockBatchOptimistic
 'rs.Open "SELECT * FROM Itog WHERE BegProekt >" & CDate(UserForm.TextBox1) & ", cn, adOpenDynamic, adLockBatchOptimistic'

End Sub
Изменено: Alexban65 - 11.09.2018 15:26:14
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Как получить в переменную значение из combobox на форме через ActiveControl?, Как правильно передать значение переменной в запрос
 
Код
Private Sub CommandButton1_Click()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cntrl As String
Dim cl As String

cl = ComboBox2
cntrl = "UserForm." & UserForm.ActiveControl.Name & ".Text"
MsgBox cntrl
MsgBox cl

cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\TMP\Project.mdb; Jet OLEDB:Database;"
cn.Open ConnectionString
'rs.Open "SELECT * FROM Itog WHERE id1='" & cl & "' AND id1 IS NOT NULL ORDER BY 1", cn, adOpenDynamic, adLockBatchOptimistic
rs.Open "SELECT * FROM Itog WHERE id1 like '" & cntrl & "' AND id1 IS NOT NULL ORDER BY 1", cn, adOpenDynamic, adLockBatchOptimistic

ActiveSheet.Range("B8").CopyFromRecordset rs

rs.Close
cn.Close
End Sub
Как правильно передать в запрос значение переменной?
Строка работает
Код
rs.Open "SELECT * FROM Itog WHERE id1='" & cl & "' AND id1 IS NOT NULL ORDER BY 1", cn, adOpenDynamic, adLockBatchOptimistic
А эта строка не работает
Код
rs.Open "SELECT * FROM Itog WHERE id1 like '" & cntrl & "' AND id1 IS NOT NULL ORDER BY 1", cn, adOpenDynamic, adLockBatchOptimistic
Видимо, переменная передает в запрос не значение(которое надо сравнить), а просто текст переменной...
Изменено: Alexban65 - 10.09.2018 12:52:29
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Как из нескольких комбобоксов на форме выбрать активный комбобокс
 
Приветствую!

На форме планируется несколько комбобоксов - как по кнопке "Получить результат" взять в работу именно активный комбобокс?
Должна быть, наверно, какая то конструкция, типа:
IF combobox_1 активный THEN берем значение combobox_1 и работаем с ним
ELSE combobox_2 активный THEN берем значение combobox_2 и работаем с ним
ELSE combobox_3 активный THEN берем значение combobox_3 и работаем с ним
...
ENDIF
Изменено: Alexban65 - 09.09.2018 19:10:23
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Страницы: 1
Наверх