Excel Userform按钮未调用模块上的代码

Excel Userform按钮未调用模块上的代码,excel,vba,userform,Excel,Vba,Userform,我有一个Userform,下面的代码附在“OK”按钮上。除了最后4行之外,所有代码都可以正常工作。与下面显示的OK按钮关联的完整代码,不工作的代码为: Dim SheetName As String SheetName = ActiveSheet.Name Call SheetCleanup Worksheets(SheetName).Activate 它似乎完全忽视了这一点。SheetCleanup位于一个模块中,我怀疑从用户表单到模块是否存在问题?但我对此并不熟悉 完整代码如下: Priv

我有一个Userform,下面的代码附在“OK”按钮上。除了最后4行之外,所有代码都可以正常工作。与下面显示的OK按钮关联的完整代码,不工作的代码为:

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的代码吗?您好,我现在已经完成了,您可以尝试使用“Module1.SheetCleanup”命令而不是“Call”命令(不加引号,将Module1更改为您的模块调用的任何模块。这没有做任何更改。您的
SheetCleanup
似乎可以在所有工作表上工作(除了您的第一个
Case
语句中的工作表)在
ActiveWorkbook
中,这是您所期望的吗?您期望的ActiveWorkbook是什么?使用此代码的工作簿?还是另一个打开的工作簿?请尝试限定您的工作簿..您希望使用的工作簿,而不是使用
ActiveWorkbook
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