Мне нужна помощь, заканчивая некоторый код, у меня есть кнопка на моем листе (NewMonth), которая вызывает UserFrom3, а затем запускает больше кода после заполнения пользовательской формы и копирования данных на лист.Userfrom X button stop code
UserForm3 - это выбор даты. Как только это было заполнено в нем, которое заполняет ячейки на листе с датой, затем запускает остальную часть кода с помощью кнопки NewMonth.
Проблема, с которой я сталкиваюсь, заключается в том, что если кто-то нажал кнопку X на пользователе, она все еще запускает код с кнопки NewMonth.
Как я могу заставить это остановиться?
Ниже приведен код кнопки NewMonth и пользовательской формы.
UserForm:
Private Sub btnDateAdd_Click()
Dim rDate As Range, rDate2 As Range
Dim Month As String, Year As String
Month = ComboBox1.Value
Year = TextBox1.Value
Set rDate = Sheets("PAYMENT FORM").Range("C13")
Set rDate2 = Sheets("PAYMENT FORM").Range("L13")
If ComboBox1.Value & TextBox1.Value = "" Then
MsgBox "Please select the Payment Month & Year required!"
Exit Sub
ElseIf ComboBox1.Value = "" Then
MsgBox "Please select the Payment Month required!"
Exit Sub
ElseIf TextBox1.Value = "" Then
MsgBox "Please select the Payment Year required!"
Exit Sub
Else
rDate.Value = Format((28 & " " & Month & " " & Year), "dd mmm yy")
rDate2.Value = Format((28 & " " & Month & " " & Year), "mmmm yyyy")
End If
Unload Me
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim iCtr As Long
For iCtr = 1 To 12
Me.ComboBox1.AddItem Format(DateSerial(2007, iCtr, 28), "mmmm")
Next iCtr
End Sub
NewMonth Кнопка:
Private Sub btnNewMonth_Click()
Dim front As Worksheet
Dim MyPath As String, myRange As Range, myDate As Range
Dim rDate As Range, rDate2 As Range, myLabour As Range
With Application
.ScreenUpdating = False
.EnableEvents = False
.CutCopyMode = False
End With
Set myRange = Sheets("PAYMENT FORM").Range("L9") 'Payment No
Set myDate = Sheets("PAYMENT FORM").Range("L13") 'Date "MMMM YYYY"
Set rDate = Sheets("PAYMENT FORM").Range("C13")
Set rDate2 = Sheets("PAYMENT FORM").Range("L13")
MyPath = ActiveWorkbook.Path
ActiveWorkbook.Sheets("Details").Rows(2 & ":" & Sheets("Details").Rows.Count).ClearContents 'This clears all data below the header in Details
ActiveWorkbook.Sheets("Global").Rows(3 & ":" & Sheets("Global").Rows.Count).ClearContents 'This clears all data below in Global
UserForm3.Show
UserForm3.Hide
With ActiveSheet
With ActiveSheet
.Range("N47").Copy 'Copies total to date Value
.Range("N49").PasteSpecial xlPasteValues 'Pastes total to date Value to Total Last Payment
End With
With ActiveSheet
.Range("G43").Copy 'Copies This Months Labour
.Range("G44").PasteSpecial xlPasteValues 'Pastes This Months Laboue into Last Payment
End With
With ActiveSheet
.Range("G56").Copy 'Copies Total VAT to Date
.Range("G57").PasteSpecial xlValues 'Pastes Total VAT to Date into Last Payment
End With
With ActiveSheet
.Range("N18:N34").Copy 'Copies CC Code Gross Value
.Range("J18:J34").PasteSpecial xlValues 'Pastes CC Code Gross Value into Previous
End With
With ActiveSheet
myRange.Value = myRange.Value + 1 'Increases Payment No# by 1
Range("A7").Activate 'Selects Cell A7
End With
End With
ThisWorkbook.SaveAs Filename:=MyPath & "\" & "Payment" & " " & myRange.Value & " " & myDate.Text & ".xlsm" 'This saves a new document in our naming convention
End Sub
Это бессмысленно: 'Если CloseMode = vbFormControlMenu Then Unload Me', так как это произойдет в любом случае без какого-либо кода. Ваша форма никогда не должна разгружаться - код вызова должен это сделать. Все ваши коды разгрузки должны просто скрыть форму и установить переменную, чтобы указать, была ли форма отменена или нажата кнопка «Добавить». Затем вызывающий код должен проверить эту переменную и делать все, что требуется. – Rory