Dringend VBA Code Unterstützung

vollbase

Cadet 2nd Year
Registriert
Jan. 2013
Beiträge
21
Dringend VBA Code Unterstützung *Update*

*selbst gelöscht*

...Nach tagelangem versuchen habe ich ein VBA Code hinbekommen.

Jetzt meine weitergehende Frage.

Wie kann ich einen wiederkehrenden Code abkürzen???

Der Code sieht z.Z. wie folgt aus:

Code:
Case "$D$23"
Range("F23").Select

Case "$F$23"
Range("A24").Select

Case "$A$24"
Range("D24").Select

Case "$D$24"
Range("F24").Select

Case "$F$24"
Range("A25").Select

Case "$A$25"
Range("D25").Select

Case "$D$25"
Range("F25").Select

Case "$F$25"
Range("A26").Select

Case "$A$26"
Range("D26").Select

Case "$D$26"
Range("F26").Select

Case "$F$26"
Range("A27").Select

Case "$A$27"
Range("D27").Select

Case "$D$27"
Range("F27").Select

Case "$F$27"
Range("A28").Select

Case "$A$28"
Range("D28").Select


Ich brauche den Code im endeffekt von A22-F100. Wenn ich den aber so fortführe sieht es total sche** aus.

Wie gesagt kann ich das nicht abkürzen
 
Zuletzt bearbeitet:
Dazu mußt Du nur den Zellstring entsprechend zerlegen:

Code:
Zelle = "$F$23"

Select Case Left(Zelle, 2)
Case "$D"
Bereich = ("F" & Right(Zelle, 2))

Case "$F"
Bereich = ("A" & Right(Zelle, 2) + 1)

Case "$A"
Bereich = ("D" & Right(Zelle, 2) + 1)

End Select

Range(Bereich).Select

Du mußt natürlich ein paar Sicherheitsprüfungen einbauen.
 
Hallo miac,
erst mal danke für deine Antwort, nur leider kann ich den Code nicht wirklich umsetzen weil ich den nicht wirklich verstehe sorry.

Also ich springe mit der Enter Taste in meinem jetzigen Projekt von Zelle A22 anfanged nach D22 dann nach F22;
dann geht es wieder von vorne los A23, D23, F23; A24,D24,F24...
...bis ich dann irgendwann bei F100 lande



Hier nochmal der Beispiel Code den ich versucht habe auf die o.g. wünsche umzubauen:

Code:
Option Explicit

Sub Nächste_Zelle()
'Variablen deklarieren
Dim Active_Zelle As String

'Zellbezeichnung der aktiven Zelle in Variable "Active_Zelle" schreiben
Active_Zelle = ActiveCell.Address

'Case-Anweisung der Variablen "Active_Zelle" beginnen
Select Case Active_Zelle

'Wenn Variable "Active_Zelle" den Wert "$A$2", dann Zelle C3 anspringen
Case "$A$2"
Range("C3").Select

'Wenn Variable "Active_Zelle" den Wert "$C$3", dann Zelle E5 anspringen
Case "$C$3"
Range("E5").Select

'Wenn Variable "Active_Zelle" den Wert "$E$5", dann Zelle A7 anspringen
Case "$E$5"
Range("A7").Select

'Wenn Variable "Active_Zelle" den Wert "$A$7", dann Zelle F8 anspringen
Case "$A$7"
Range("F8").Select

'Wenn Variable "Active_Zelle" den Wert "$F$8", dann Zelle A2 anspringen
Case "$F$8"
Range("A2").Select

Case Else
 
Irgendwie verstehe ich nicht, wie dein Coding mit deiner Beschreibung zusammenhängt.

Dein Coding sagt (immer angenommen, deine Subroutine wird immer wieder aufgerufen):

angenommene Anfangszelle A2
C3->E5->A7->F8->A2

dann wieder von vorne.

Deine Anforderung ist aber (umgesetzt auf den anderen Zellbereich)
A2->D2->F2->A3->D3->F3...
 
