PDA

Vollständige Version anzeigen : Prozedur


Matternkai
02.07.2014, 06:54
Hallo
ich bin der Neue;) und VBA-Anfänger. Folgendes Problem habe ich
Ich habe eine Excelblatt in dem ich ein Dropdown-Menü eingefügt habe und der Benutzer soll nach der Auswahl auf einem weiterem Blatt dann auch weitere Eintragungen machen. Er soll deswegen mit der Auswahl gleich in das entsprechende Blatt weitergeleitet werden. Dies habe ich auch noch einigermaßen hinbekommen aber jetzt bekomme ich immer die Meldung "Prozedur zu groß". Ich habe versucht das ganze zu teilen komme aber nicht weiter (bei call sagt er immer Argument nicht optional) und Schleifen habe ich noch nicht geschrieben. Kann mir jemand helfen wie ich es entweder kürzen oder teilen kann? Hier der bisher geschriebene Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "L5" Then
If Range("L5").Value = "VV" Then
Application.Goto Worksheets("VV, HV, BW").Range("D5")
End If
If Range("L5").Value = "HV" Then
Application.Goto Worksheets("VV, HV, BW").Range("D5")
End If
If Range("L5").Value = "BW" Then
Application.Goto Worksheets("VV, HV, BW").Range("D5")
End If
If Range("L5").Value = "RO" Then
Application.Goto Worksheets("RO").Range("D5")
End If
If Range("L5").Value = "VH" Then
Application.Goto Worksheets("VH, AS, FL").Range("D5")
End If
If Range("L5").Value = "AS" Then
Application.Goto Worksheets("VH, AS, FL").Range("D5")
End If
If Range("L5").Value = "FL" Then
Application.Goto Worksheets("VH, AS, FL").Range("D5")
End If
End If
If Target.Address(False, False) = "L6" Then
If Range("L6").Value = "VV" Then
Application.Goto Worksheets("VV, HV, BW").Range("D6")
End If
If Range("L6").Value = "HV" Then
Application.Goto Worksheets("VV, HV, BW").Range("D6")
End If
If Range("L6").Value = "BW" Then
Application.Goto Worksheets("VV, HV, BW").Range("D6")
End If
If Range("L6").Value = "RO" Then
Application.Goto Worksheets("RO").Range("D6")
End If
If Range("L6").Value = "VH" Then
Application.Goto Worksheets("VH, AS, FL").Range("D6")
End If
If Range("L6").Value = "AS" Then
Application.Goto Worksheets("VH, AS, FL").Range("D6")
End If
If Range("L6").Value = "FL" Then
Application.Goto Worksheets("VH, AS, FL").Range("D6")
End If

usw.

End If
If Target.Address(False, False) = "L100" Then
If Range("L100").Value = "VV" Then
Application.Goto Worksheets("VV, HV, BW").Range("D100")
End If
If Range("L100").Value = "HV" Then
Application.Goto Worksheets("VV, HV, BW").Range("D100")
End If
If Range("L100").Value = "BW" Then
Application.Goto Worksheets("VV, HV, BW").Range("D100")
End If
If Range("L100").Value = "RO" Then
Application.Goto Worksheets("RO").Range("D100")
End If
If Range("L100").Value = "VH" Then
Application.Goto Worksheets("VH, AS, FL").Range("D100")
End If
If Range("L100").Value = "AS" Then
Application.Goto Worksheets("VH, AS, FL").Range("D100")
End If
If Range("L100").Value = "FL" Then
Application.Goto Worksheets("VH, AS, FL").Range("D100")
End If
End If
End Sub

Nepumuk
02.07.2014, 07:09
Hallo,

kurz genug?

