Microsoft Excel

Herbers Excel/VBA-Archiv

Prozedur verkürzen oder teilen?

Betrifft: Prozedur verkürzen oder teilen? von: Mandy
Geschrieben am: 10.03.2008 07:39:56

Hallo zusammen!

ich habe mal wieder ein Problem :)
Mein Chef hat mir eine Excel-Tab vorgesetzt. In dieser befindet sich die unten aufgeführte PRozudur. Doch diese ist leider zu groß. Ich habe nun die Aufgabe die Tabelle in Gang zu bekommen. Allerdings habe ich keine Ahnung wie.

Gibt es einen Möglichkeit diese zu verkürzen oder gar zu teilen?
es wäre schön, wenn ihr mir helfen könntet.

Private Sub Worksheet_change(ByVal target As Range)

If target.Column = 3 And (target.Row >= 8 Or target.Row <= 500) Then
If target.Value = "Dachventilatoren" Then
target.Offset(0, 1).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Dachventilatoren"
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = False
End With
End If
End If

If target.Column = 3 And (target.Row >= 8 Or target.Row <= 500) Then
If target.Value = "Entrauchungsventilatoren" Then
target.Offset(0, 1).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Entrauchungsventilatoren"
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = False
End With
End If
End If

If target.Column = 3 And (target.Row >= 8 Or target.Row <= 500) Then
If target.Value = "Radialventialatoren (Direktantrieb)" Then
target.Offset(0, 1).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Radialventilatoren_Direktantrieb"
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = False
End With
End If
End If

If target.Column = 3 And (target.Row >= 8 Or target.Row <= 500) Then
If target.Value = "Radialventialatoren (Riemenantrieb)" Then
target.Offset(0, 1).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Radialventilator_Riemenantrieb"
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = False
End With
End If
End If

If target.Column = 3 And (target.Row >= 8 Or target.Row <= 500) Then
If target.Value = "Rohrventilatoren" Then
target.Offset(0, 1).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Rohrventilatoren"
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = False
End With
End If
End If

If target.Column = 3 And (target.Row >= 8 Or target.Row <= 500) Then
If target.Value = "Kanalventilatoren" Then
target.Offset(0, 1).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Kanalventilatoren"
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = False
End With
End If
End If

Die Prozedur ist an dieser Stelle noch nicht zu ende. Der If-Block folgt noch einige Male dabei ändern sich wie auh schon oben, immer nur target.Value und Formula1.

Vielen Dank für eure Bemühungen

Gruß Mandy

  

Betrifft: AW: Prozedur verkürzen oder teilen? von: Beverly
Geschrieben am: 10.03.2008 08:10:10

Hi Mandy,

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 3 And (Target.Row >= 8 Or Target.Row <= 500) Then
        With Target.Offset(0, 1).Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=" & Target
            .IgnoreBlank = True
            .InCellDropdown = True
            .ShowInput = True
            .ShowError = False
        End With
    End If
End Sub





GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Prozedur verkürzen oder teilen? von: Mandy
Geschrieben am: 10.03.2008 08:15:24

hallo Beverly!

an so etwas hab ich auch schon gedacht, aber weiter unten in der Prozedur besteht target.value aus mehreren Wörtern. und formula1 bezieht sich ja auf einen Bereichsnamen. Aber soviel wie ich weiß, kann man bei Bereichsnamen keine Leerzeichen schreiben.
Git es da vielleicht noch eine andere Lösung?

Gruß Mandy


  

Betrifft: AW: Prozedur verkürzen oder teilen? von: Beverly
Geschrieben am: 10.03.2008 08:29:21

Hi Mandy,

dein geposteter Code bezieht sich doch auf Bereichsnamen. Wie sieht denn der bisherige Code aus, wenn es mehrere Wörter sind und kein Bereichsname? Und wie werden in solch einem Fall die Wörter eingegeben?

