[英]Unable to Call Subroutine
如果用戶在用戶表單中輸入有效的周數,我將無法調用子 BCD。 如果用戶輸入的周數無效或為空,則子 BCD 將執行。
我的代碼有什么問題?
Private Sub cmdOK1_Click()
Call ABC
Call BCD
End Sub
Sub ABC()
'Prompt message box when week number is empty
If Me.txtWeekNo.Value = "" Then
MsgBox "Please enter week number to print.", vbExclamation, "Print Work Order by Schedule"
Me.txtWeekNo.SetFocus
Exit Sub
End If
'Check for valid week number
LColumn = Worksheets("RIG PMS").Cells(5, Worksheets("RIG PMS").Columns.Count).End(xlToLeft).Column 'Define last column in week number
Set WeekNoRng = Worksheets("RIG PMS").Range(Cells(5, 10), Cells(5, LColumn))
If WorksheetFunction.CountIf(WeekNoRng, txtWeekNo.Value) = 0 Then
MsgBox "Invalid Week Number"
Exit Sub
Else
Unload UserForm1
End If
'Determine Column
For i = 10 To LColumn
If WorksheetFunction.CountIf(Worksheets("RIG PMS").Cells(5, i), txtWeekNo.Value) > 0 Then
Acolumn = i
End If
Next i
LRow = Worksheets("RIG PMS").Cells(Rows.Count, "I").End(xlUp).Row
Set OpenWORng = Worksheets("Open WO").Range("B3:B" & Worksheets("Open WO").Range("B" & Rows.Count).End(xlUp).Row)
For a = 7 To LRow Step 3
AA = 0
If Worksheets("RIG PMS").Cells(a, Acolumn).Value <> "" And Worksheets("RIG PMS").Cells(a, Acolumn - 2).Value = 1 Then
b = Worksheets("RIG PMS").Cells(a, 7).Value
Worksheets("Power Pack Monthly").Range("C5").Value = Worksheets("RIG PMS").Cells(a - b, 2).Value 'Asset Code
Worksheets("Power Pack Monthly").Range("C6").Value = Worksheets("RIG PMS").Cells(a - b, 3).Value 'Description
Worksheets("Power Pack Monthly").Range("P5").Value = Worksheets("RIG PMS").Cells(a, Acolumn).Value 'WO
Worksheets("Power Pack Monthly").Range("P6").Value = Worksheets("RIG PMS").Cells(a + 1, Acolumn).Value 'Proposed Date
AA = 1
End If
If Worksheets("RIG PMS").Cells(a, Acolumn).Value <> "" And Worksheets("RIG PMS").Cells(a, Acolumn - 2).Value = 2 Then
b = Worksheets("RIG PMS").Cells(a, 7).Value
Worksheets("Power Pack 6 Monthly").Range("C5").Value = Worksheets("RIG PMS").Cells(a - b, 2).Value 'Asset Code
Worksheets("Power Pack 6 Monthly").Range("C6").Value = Worksheets("RIG PMS").Cells(a - b, 3).Value 'Description
Worksheets("Power Pack 6 Monthly").Range("P5").Value = Worksheets("RIG PMS").Cells(a, Acolumn).Value 'WO
Worksheets("Power Pack 6 Monthly").Range("P6").Value = Worksheets("RIG PMS").Cells(a + 1, Acolumn).Value 'Proposed Date
AA = 1
End If
'Copy Open WO to Open WO Sheet
If WorksheetFunction.CountIf(OpenWORng, Worksheets("RIG PMS").Cells(a, Acolumn).Value) = 0 And AA = 1 Then
Worksheets("Open WO").Range("B" & Worksheets("Open WO").Range("B" & Rows.Count).End(xlUp).Row + 1).Value = Worksheets("RIG PMS").Cells(a, Acolumn).Value 'WO No.
Worksheets("Open WO").Range("C" & Worksheets("Open WO").Range("C" & Rows.Count).End(xlUp).Row + 1).Value = Worksheets("RIG PMS").Cells(a - b, 2).Value 'Asset Code
Worksheets("Open WO").Range("D" & Worksheets("Open WO").Range("D" & Rows.Count).End(xlUp).Row + 1).Value = Worksheets("RIG PMS").Cells(a - b, 3).Value 'Asset Description
Worksheets("Open WO").Range("E" & Worksheets("Open WO").Range("D" & Rows.Count).End(xlUp).Row).Value = 1 'For trigger purpose
End If
If a = LRow - 2 Then
MsgBox "Continue"
Exit Sub
End If
Next a
End Sub
Sub BCD()
MsgBox "ABC"
End Sub
錯誤再現:通過將所有過程發布在UserForm
的CodeModule
,我能夠再現問題中提到的行為。
行為原因:當周數有效時,第二個程序BCD
未運行,因為UserFrom
已按照此行卸載:
Unload UserForm1
卸載聲明中的評論說:
備注:當一個對象被卸載時,它會從內存中移除,並且與該對象關聯的所有內存都被回收。 在使用 Load 語句將其再次放入內存之前,用戶無法與對象交互,並且無法以編程方式操作該對象。
解決方案:雖然有幾種解決方案適用,但在我看來,最簡單的方法是將過程BCD
移至標准模塊測試的.
其他解決方案:
將這兩個過程移出UserForm
但必須對UserForm
對象的所有引用進行限定(即,用UserForm1
替換Me
並且對TxtWeekNo
引用必須限定為UserForm1.TxtWeekNo
)- 已測試。
而是隱藏用戶表單並在cmdOK1_Click
過程結束時將其cmdOK1_Click
。
可能還有很多其他人。
代碼位於表單的類模塊中。 它應該在標准模塊中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.