@vollbase
Auch ich werde aus der Aktion nicht ganz schlau.
ich springe mit der Enter Taste in meinem jetzigen Projekt von Zelle A22 anfanged nach D22 dann nach F22;
dann geht es wieder von vorne los A23, D23, F23; A24,D24,F24...
Ohne da jetzt fertig zu programmieren sehe ich folgende strukturelle Elemente:
• Ein Aktions- (aka Ereignis-)-Makro das auf Zellwechsel [Zellverlassen] reagiert
• Besagte Funktion erkennt die Zelle = Koordianten wo das passiert
• Gemäß der o.g. Regeln kann ich A nach D nach F wechseln und von F eine Zeile Weiter wieder nach A.

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Zeile As Integer
Dim Spalte As Integer
 Zeile = Target.Row
 If Zeile = 1 Then Exit Sub' ein wenig Beruhigung, Daten also ab Zeile 2!
 Spalte = Target.Column
 Application.DisableEvents
 Select Case Spalte
  Case 1 : Select Cells(Zeile, 4)
  Case 4 : Select Cells(Zeile, 6)
  Case 6
   Select Cells(Zeile + 1, 1)
   If Zeile + 1 = 101 Then
    Select Cells(1,1) 'oder welche auch immer
    Exit Sub 
   End If
  Case Else
   Exit Sub
 End Select
 Application.EnableEvents
End Sub
So weit aus Hand hingeschrieben. Der Trick bei diesen Ereignismakros ist, sie zwischendrin auszuschalten damit sie sich nicht selbst anstoßen.
Ob schließlich das Change-Ereignis das richtige ist müsste sich erweisen, aber da du was eintippen willst müsste es schon passen.

CN8
 
Danke Ihr beiden.
Ja der Code besteht aus mehreren Funktionen
Also es geht um folgendes Beispiel

Beispiel

das ich verwende.

@ cumulonimbus8 ich weiß jetzt nicht wo ich da deinen Code einfügen/ersetzen muß damit es funktioniert.


wie gesagt das versuche ich damit"...Also ich springe mit der Enter Taste in meinem jetzigen Projekt von Zelle A22 anfanged nach D22 dann nach F22;
dann geht es wieder von vorne los A23, D23, F23; A24,D24,F24...
...bis ich dann irgendwann bei F100 lande"

vielleicht kann mir jemand den Code so anpassen
 
Ein Ereignismakro wie meins gehört ins VBA-Code-Fenster des Arbeitsblattes (Worksheet), nicht in ein Modul.

Den Link habe ich das 2. Mal betrachte und ich werde aus dem unlesbaren Wust da immer noch nicht schlau.

Mein Code tut exakt das was du willst.
Wenn du dich in Spalte A aufhältst und Enter drückst wird der eingegebene Inhalt in der Zelle geschrieben und in der selben Zeile nach Spalte D gewechselt um einzugeben. Dasselbe passiert dort nach F. In F wird die Zeile im 1 erhöht und nach A gewechselt.

Was ich (und das ist in Excel immer nicht ganz ideal) nicht geprüft habe [weil, das macht so keiner…] - will ich mich nur mit Enter ohne Änderung durchhangeln kanns sei, dass das nicht geht.
Klipp und klar: was du da machst ist etwas das man normalerweise mit einem Formular (einer Datenbank) durchführt, aber nicht mit einer Tabellenkalkulation.

CN8
 
hmm wenn ich deinen Code eingebe bringt er mir einen Syntax Fehler.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
=Gelb markiert

Case 1 : Select Cells(Zeile, 4)
=Blau markiert
 
«Private Sub Worksheet_Change(ByVal Target As Excel.Range)»
Diese Zeile hole ich mir normalerweise indem ich im Codefenster des Worksheets im Linken DropDown das «Worksheet» auswähle… …und aus dem rechten nicht mehr «SelectionChange» greifne muss weil mir neu das als Vorgabe angeboten wird:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub
…so das Codefenster nach den o.g. Schritten. Das »Excel.Range« hatte ich nur schnell und ohne Nachdenken mitkopiert, kann sein, dass das schlicht bei deinem VBA wo wenig geht wie bei meinem.


«Case 1 : Select Cells(Zeile, 4)»
Jaaa, Murks gebaut. „Gewöhne dich nie an eine Syntax-Logic, VBA schaffts sie umzudrehen…“
Code:
 Select Case Spalte
  Case 1 : Cells(Zeile, 4).Select
  Case 4 : Cells(Zeile, 6).Select
  Case 6
    Cells(Zeile + 1, 1).Select
   If Zeile + 1 = 101 Then
    Cells(1,1).Select 'oder welche auch immer
   Exit Sub
  End If
  Case Else
   Exit Sub
  End Select
Da muss noch irgendwas von SQL im Gehirn herumkreisen, da gibts nämlich den Befehl Select. Und wie das bei VBA aussieht siehst du ja selbst. Passiert mir immer wieder, das.

CN8
 

Ähnliche Themen

Zurück
Oben