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

Страницы: 1
Сложное условие в VBA, Подскажите в чем разница
 
Добрый день, уважаемые форумчане.
Подскажите в чем разница в записи сложного условия IF, почему в двух вариантах (с добавлением переменной) оператор проходит верно, а без - нет?

Код
Function ChekKorridors()
Dim a As Byte, b As Byte, c As Byte, d As Byte
a = ThisWorkbook.Worksheets("Temp and RH").Cells(7, 9)
b = ThisWorkbook.Worksheets("Temp and RH").Cells(7, 10)
c = ThisWorkbook.Worksheets("Temp and RH").Cells(7, 11)
d = ThisWorkbook.Worksheets("Temp and RH").Cells(7, 12)

'         1 вариант - отрабатывает верно

    If UserForm1.ComboBox2.Value < a Then
        MsgBox "Entered parameters (1) are out of range", vbCritical, "Error"
    End If

    If UserForm1.ComboBox4.Value > b Then
        MsgBox "Entered parameters (2) are out of range", vbCritical, "Error"
    End If

    If UserForm1.ComboBox3.Value < c Then
        MsgBox "Entered parameters (3) are out of range", vbCritical, "Error"
    End If

    If UserForm1.ComboBox5.Value > d Then
        MsgBox "Entered parameters (4) are out of range", vbCritical, "Error"
    End If
    
'         2 вариант - отрабатывает верно

    If UserForm1.ComboBox2.Value < a _
    Or UserForm1.ComboBox4.Value > b _
    Or UserForm1.ComboBox3.Value < c _
    Or UserForm1.ComboBox5.Value > d Then
        MsgBox "Entered parameters are out of range", vbCritical, "Error"
        ChekKorridors = 0
    Else
        ChekKorridors = 1
    End If
    
'         3 вариант - отрабатывает не верно

    If UserForm1.ComboBox2.Value < ThisWorkbook.Worksheets("Temp and RH").Cells(7, 9).Value _
    Or UserForm1.ComboBox4.Value > ThisWorkbook.Worksheets("Temp and RH").Cells(7, 10).Value _
    Or UserForm1.ComboBox3.Value < ThisWorkbook.Worksheets("Temp and RH").Cells(7, 11).Value _
    Or UserForm1.ComboBox5.Value > ThisWorkbook.Worksheets("Temp and RH").Cells(7, 12).Value Then
        MsgBox "Entered parameters are out of range", vbCritical, "Error"
        ChekKorridors = 0
    Else
        ChekKorridors = 1
    End If

End Function
Пауза в цикле
 
Цитата
написал:
а зачем там вообще цикл?
если нужна реакция на нажатую CommandButton1?
вот с этим и работайте. нужно понимать какой раз нажата кнопка, заведите глобальный счетчик, увеличивайте его в теле
Private Sub CommandButton1_Click()
....
End Sub
там же выполните все необходимое и так, столько бы раз кнопку не нажал пользователь и без всяких циклов
не нужно пытаться горбатого плотно прислонить к стене, ничего из этого не получится)
В конечном счете так и сделал.
Всем огромное спасибо кто отозвался!
Пауза в цикле
 
Цитата
написал:
Цитата
необходимо забрать значение с textbox'а.
запрашивать можно inputbox
да, я в курсе.
просто хотелось иметь более гибкое решение, с возможностью в дальнейшем прикрутить listbox, возможность редактирования и т.д.
Пауза в цикле
 
Цитата
написал:
А пауза для чего? Что хотите делать во время этой паузы?
Мне с каждой итерации необходимо забрать значение с textbox'а.

Я хотел циклом (от 1 до n) создать соответствия номера итерации к значению введенному в textbox.

простым языком: я инициализирую UserForm с начальным содержанием Label - "введите значение 1", юзер в  textbox вводит значение и нажимает кнопку сохранить. Значение сохраняется в массиве, а скрипт с циклом переходит к следующей итерации -  textbox чищу, содержание Label меняется на  "введите значение 2", юзер в  textbox вводит следующее значение и нажимает кнопку сохранить... и т.д. до итерации n

В итоге я должен получить соответствия:
итерация 1 – значение А1,
итерация 2 – значение А2
и т.д.
Изменено: Timofey0801 - 29.06.2022 05:16:47
Пауза в цикле
 

Добрый день, уважаемые форумчане!

Прошу вашей помощи в следующем вопросе:

У меня задача в открывшейся форме пройтись циклом (от 1 до n). И на каждой итерации (жмакая CommandButton1) с textbox находящегося в этой форме взять введенное значение. Чтобы получить соответствие (итерация 1 – значение А1, итерация 2 – значение А2 и т.д.)

Пробовал разные способы, вроде как DoEvents должен помочь, но что-то все не так, - цикл идет без остановки «пробегая» момент изменения textbox’а.

