Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
956to960
956to960
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Prozedur verkürzen oder teilen?

Prozedur verkürzen oder teilen?
10.03.2008 07:39:00
Mandy
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 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 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 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 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 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 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

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prozedur verkürzen oder teilen?
10.03.2008 08:10:00
Beverly
Hi Mandy,

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 And (Target.Row >= 8 Or Target.Row 




AW: Prozedur verkürzen oder teilen?
10.03.2008 08:15:00
Mandy
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

Anzeige
AW: Prozedur verkürzen oder teilen?
10.03.2008 08:29:21
Beverly
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.


AW: Prozedur verkürzen oder teilen?
10.03.2008 09:38:00
Mandy
Hi!
also ich habe hier ein Beispiel für die Darstllung herausgesucht.
If target.Column = 3 And (target.Row >= 8 Or target.Row 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ß

Anzeige
AW: Prozedur verkürzen oder teilen?
10.03.2008 09:23:04
Nepumuk
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

Anzeige
AW: Prozedur verkürzen oder teilen?
10.03.2008 09:48:00
Mandy
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

AW: Prozedur verkürzen oder teilen?
10.03.2008 09:51:14
Heiko
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  "" 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 !

Anzeige
AW: Prozedur verkürzen oder teilen?
10.03.2008 11:07:18
Mandy
Vielen Dank Heiko.
ich habe mich für deine Variante entschieden und die funktioniert super :)
Also nochmals vielen Dank1
Gruß Mandy

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige