2015-09-03 2 views
0

Мне нужна помощь, заканчивая некоторый код, у меня есть кнопка на моем листе (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 
+0

Это бессмысленно: 'Если CloseMode = vbFormControlMenu Then Unload Me', так как это произойдет в любом случае без какого-либо кода. Ваша форма никогда не должна разгружаться - код вызова должен это сделать. Все ваши коды разгрузки должны просто скрыть форму и установить переменную, чтобы указать, была ли форма отменена или нажата кнопка «Добавить». Затем вызывающий код должен проверить эту переменную и делать все, что требуется. – Rory

ответ

0

Я ищу через несколько сайт и пытался несколько soultions и я сумел заставить его работать с кодом ниже.

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
    If CloseMode = 0 Then 
     End 
    End If 
End Sub 
+0

Просто имейте в виду, что использование 'End' похоже на выключение компьютера, вытаскивая его. Все переменные потеряют свои значения. – Rory

+0

Рори, знаете ли вы, как лучше его закодировать? благодаря – atame