Ausführen von zwei VBA-Prozeduren in Excel

-1

Kann mir jemand sagen, wie man beide im selben Excel-Arbeitsblatt kombiniert und ausführt? Bitte seien Sie genau, da ich ein Neuling im Codieren bin !! Vielen Dank

Dieses Verfahren:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Dim DateStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
    Exit Sub
End If
If Target.Cells.Count > 1 Then
    Exit Sub
End If
If Target.Value = "" Then
    Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
    Select Case Len(.Formula)
        Case 4 ' e.g., 9298 = 2-Sep-1998
            DateStr = Left(.Formula, 1) & "/" & _ 
            Mid(.Formula, 2, 1) & "/" & Right(.Formula, 2)
        Case 5 ' e.g., 11298 = 12-Jan-1998 NOT 2-Nov-1998
            DateStr = Left(.Formula, 1) & "/" & _ 
                Mid(.Formula, 2, 2) & "/" & Right(.Formula, 2)
        Case 6 ' e.g., 090298 = 2-Sep-1998
            DateStr = Left(.Formula, 2) & "/" & _ 
                Mid(.Formula, 3, 2) & "/" & Right(.Formula, 2)
        Case 7 ' e.g., 1231998 = 23-Jan-1998 NOT 3-Dec-1998
            DateStr = Left(.Formula, 1) & "/" & _ 
                Mid(.Formula, 2, 2) & "/" & Right(.Formula, 4)
        Case 8 ' e.g., 09021998 = 2-Sep-1998
            DateStr = Left(.Formula, 2) & "/" & _ 
                Mid(.Formula, 3, 2) & "/" & Right(.Formula, 4)
        Case Else
            Err.Raise 0
    End Select
    .Formula = DateValue(DateStr)
End If

End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid date."
Application.EnableEvents = True
End Sub

und diese Prozedur:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim TimeStr As String

On Error GoTo EndMacro
If Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
    Exit Sub
End If
If Target.Cells.Count > 1 Then
    Exit Sub
End If
If Target.Value = "" Then
    Exit Sub
End If

Application.EnableEvents = False
With Target
If .HasFormula = False Then
    Select Case Len(.Value)
        Case 1 ' e.g., 1 = 00:01 AM
            TimeStr = "00:0" & .Value
        Case 2 ' e.g., 12 = 00:12 AM
            TimeStr = "00:" & .Value
        Case 3 ' e.g., 735 = 7:35 AM
            TimeStr = Left(.Value, 1) & ":" & _
            Right(.Value, 2)
        Case 4 ' e.g., 1234 = 12:34
            TimeStr = Left(.Value, 2) & ":" & _
            Right(.Value, 2)
        Case 5 ' e.g., 12345 = 1:23:45 NOT 12:03:45
            TimeStr = Left(.Value, 1) & ":" & _
            Mid(.Value, 2, 2) & ":" & Right(.Value, 2)
        Case 6 ' e.g., 123456 = 12:34:56
            TimeStr = Left(.Value, 2) & ":" & _
            Mid(.Value, 3, 2) & ":" & Right(.Value, 2)
        Case Else
            Err.Raise 0
    End Select
    .Value = TimeValue(TimeStr)
End If
End With
Application.EnableEvents = True
Exit Sub
EndMacro:
MsgBox "You did not enter a valid time"
Application.EnableEvents = True
End Sub
DouglasK
quelle
Sie können / sollten nicht zwei Funktionen mit identischem Namen und Ereignis haben. Entscheide dich für eine, führe eine Methode aus, gefolgt von der anderen
Eric F
Also, was sind in meinem Beispiel die Namen und Ereignisse, die ich ändern muss? Ich weiß, das ist eine schmerzhafte Grundfrage!
DouglasK
Der Name ist die Zeichenfolge nach "Private Sub".
music2myear
2
Sehen Sie, wie beide mit Private Sub Worksheet_Change (ByVal Target As Excel.Range) beginnen ? Worksheet_Change ist der Name beider Ereignisse. Der Name Worksheet_Change ist in Excel eindeutig und wird bei jeder Änderung eines Arbeitsblatts ausgelöst (es handelt sich um ein Ereignis ). Sie können nicht zwei Ereignisse mit demselben Namen haben. Lassen Sie also eines unverändert, benennen Sie das zweite in das gewünschte um und rufen Sie das umbenannte Ereignis von demjenigen auf, das Sie nicht geändert haben.
Eric F
2
Zu Ihrer Information, ich werde nicht buchstäblich schreiben, was Sie brauchen. Sie müssen verstehen, was Sie tun, und selbst eine Lösung finden. Diese Community ist hier, um bei bestimmten Fragen zu helfen, aber wir sind nicht hier, um Code für Sie zu schreiben.
Eric F

Antworten:

0

Sie müssen ein Sub vom ersten Sub ausführen. Sie können / sollten nicht zwei Subs / Funktionen mit demselben Namen haben. Verwenden Sie die folgende Methode, um beide oben gezeigten Subs auszuführen, wenn eine Änderung in einem Arbeitsblatt auftritt:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Do stuff
Call Peanut_butter()
End Sub

Private Sub Peanut_butter
'Do other stuff

End Sub

In diesem Beispiel wird Worksheet_Change zuerst ausgelöst, führt den gewünschten Code aus und führt zuletzt das Unterelement Peanut_Butter aus.

Eric F
quelle