Кнопка пользовательской формы не вызывает код на модуле - PullRequest
0 голосов
/ 09 марта 2020

У меня есть пользовательская форма со следующим кодом, прикрепленным к кнопке «ОК». Весь код работает отлично, кроме последних 4 строк. Полный код, связанный с кнопкой ОК, показан ниже, код не работает:

Dim SheetName As String
SheetName = ActiveSheet.Name
Call SheetCleanup
Worksheets(SheetName).Activate

Это как если бы он полностью игнорировал его. SheetCleanup находится в модуле, и я подозреваю, что существует проблема при переходе от пользовательской формы к модулю? Но я не знаком с этим.

Полный код здесь:

Private Sub CommandButtonOK_Click()

If ComboBoxTargetEvent.Value = "" Or ComboBoxDesigner.Value = "" Or ComboBoxSignoff.Value = "" Or ComboBoxCarArea.Value = "" Or ComboBoxOriginator.Value = "" Or TextBoxNumberOfJobs.Value = "" Or ComboBoxProjectTitle.Value = "" Then _

MsgBox "You must complete all fields", vbInformation

Else:

'Go to worksheet based on Car Area
Dim CarArea As String
CarArea = ComboBoxCarArea.Value
Worksheets(CarArea).Activate

'Enter Target Event Into Column A
Columns("A").Find("", Cells(Rows.Count, "A")).Value = ComboBoxTargetEvent.Value

'Enter Project Title into column B
Columns("A").Find("", Cells(Rows.Count, "A")).Offset(-1, 1).Value = ComboBoxProjectTitle.Value

'Enter Designer name into column E
If _
ComboBoxDesigner.Value <> "Various" Then _
Columns("A").Find("", Cells(Rows.Count, "A")).Offset(-1, 4).Value = ComboBoxDesigner.Value

'Enter Sign-off name into column F
If _
ComboBoxSignoff.Value <> "Various" Then _
Columns("A").Find("", Cells(Rows.Count, "A")).Offset(-1, 5).Value = ComboBoxSignoff.Value

'Enter Originator name into column F
If _
ComboBoxOriginator.Value <> "Various" Then _
Columns("A").Find("", Cells(Rows.Count, "A")).Offset(-1, 3).Value = ComboBoxOriginator.Value

'Enter Data Formula into columns H & I
Columns("A").Find("", Cells(Rows.Count, "A")).Offset(-2, 7).Select
Columns("A").Find("", Cells(Rows.Count, "A")).Offset(-2, 7).Copy
Selection.Offset(1, 0).PasteSpecial Paste:=xlPasteFormulas
Columns("A").Find("", Cells(Rows.Count, "A")).Offset(-2, 8).Select
Columns("A").Find("", Cells(Rows.Count, "A")).Offset(-2, 8).Copy
Selection.Offset(1, 0).PasteSpecial Paste:=xlPasteFormulas


'Enter temp values into C & G
Columns("A").Find("", Cells(Rows.Count, "A")).Offset(-1, 2).Value = "ENTER DESCRIPTION HERE (CAPS LOCK ONLY)"
Columns("A").Find("", Cells(Rows.Count, "A")).Offset(-1, 6).Value = "ENTER DATE"

'Enter "N" into Job Completed
Columns("A").Find("", Cells(Rows.Count, "A")).Offset(-1, 9).Value = "N"

'Enter Data Validation List for Target Event
Dim ws As Worksheet
Dim NumberOfJobs As Long
Dim LastUsedInAA As Long
Dim range9 As Range
Set ws = ThisWorkbook.Worksheets("VBA_Data")
Set range9 = ws.Range("a:a")

LastUsedInAA = Range("A" & Rows.Count).End(xlUp).Row
NumberOfJobs = TextBoxNumberOfJobs.Value

If NumberOfJobs <> 0 Then
    Range("A" & LastUsedInAA).Select
    Selection.Resize(Selection.Rows.Count + NumberOfJobs - 1, _
    Selection.Columns.Count).Select

    With Selection.Validation
    .Delete 'delete previous validation
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Formula1:="='" & ws.Name & "'!" & range9.Address
    End With
    End If

'Enter Data Validation List for Designer
Dim LastUsedInE As Long
Dim range1 As Range
Set ws = ThisWorkbook.Worksheets("VBA_Data")
Set range1 = ws.Range("c:c")

LastUsedInE = Range("E" & Rows.Count).End(xlUp).Row
NumberOfJobs = TextBoxNumberOfJobs.Value

If NumberOfJobs <> 0 Then
    Range("E" & LastUsedInE).Select
    Selection.Resize(Selection.Rows.Count + NumberOfJobs - 1, _
    Selection.Columns.Count).Select

    With Selection.Validation
    .Delete 'delete previous validation
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Formula1:="='" & ws.Name & "'!" & range1.Address
    End With
    End If

'Enter Data Validation List for Senior Designer
Dim LastUsedInF As Long
Dim range2 As Range
Set ws = ThisWorkbook.Worksheets("VBA_Data")
Set range2 = ws.Range("b:b")

LastUsedInF = Range("F" & Rows.Count).End(xlUp).Row
NumberOfJobs = TextBoxNumberOfJobs.Value