Ja, Bereichsnamen dürfen kein Leerzeichen enthalten.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Prozedur verkürzen oder teilen? von: Mandy
Geschrieben am: 10.03.2008 09:38:55

Hi!

also ich habe hier ein Beispiel für die Darstllung herausgesucht.

If target.Column = 3 And (target.Row >= 8 Or target.Row <= 500) Then
If target.Value = "Damiflex Flexrohre" Then
target.Offset(0, 1).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=damiflex_rohr"
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = False
End With
End If
End If

Gruß


  

Betrifft: AW: Prozedur verkürzen oder teilen? von: Nepumuk
Geschrieben am: 10.03.2008 09:23:04

Hallo Mandy,

wenn die Eingaben und die Bereichsnamen immer nach dem Muster aus deinem Beispiel angelegt sind, dann einfach so:

' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Worksheet_change(ByVal Target As Range)
    
    Dim strRangeName As String
    
    If Target.Column = 3 And (Target.Row >= 8 Or Target.Row <= 500) Then
        
        If Target.Value = "Dachventilatoren" _
            Or Target.Value = "Entrauchungsventilatoren" _
            Or Target.Value = "Radialventialatoren (Direktantrieb)" _
            Or Target.Value = "Radialventialatoren (Riemenantrieb)" _
            Or Target.Value = "Rohrventilatoren" _
            Or Target.Value = "Kanalventilatoren" Then
            
            strRangeName = Replace(Replace(Replace(Target.Value, "(", ""), ")", ""), " ", "_")
            
            With Target.Offset(, 1).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:="=" & strRangeName
                .IgnoreBlank = True
                .InCellDropdown = True
                .ShowInput = True
                .ShowError = False
            End With
            
        End If
    End If
    
End Sub

Wir schmeißen also die Klammern ersatzlos raus und ersetzen das Leerzeichen durch einem Unterstrich.

Gruß
Nepumuk


  

Betrifft: AW: Prozedur verkürzen oder teilen? von: Mandy
Geschrieben am: 10.03.2008 09:48:24

hallo Nepumuk!

vielen dank erstmal. allerdings funktioniert dein Code nur bedingt, denn bei der Bereichsvergabe können keine Klammern geschrieben werden. die allerdings bei dir oben stehen müssten, wenn du nur die Leerzellen ersetzt. und auch bei Namen die nur aus einem Wort bestehen funktioniert es nicht so richtig.

Gruß Mandy


  

Betrifft: AW: Prozedur verkürzen oder teilen? von: Heiko S.
Geschrieben am: 10.03.2008 09:51:14

Hallo Mandy,

dann doch ein bisschen Handarbeit:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim strHilf As String

strHilf = ""
If Target.Column = 3 And (Target.Row >= 8 Or Target.Row <= 500) Then
    Select Case Target.Value
        Case "Dachventilatoren"
            strHilf = "=Dachventilatoren"
        Case "Entrauchungsventilatoren"
            strHilf = "=Entrauchungsventilatoren"
        Case "Radialventialatoren (Direktantrieb)"
            strHilf = "=Radialventialatoren (Direktantrieb)"
        Case "Damiflex Flexrohre"
            strHilf = "=damiflex_rohr"

        ' ... Und so weiter für den Rest
        
    End Select
    If strHilf <> "" Then
        With Target.Offset(0, 1).Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
             xlBetween, Formula1:=strHilf
            .IgnoreBlank = True
            .InCellDropdown = True
            .ShowInput = True
            .ShowError = False
        End With
        bolHilf = False
    End If
End If
End Sub





Gruß Heiko

PS: Rückmeldung wäre nett !


  

Betrifft: AW: Prozedur verkürzen oder teilen? von: Mandy
Geschrieben am: 10.03.2008 11:07:18

Vielen Dank Heiko.
ich habe mich für deine Variante entschieden und die funktioniert super :)
Also nochmals vielen Dank1

Gruß Mandy


 

Beiträge aus den Excel-Beispielen zum Thema "Prozedur verkürzen oder teilen?"