Передача результата пользовательской формы в кодовую переменную vba

У меня есть код, который считает файлы в папке, если они содержат определенную строку в своем имени.

Например: если я хочу, чтобы он посчитал файлы с близкими по их имени (Close_26_03_2003.csv).

В настоящее время код считывает значение ячейки на листе и ищет эту строку в имени файла с помощью (функция InStr). Проблема в том, что я должен написать тип файла в ячейке.

Я пытаюсь создать пользовательскую форму с тремя кнопками выбора (открыть, закрыть и отменить). Для open он устанавливает строку, равную open, и ищет файлы, которые имеют его по имени (так же, как и для close). Отмена заканчивает саб.

Проблема в том, что я не знаю, какой код я должен использовать в пользовательской форме для этого, и не знаю, как передать его в код, который считает файлы (я думаю о присвоении его переменной).

Код как есть:

Sub CountFiles3()

Dim path As String, count As Integer, i As Long, var As Integer
Dim ws As Worksheet
Dim Filename As String
Dim FileTypeUserForm As UserForm1

Application.Calculation = xlCalculationManual

path = ThisWorkbook.path & "\*.*"
Filename = Dir(path)

'the problem is here:
'x = user form result***************
    'if cancel = true, end sub



Set ws = ThisWorkbook.Sheets("FILES")
i = 0
Do While Filename <> "" 
    'var = InStr(Filename, ws.Cells(2, 7).Value)  'this is current code, it checks if the cell has open or close
    var = InStr(Filename, x)

    If var <> 0 Then
        i = i + 1
        ws.Cells(i + 1, 1) = Filename
        Filename = Dir()

    Else: Filename = Dir()
    End If

Loop

Application.Calculation = xlCalculationAutomatic

ws.Cells(1, 2) = i

MsgBox i & " : files found in folder"
End Sub

И это мой текущий код формы пользователя:

Private Sub Cancel_Click()
Me.Tag = 3 ' EndProcess
Me.Hide
End Sub

Private Sub ClosingType_Click()
Me.Tag = 2 ' "CLOSING"
Me.Hide
End Sub

Private Sub OpeningType_Click()
Me.Tag = 1 ' "OPENING"
Me.Hide
End Sub

Есть идеи?

1 ответ

Решение

Добавить следующий код к вашему CountFiles3() sub в разделе "проблема здесь:":

Dim x As String
x = GetValue
If x = "end" Then Exit Sub

затем добавьте следующий код в любой модуль:

Function GetValue()
    With MyUserForm '<--| change "MyUserForm " to your actual UserForm name
        .Show
        GetValue = .Tag
    End With
    Unload MyUserForm '<--| change "MyUserForm " to your actual UserForm name
End Function

и измени свой Userform кодировать как follwos

Private Sub Cancel_Click()
    Me.Tag = "end" ' EndProcess
    Me.Hide
End Sub

Private Sub ClosingType_Click()
    Me.Tag = "close" ' "CLOSING"
    Me.Hide
End Sub


Private Sub OpeningType_Click()
    Me.Tag = "open" ' "OPENING"
    Me.Hide
End Sub
Другие вопросы по тегам