If NumberOfJobs <> 0 Then
    Range("F" & LastUsedInF).Select
    Selection.Resize(Selection.Rows.Count + NumberOfJobs - 1, _
    Selection.Columns.Count).Select

    With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Formula1:="='" & ws.Name & "'!" & range2.Address
    End With
    End If

'Enter Data Validation List for Originator
Dim LastUsedInD As Long
Dim range5 As Range
Set ws = ThisWorkbook.Worksheets("VBA_Data")
Set range5 = ws.Range("f:f")

LastUsedInD = Range("D" & Rows.Count).End(xlUp).Row
NumberOfJobs = TextBoxNumberOfJobs.Value

If NumberOfJobs <> 0 Then
    Range("d" & LastUsedInD).Select
    Selection.Resize(Selection.Rows.Count + NumberOfJobs - 1, _
    Selection.Columns.Count).Select

    With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Formula1:="='" & ws.Name & "'!" & range5.Address
    End With
    End If

'Enter Data Validation List for Job Completed
Dim LastUsedInJ As Long
Dim range3 As Range
Set ws = ThisWorkbook.Worksheets("VBA_Data")
Set range3 = ws.Range("d:d")

LastUsedInJ = Range("J" & Rows.Count).End(xlUp).Row
NumberOfJobs = TextBoxNumberOfJobs.Value

If NumberOfJobs <> 0 Then
    Range("J" & LastUsedInJ).Select
    Selection.Resize(Selection.Rows.Count + NumberOfJobs - 1, _
    Selection.Columns.Count).Select

    With Selection.Validation
    .Delete 'delete previous validation
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Formula1:="='" & ws.Name & "'!" & range3.Address
    End With
    End If



'Multiply rows for multiple jobs
Dim LastUsedInA As Long

LastUsedInA = Range("A" & Rows.Count).End(xlUp).Row
NumberOfJobs = TextBoxNumberOfJobs.Value

If NumberOfJobs <> 1 Then
    Range("A" & LastUsedInA).Select
    Selection.Resize(Selection.Rows.Count, _
    Selection.Columns.Count + 10).Copy
    Range("A" & LastUsedInA + 1).Select
    Selection.Resize(Selection.Rows.Count + NumberOfJobs - 2, _
    Selection.Columns.Count).Select
    Selection.PasteSpecial Paste:=xlPasteValues
    Selection.PasteSpecial Paste:=xlPasteFormulas
    End If

'Clear the clipboard
Application.CutCopyMode = False

'select last cell in A
Range("A" & LastUsedInA).Select

'Clear all fields before hide
ComboBoxTargetEvent.Value = ""
ComboBoxDesigner.Value = ""
ComboBoxSignoff.Value = ""
ComboBoxCarArea.Value = ""
ComboBoxOriginator.Value = ""
TextBoxNumberOfJobs.Value = ""
ComboBoxProjectTitle.Value = ""

'Hide Window
CreateJobs.Hide
End If

Dim SheetName As String
SheetName = ActiveSheet.Name
Call SheetCleanup
Worksheets(SheetName).Activate

End Sub

Код для SheetCleanup выглядит следующим образом:

Public Sub SheetCleanup()
'Clan-up on Car Area WorkSheets
    Application.ScreenUpdating = False
    Dim sh As Worksheet

    For Each sh In ActiveWorkbook.Worksheets
        Select Case sh.Name
        Case Is = "Contents Page", "Completed", "VBA_Data", "Front Team Project List", "Mid Team Project List", "Rear Team Project List", "Acronyms"

        Case Else
            With sh
                'set zoom
                sh.Activate
                ActiveWindow.Zoom = 100

                'format columns and rows
                .Columns("g:g").NumberFormat = "dd-mm"
                .Columns("i:i").NumberFormat = "0"
                .Columns("A").ColumnWidth = 27
                .Columns("B").ColumnWidth = 50
                .Columns("C").ColumnWidth = 50
                .Columns("D").ColumnWidth = 21
                .Columns("E").ColumnWidth = 27
                .Columns("F").ColumnWidth = 21
                .Columns("G").ColumnWidth = 10
                .Columns("H").ColumnWidth = 15
                .Columns("I").ColumnWidth = 22
                .Columns("J").ColumnWidth = 17
                .Rows("1").RowHeight = 77.2
                .Rows("2").RowHeight = 10
                .Rows("3").RowHeight = 30
                .Rows("4").RowHeight = 10
                .Rows("5").RowHeight = 18
                .Columns("a:j").HorizontalAlignment = xlCenter
                .Columns("b:c").HorizontalAlignment = xlLeft
                .Rows("3").HorizontalAlignment = xlCenter
                .Rows("5").HorizontalAlignment = xlCenter
                .Range("A:J").Validation.Delete

                'set data validation for Target Event
                Dim ws As Worksheet
                Dim wsVBA As Worksheet
                Dim range1 As Range, rng As Range
                Dim LastRowTargetEvent As Long
                Set wsVBA = ThisWorkbook.Worksheets("VBA_Data")
                LastRowTargetEvent = wsVBA.Cells(.Rows.Count, "A").End(xlUp).Row
                Set range1 = wsVBA.Range("A2:A" & LastRowTargetEvent)
                Set ws = ActiveSheet
                Set rng = ws.Range("a6:a1000")
                With rng.Validation
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                        Formula1:="='" & wsVBA.Name & "'!" & range1.Address
                End With

            End With
        End Select
    Next sh

End Sub
...