Microsoft Excel

Herbers Excel/VBA-Archiv

VBA Problem Sprungfunktion | Herbers Excel-Forum


Betrifft: VBA Problem Sprungfunktion von: Steffen Baumgärtner
Geschrieben am: 10.12.2009 15:15:06

Hallo

Ich habe ein Problem mit einem Makro.
Ich benötige eine Sprungfunktion um von einer Zelle (automatisch nach erfolgter Eingabe) in eine andere Zelle in einer anderen "Mappe" zu springen. Ich hab das mit folgendem Makro gelöst.

(Frage geht unten weiter)

'Sprungbefehl 1a Anfang'
If (Target.Address = "$J$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E11").Activate
End If
If (Target.Address = "$K$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E17").Activate
End If
If (Target.Address = "$L$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E23").Activate
End If
If (Target.Address = "$M$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E29").Activate
End If
If (Target.Address = "$N$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E35").Activate
End If

If (Target.Address = "$O$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E41").Activate
End If
If (Target.Address = "$P$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E47").Activate
End If
If (Target.Address = "$Q$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E53").Activate
End If
If (Target.Address = "$R$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E59").Activate
End If
If (Target.Address = "$S$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E65").Activate
End If

If (Target.Address = "$T$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E71").Activate
End If
If (Target.Address = "$U$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E77").Activate
End If
If (Target.Address = "$V$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E83").Activate
End If
If (Target.Address = "$W$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E89").Activate
End If
If (Target.Address = "$X$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E95").Activate
End If

If (Target.Address = "$Y$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E101").Activate
End If
If (Target.Address = "$Z$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E107").Activate
End If
If (Target.Address = "$AA$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E113").Activate
End If
If (Target.Address = "$AB$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E119").Activate
End If
If (Target.Address = "$AC$12" And Target.Value < 21) Then
Tabelle4.Select
Tabelle4.Range("E125").Activate
End If
'Sprungbefehl 1a Ende'

Die Startfelder für die 20 Sprungbefehle befinden sich alle in der selben Zeile in den Spalte J-AC
Die Zielfelder in der anderen Mappe befinden sich alle in Spalte E mit jeweils 6 Zeilen Abstand.

Das Makro ansich funktioniert so ganz gut, aber nun mein Problem:

Ich benötige diesen Sprungbefehl insgesamt 63 Mal. Wenn ich das 63 Mal als Makro schreibe wird das Makro zu groß und VBA kann es nicht mehr kompilieren.

Kann man das Makro irgendwie auf 3 Teile a 21 Sprungbefehle Aufsplitten oder kann man das irgendwie als Schleife Porgrammieren? Die Start und Zieladresse ist halt bei jedem der 63 durchläufe eine Andere (aber jedes Mal Start in Spalten J-AC,gleich Zeile und Ziel in Spalte E mit 6 Zielen Abstand).

Kann mir hier irgendwer helfen?

Schöne Grüße
Horst

  

Betrifft: AW: VBA Problem Sprungfunktion von: Rudi Maintaire
Geschrieben am: 10.12.2009 16:24:21

Hallo,
das macht das gleiche wie dein Code:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("J12:AC12")) Is Nothing And Target < 21 Then
    With Tabelle4
      .Activate
      .Cells(Target.Column * 6 - 49, 5).Select
    End With
  End If
End Sub

Gruß
Rudi


  

Betrifft: AW: VBA Problem Sprungfunktion von: Steffen Baumgärtner
Geschrieben am: 10.12.2009 17:15:17

Hallo Rudi

Danke mal vorerst für die Hilfe, aber als VBA-Dummie brauch ich da noch eine kleine Erläuterung.

Ich nehme an die Zeile

.Cells(Target.Column * 6 - 49, 5).Select

ist die Zieladresse. Ich bekomme aber den gedanklichen Zusammenhang zwischen Deiner Schreibweise und meinen Feldern E11 bis E125 nicht zusammengereimt.

Kannst Du mir das bitte erläutern?

Horst


  

Betrifft: AW: VBA Problem Sprungfunktion von: Rudi Maintaire
Geschrieben am: 10.12.2009 17:30:09

Hallo,
ist eigentlich ganz einfach
Syntax: Cells(Zeile, Spalte)

Da du immer um 6 Zeilen verschiebst, handelt es sich um eine lineare Funktion. Somit kann man die Zeile errechnen.
Änderung in J (Target.Column=10): =10*6-49=11. Ergibt Cells(11, 5) entspricht Range("E11")
Änderung in K (Target.Column=11): =11*6-49=17. Ergibt Cells(17, 5) entspricht Range("E17")
etc.
Man könnte auch Range("E" & Target.Column * 6 - 49).Select schreiben.

Gruß
Rudi


  

Betrifft: AW: VBA Problem Sprungfunktion von: Steffen Baumgärtner
Geschrieben am: 10.12.2009 18:26:39

Hallo Rudi

Vielen Dank, das ist die Lösung, jetzt bekomm ichs auch mit der Erweiterung auf meine 63 Fälle hin.

Schöne Grüße


Beiträge aus den Excel-Beispielen zum Thema "VBA Problem Sprungfunktion"