Пользовательская форма, передающая открытые переменные в другой макрос - бесконечный цикл
Ниже код предназначен для:
1) прокрутите папку.xlsb с помощью цикла while wend, нажав кнопку CmdFile_Click
2) после отображения нужных файлов выберите или отмените файл, нажав CmdSI_Click
или же CmdNo_Click
3) как только файл выбран, запустите макрос....(что-то сделать).. нажав CmdVai_Click
В промежутке между шагами 1 и 2 процесс выполняется с использованием публичной переменной. MACROSTOP
а также DoEvents
проблема возникает после того, как вся работа выполнена, и нужно выбрать другой файл для работы.
Я не могу выбрать его, потому что vba работает в бесконечном цикле, и мне нужно нажать ctrl+break, чтобы остановить макрос или, что хуже, открыть мастер диспетчера задач, нажав ctrl+alt+del. Я думаю, что проблемы расположены в строковых строках кода спасибо за вашу драгоценную помощь и доступность
Public MACROSTOP As Boolean, Nomefile As String, Nomefolder As String '<----
Private Sub CmdFile_Click()
'Dim Nomefile As String, Nomefolder As String
If TxtMacro.Value = "" And txtMese.Value = "" Then
MsgBox ("INSERIRE MACRO E MESE")
MsgBox ("PER MACRO SITUAZIONE (3) E FIFO (4), IL MESE è 0")
Exit Sub
End If
Nomefolder = ActiveWorkbook.Path & "\"
Nomefile = Dir(Nomefolder & "\*.xlsb")
While Nomefile <> ""
Label1.Caption = Nomefile
MACROSTOP = True '<-----------------
Do While MACROSTOP '<-----------------
DoEvents '<-----------------
Loop '<-----------------
Nomefile = Dir
Wend
UserForm1.Hide
'Exit Sub
End Sub
Private Sub CmdNo_Click()
MACROSTOP = False
End Sub
Private Sub CmdSI_Click()
CmdSI.Caption = "V"
'Call CmdVai(Nomefile, Nomefolder)
End Sub
Private Sub CmdVai_Click()
MACROSTOP = False
Dim Fileaperto As Workbook
'Nomefolder = ActiveWorkbook.Path & "\"
'Nomefile = Dir(Nomefolder & "\*.xlsb")
A = TxtMacro.Value
B = txtMese.Value
Set Fileaperto = Workbooks.Open(Nomefolder & Nomefile)
'-----------------------MACRO 1= SOMMA AGGREGATO MENSILE; 2= SITUAZIONE; 3= FIFO
If A > 3 Or A < 1 Then
MsgBox ("VALORE SCELTA MACRO ERRATA")
Exit Sub
ElseIf A = 1 Then 'prima MACRO
' ------------------------MESE: NUMERO DA 1 A 12
If B = "" Then
MsgBox ("INSERIRE MESE")
Exit Sub
ElseIf B < 1 Or B > 12 Then
MsgBox ("VALORE MESE ERRATO")
Exit Sub
Else: B = B + 1
If B = 2 Then
Worksheets(B).Select
Application.run "'" & Nomefile & "'!listaIdprodotto"
Application.run "'" & Nomefile & "'!sommaSe"
Application.DisplayAlerts = False
ActiveWindow.Close savechanges:=True
ElseIf B = 3 Then
Worksheets(B).Select
Application.run "'" & Nomefile & "'!listaIdprodottoFebb"
Application.run "'" & Nomefile & "'!sommaSeFeb"
Application.DisplayAlerts = False
ActiveWindow.Close savechanges:=True
ElseIf B = 4 Then
Worksheets(B).Select
Application.run "'" & Nomefile & "'!listaIdprodottoMarz"
Application.run "'" & Nomefile & "'!sommaSeMarz"
Application.DisplayAlerts = False
ActiveWindow.Close savechanges:=True
FROM B=5 TO 12 OMITTED TO SAVE SPACE
ElseIf B = 13 Then
Worksheets(B).Select
Application.run "'" & Nomefile & "'!listaIdprodottoDic"
Application.run "'" & Nomefile & "'!sommaSeDic"
Application.DisplayAlerts = False
ActiveWindow.Close savechanges:=True
End If
End If
ElseIf A = 2 Then 'seconda macro
txtMese.Locked = True
Worksheets(14).Select
Application.run "'" & Nomefile & "'!EsportaAsituazione"
Application.run "'" & Nomefile & "'!REFRESH"
Application.DisplayAlerts = False
ActiveWindow.Close
ElseIf A = 3 Then 'terza macro
txtMese.Locked = True
Worksheets(15).Select
Application.run "'" & Nomefile & "'!FIFO"
Application.DisplayAlerts = False
ActiveWindow.Close
End If
MACROSTOP = False '<-----------------
Unload Me '<------------------
'Exit Sub
End Sub
Private Sub UserForm_Click()
End Sub