<nobr><span style="font-family:Courier New,Arial; font-size:9pt ;" ><b><span style="color:#000080"; >Private</span> <span style="color:#000080"; >Sub</span> Worksheet_Change(<span style="color:#000080"; >ByVal</span> Target <span style="color:#000080"; >As</span> Range)</b><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> objRange <span style="color:#000080"; >As</span> Range<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Set</span> objRange = Intersect(Target, Range(Cells(5, 12), Cells(Rows.Count, 12)))<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >If</span> <span style="color:#000080"; >Not</span> objRange <span style="color:#000080"; >Is</span> <span style="color:#000080"; >Nothing</span> <span style="color:#000080"; >Then</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >With</span> objRange.Cells(1, 1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Select</span> <span style="color:#000080"; >Case</span> .Value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Case</span> <span style="color:#800000"; >"VV"</span>, <span style="color:#800000"; >"HV"</span>, <span style="color:#800000"; >"BW"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.Goto Worksheets(<span style="color:#800000"; >"VV, HV, BW"</span>).Range(.Address)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Case</span> <span style="color:#800000"; >"RO"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.Goto Worksheets(<span style="color:#800000"; >"RO"</span>).Range(.Address)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Case</span> <span style="color:#800000"; >"VH"</span>, <span style="color:#800000"; >"AS"</span>, <span style="color:#800000"; >"FL"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.Goto Worksheets(<span style="color:#800000"; >"VH, AS, FL"</span>).Range(.Address)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >End</span> <span style="color:#000080"; >Select</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >End</span> <span style="color:#000080"; >With</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Set</span> objRange = <span style="color:#000080"; >Nothing</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span><br /><b><span style="color:#000080"; >End</span> <span style="color:#000080"; >Sub</span></b><br /></span></nobr>

R J
02.07.2014, 07:26
Hi Kai,

wer soll denn das lesen? Da bekommt man ja Augenkrebs....
Eingefügten Code solltest Du auch als Code formatieren. (s. oben in der Symbolleiste)

Zum Problem:

Diese Fehlermeldung ist mir ja ganz neu...:)
In Deinem Code finde ich nirgends call.
Ich vermute mal, Du versuchst die Prozedur Private Sub Worksheet_Change(ByVal Target As Range) über call aufzurufen? Das ist unnötig, da dieses Ereignis ja automatisch aufgerufen wird, wenn Du einen Zellwert änderst.

Ansonsten, ie ganzen If's könntest Du so abkürzen:
Dim sh As String
Select Case Range("L5").Value
Case "VV", "HV", "BW"
sh = "VV, HV, BW"
Case "RO"
sh = "RO"
Case "VH", "AS", "FL"
sh = "VH, AS, FL"
End Select

MsgBox sh

Matternkai
02.07.2014, 09:21
Hallo Nepumuk

Danke funktioniert super und ist sehr kurz. Kann ich bei dem Sprungbefehl auch noch in die Spalte D springen.

Hallo Ralf

wie gesagt ich bin der Neue und lerne die Gepflogenheit erst noch. Zu call, ich wollte die Prozedur teilen und hätte beide aufrufen müssen (den misslungenen Code habe ich hier nicht eingefügt).

Gruß Kai

Nepumuk
03.07.2014, 08:10
Hallo,

klar geht das, ich hab es nur übersehen. :upps:

<nobr><span style="font-family:Courier New,Arial; font-size:9pt ;" ><b><span style="color:#000080"; >Private</span> <span style="color:#000080"; >Sub</span> Worksheet_Change(<span style="color:#000080"; >ByVal</span> Target <span style="color:#000080"; >As</span> Range)</b><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> objRange <span style="color:#000080"; >As</span> Range<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Set</span> objRange = Intersect(Target, Range(Cells(5, 12), Cells(Rows.Count, 12)))<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >If</span> <span style="color:#000080"; >Not</span> objRange <span style="color:#000080"; >Is</span> <span style="color:#000080"; >Nothing</span> <span style="color:#000080"; >Then</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >With</span> objRange.Cells(1, 1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Select</span> <span style="color:#000080"; >Case</span> .Value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Case</span> <span style="color:#800000"; >"VV"</span>, <span style="color:#800000"; >"HV"</span>, <span style="color:#800000"; >"BW"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.Goto Worksheets(<span style="color:#800000"; >"VV, HV, BW"</span>).Cells(.Row, 4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Case</span> <span style="color:#800000"; >"RO"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.Goto Worksheets(<span style="color:#800000"; >"RO"</span>).Cells(.Row, 4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Case</span> <span style="color:#800000"; >"VH"</span>, <span style="color:#800000"; >"AS"</span>, <span style="color:#800000"; >"FL"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.Goto Worksheets(<span style="color:#800000"; >"VH, AS, FL"</span>).Cells(.Row, 4)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >End</span> <span style="color:#000080"; >Select</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >End</span> <span style="color:#000080"; >With</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Set</span> objRange = <span style="color:#000080"; >Nothing</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span><br /><b><span style="color:#000080"; >End</span> <span style="color:#000080"; >Sub</span></b><br /></span></nobr>

Wenn du Groß- Kleinschreibung nicht berücksichtigen willst, dann könntest du das durch das Ändern dieser Zeile bewirken:

<nobr><span style="font-family:Courier New,Arial; font-size:9pt ;" ><span style="color:#000080"; >Select</span> <span style="color:#000080"; >Case</span> .Value<br /></span></nobr>
so ändern:

<nobr><span style="font-family:Courier New,Arial; font-size:9pt ;" ><span style="color:#000080"; >Select</span> <span style="color:#000080"; >Case</span> UCase$(.Value)<br /></span></nobr>