Свои потуги прилагаю:

Код
Option Explicit
Option Base 1
Dim globalFlag As Boolean

Private Sub UserForm_Initialize()
    Label1.Caption = "enter the name of 1 group"
End Sub

Private Sub UserForm_Activate()
Dim a, i As Integer
a = UserForm1.ComboBox2.Value
ReDim NameGroup(a)
globalFlag = False
    For i = 1 To a
        
        Label1.Caption = "enter the name of " & i & " group"
        NameGroup(i) = TextBox1.Value
        
        DoEvents
        
        ' MsgBox ("name of " & i & " group saved"), vbInformation
        If globalFlag = True Then globalFlag = False
    
    Next i
End Sub

Private Sub CommandButton1_Click()
    globalFlag = True
End Sub
Изменено: Timofey0801 - 29.06.2022 04:26:50
средствами VBA создать excel файл с макросом внутри
 
Добрый день, уважаемые форумчане.
Прошу подсказать / направить по следующему вопросу:
Поставлена задача унифицировать систему по анализу рисков разных направлений производства. Из разнообразия рисков и глубины их проработки были созданы шаблоны для преобразования в сводную таблицу. Но это не совсем удобно т.к. создают их разные подразделения, и соответственно подписывают и называют как попало, а это влечет за собой отсутствие возможности привести данные к одному целому, в своднике. Поэтому есть желание "зафиксировать" все названия  рассматриваемых рисков, а персоналу дать возможность в UserForm вводить только данные.
Простым языком:
Мне бы хотелось в первом файле, в userform заполнить начальную структуру второго файла (наименование - будет названием второго файла + указывается размерность БД), далее нажать CommandButton и запустить макрос создания файла опираясь на данные из UserForm1.


Вопрос: как мне создать новый (второй) файл с макросами и формами внутри? Что бы при открытии его, сотрудник работал уже с UserForm2.
первое что приходит в голову - подготовить и скрыть файл с нужным наполнением, а потом его просто копировать и переименовывать. Но, есть риски что в какой то момент с ним что то да случится...

Изменено: Timofey0801 - 09.06.2022 10:52:41
Выполнение кода при закрытии книги
 
1
Изменено: Timofey0801 - 05.06.2022 13:22:20 (Вопрос решен)
Поиск в массиве по маске
 
Спасибо, то что нужно!
Поиск в массиве по маске
 
Цитата
Ігор Гончаренко написал:
мой макрос именно на это и "заточен"
Прошу прощения за невнимательность.  :oops:

все работает, спасибо!
Поиск в массиве по маске
 
[USER=8380]Ігор Гончаренко[/USER, спасибо, этот вариант работает, но товар (пять одинаковых цифр) может повторяться несколько раз в массиве, с разными ключами городов и магазинов, и мне результат нужно вывести по всем вариантам "попаданий".

Как я понял, поиска по массиву, маской, нет?
Изменено: Timofey0801 - 05.06.2018 23:46:36
Поиск в массиве по маске
 
Цитата
a.i.mershik написал:
Timofey0801 , а файл пример имеется7
Цитата
vikttur написал:
Сначала Вы покажите пример в файле. Пример данных и пример резуьтата
В приложении файл пример.


вот сам код:
Код
Public Sub poisk()

Dim length, s, i, A As Long
Dim chars(), TotArr() As Variant
Dim str, CountRow As String
s = InputBox("введите значения для поиска")

CountRow = Application.CountA(ActiveSheet.Range("A:A")) - 1

ReDim TotArr(1 To CountRow) As Variant
For A = 1 To CountRow
length = Strings.Len(Cells(A + 1, 1))

    ReDim chars(1 To length) As Variant
        For i = 1 To length
            If Information.IsNumeric(Strings.Mid(Cells(A + 1, 1), i, 1)) Then
                chars(i) = Strings.Mid(Cells(A + 1, 1), i, 1)
            End If
        Next i
        str = Application.Trim(Strings.Join(chars))
        str = CDbl(str)
        TotArr(A) = str

Next A


End Sub
Изменено: Timofey0801 - 05.06.2018 13:18:05
Поиск в массиве по маске
 
Добрый день, уважаемы форумчане!
Возник следующий вопрос: есть одномерный массив в котором содержатся кодированные данные (их порядка 6500). Данные в себе содержит код товара (5 или 6 цифр) + код точки (и буквы и цифры) Задача следующая, нужно по заданным 5 цифрам (InputBox) найти все соответствия. Пробовал Mutch, Vlookup. Но как то не срослось.
Пример данных:
  • Yff56988don12
  • Vft83466zap2
  • Cva86322kiev19
  • Vft83466priluk1
Т.е. мне нужно при введении числа 83466 получить инфо по двум ячейкам массива (2 и 4).
Подскажите, может кто сталкивался с подобными задачами.
Страницы: 1
Наверх