Передача результата пользовательской формы в кодовую переменную 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