0

如果退出 Copier 例程,我希望整个 Private Sub 退出。所以 DoDays 例程永远不会被调用。

Sub Copier()
Dim x As String
Dim z As Integer
x = InputBox("Enter Number of Days in Month")
If x = "" Then
     MsgBox "User Pressed Cancel!" & vbCrLf & _
            "or did not enter a value!", vbOKOnly + vbInformation, _
            "Inputbox Result:"
     z = 10
     Exit Sub
ElseIf CInt(x) = 0 Then
     MsgBox "User Pressed Cancel!" & vbCrLf & _
            "or did not enter a value!", vbOKOnly + vbInformation, _
            "Inputbox Result:"
     z = 10
     Exit Sub
Else: End If
y = CInt(x) - 1
For numtimes = 1 To y
ActiveWorkbook.Sheets("Sheet1").Copy _
after:=ActiveWorkbook.Sheets("Sheet1")
Next

DoDays

End Sub



Private Sub COPY_NUMBER_Click()
COPY_NUMBER.BackColor = 12713921
Copier
' DoDays
COPY_NUMBER.BackColor = 12500670
COPY_NUMBER.Enabled = False
End Sub

Copier sub 中对 DoDays 的调用似乎不起作用,因为我确实需要退出 Private Sub,以便该按钮保持启用状态。

4

3 回答 3

0

我会将Copier过程合并到COPY_NUMBER_Click事件过程中:

Private Sub COPY_NUMBER_Click()
    COPY_NUMBER.BackColor = 12713921

    Dim x As String
    x = InputBox("Enter Number of Days in Month")
    If x = "" Then
         MsgBox "User Pressed Cancel!" & vbCrLf & _
                "or did not enter a value!", vbOKOnly + vbInformation, _
                "Inputbox Result:"
         Exit Sub
    ElseIf CInt(x) = 0 Then
         MsgBox "User Pressed Cancel!" & vbCrLf & _
                "or did not enter a value!", vbOKOnly + vbInformation, _
                "Inputbox Result:"
         Exit Sub
    End If
    y = CInt(x) - 1
    For numtimes = 1 To y
        ActiveWorkbook.Sheets("Sheet1").Copy _
                     After:=ActiveWorkbook.Sheets("Sheet1")
    Next

    DoDays

    COPY_NUMBER.BackColor = 12500670
    COPY_NUMBER.Enabled = False
End Sub
于 2017-08-30T20:53:34.913 回答
0

您可以更改Copier为布尔函数并编辑调用以测试它是否成功执行。

你的电话看起来像:

If Not Copier Then Exit Sub

你的Copier函数看起来像:

Public Function Copier() As Boolean   
  'Does Stuff
  Copier = True
End Function

确保您已Option Explicit启用。它应该在 上引发编译错误,If z = 10 Then Exit Sub因为它超出了范围。

于 2017-08-30T20:57:26.570 回答
0

创建一个全局变量并在 Copier 方法结束时对其进行更新,然后在调用 DoDays 之前对其进行检查

Private bRunDoDays As Boolean
Sub Copier()
'set to false
bRunDoDays = False
Dim x As String
Dim z As Integer
x = InputBox("Enter Number of Days in Month")
If x = "" Then
     MsgBox "User Pressed Cancel!" & vbCrLf & _
            "or did not enter a value!", vbOKOnly + vbInformation, _
            "Inputbox Result:"
     z = 10
     Exit Sub
ElseIf CInt(x) = 0 Then
     MsgBox "User Pressed Cancel!" & vbCrLf & _
            "or did not enter a value!", vbOKOnly + vbInformation, _
            "Inputbox Result:"
     z = 10
     Exit Sub
Else: End If
y = CInt(x) - 1
For numtimes = 1 To y
ActiveWorkbook.Sheets("Sheet1").Copy _
after:=ActiveWorkbook.Sheets("Sheet1")
Next
'set to true
bRunDoDays = True

End Sub



Private Sub COPY_NUMBER_Click()
COPY_NUMBER.BackColor = 12713921
Copier
If bRunDoDays = False Then Exit Sub
DoDays
COPY_NUMBER.BackColor = 12500670
COPY_NUMBER.Enabled = False
End Sub
于 2017-08-30T20:57:19.500 回答