Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

zurück in leere Zelle | Herbers Excel-Forum


Betrifft: zurück in leere Zelle von: Tom
Geschrieben am: 20.01.2012 10:01:41

Hallo zusammen,

habe in der Arbeitsmappe folgenden Code:

Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("H4:h18")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren
   End If
End Sub
Sobald also in der Spalte H ein Wert eingeben wird, startet das sortieren-Makro.

Nun möchte ich aber zusätzlich erreichen, dass der Cursor nach Makroausführung automatisch in die nächste Leere Zelle im Bereich F4:H18 springt.

Hat jemand ne Lösung?

Danke

TOM

  

Betrifft: AW: zurück in leere Zelle von: Tom
Geschrieben am: 20.01.2012 10:11:15

Zusatzfrage:

Wie kann ich dies zusammenfassen, dass Gruppe A, B, C und D extra sortiert werden bei den Eingaben in die jeweiligen Bereiche - so funktioniert e leider nicht (Fehlermeldung):

Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("H4:h18")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren_A
   End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("t4:t18")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren_B
   End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("H32:h46")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren_C
   End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("t32:t46")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren_D
   End If
End Sub



  

Betrifft: AW: zsammenfassen von: hary
Geschrieben am: 20.01.2012 10:17:22

hallo Tom
zusammenfassen:

Intersect(Target, Range("H4:h18", "t4:t18"))

gruss hary


  

Betrifft: AW: zsammenfassen von: Tom
Geschrieben am: 20.01.2012 11:03:19

Hallo Harry,

so kommt aber eine Fehlermeldung ...

Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("H4:h18", "t4:t18", "h32:h46", "t32:t46")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren
   End If
End Sub
Gruß
TOM


  

Betrifft: das geht so ja auch nicht von: Matthias L
Geschrieben am: 20.01.2012 11:11:17

Hi

Du hast doch vier Sotiermakros

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("H4:h18")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren_A
   End If
   If Not Intersect(Target, Range("t4:t18")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren_B
   End If
   If Not Intersect(Target, Range("H32:h46")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren_C
   End If
   If Not Intersect(Target, Range("t32:t46")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren_D
   End If
End Sub
Gruß Matthias


  

Betrifft: AW: stimmt Matthias von: hary
Geschrieben am: 20.01.2012 11:54:27

Hallo
da hab ich gepennt. Aber so muesste es gehen.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("H4:h18", "t4:t18")) Is Nothing Then
     Select Case Target.Column
        Case 8: MsgBox "SucheA" 'Hier Makro
        Case 20: MsgBox "SucheB"
        '----usw-----
     End Select
   End If
End Sub

gruss hary


  

Betrifft: AW: stimmt Matthias von: Tom
Geschrieben am: 20.01.2012 12:25:29

Hallo Hary,

nur zum Verständnis für mich: die 2.Lösung von Dir war nur ne Alternative zu der von Mathias !? Damit ist die Suche nach der leeren Zelle noch nicht behoben, oder?


  

Betrifft: Erst Sortieren, dann leere Zelle aktivieren ... von: Matthias L
Geschrieben am: 21.01.2012 01:11:08

Hallo

https://www.herber.de/bbs/user/78539.xls

Gruß Matthias


  

Betrifft: AW: Erst Sortieren, dann leere Zelle aktivieren ... von: Tom
Geschrieben am: 21.01.2012 02:13:51

Hallo Matthias,

danke an Dich. Dennoch springt der Cursor nicht in die richtige leere Zeile. Ich habe es so zusammengebaut:

Option Explicit
Public Rng As Range

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("H4:h18")) Is Nothing Then
       Call Modul3.Tabelle_Vorrunde_Sortieren_A
    End If
    For Each Rng In Range("H4:H18")
    If Rng.Value = "" Then Rng.Select: Exit For
    Next
    If Not Intersect(Target, Range("t4:t18")) Is Nothing Then
       Call Modul3.Tabelle_Vorrunde_Sortieren_B
    End If
    For Each Rng In Range("t4:t18")
    If Rng.Value = "" Then Rng.Select: Exit For
    Next
    If Not Intersect(Target, Range("H32:h46")) Is Nothing Then
       Call Modul3.Tabelle_Vorrunde_Sortieren_C
    End If
    For Each Rng In Range("H32:h46")
    If Rng.Value = "" Then Rng.Select: Exit For
    Next
    If Not Intersect(Target, Range("t32:t46")) Is Nothing Then
       Call Modul3.Tabelle_Vorrunde_Sortieren_D
    End If
    For Each Rng In Range("t32:t46")
    If Rng.Value = "" Then Rng.Select: Exit For
    Next
 End Sub

Hast Du einen Optimierungsvorschlag?

Danke :-)
TOM


  

Betrifft: Das funktioniert doch ... von: Matthias L
Geschrieben am: 21.01.2012 09:22:02

Hallo Tom

Ich hatte Dir bereits die Lösung als Datei gepostet!

Tabelle

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("H4:h18")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren_A
   End If
   If Not Intersect(Target, Range("t4:t18")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren_B
   End If
   If Not Intersect(Target, Range("H32:h46")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren_C
   End If
   If Not Intersect(Target, Range("t32:t46")) Is Nothing Then
      Call Modul3.Tabelle_Vorrunde_Sortieren_D
   End If
End Sub




Modul3
Option Explicit
Public Rng As Range

Sub Tabelle_Vorrunde_Sortieren_A()
Range("H4:H18").Sort Key1:=Range("H4"), Order1:=xlAscending, Header:=xlGuess
For Each Rng In Range("H4:H18")
 If Rng.Value = "" Then Rng.Select: Exit For
Next
End Sub

Sub Tabelle_Vorrunde_Sortieren_B()
Range("t4:t18").Sort Key1:=Range("t4"), Order1:=xlAscending, Header:=xlGuess
For Each Rng In Range("t4:t18")
 If Rng.Value = "" Then Rng.Select: Exit For
Next
End Sub

Sub Tabelle_Vorrunde_Sortieren_C()
Range("H32:H46").Sort Key1:=Range("H32"), Order1:=xlAscending, Header:=xlGuess
For Each Rng In Range("H32:H46")
 If Rng.Value = "" Then Rng.Select: Exit For
Next
End Sub

Sub Tabelle_Vorrunde_Sortieren_D()
Range("t32:t46").Sort Key1:=Range("t32"), Order1:=xlAscending, Header:=xlGuess
For Each Rng In Range("t32:t46")
 If Rng.Value = "" Then Rng.Select: Exit For
Next
End Sub
Wobei Du Header auch auf XlNo setzen könntest


Das in Block C und D für Dich der Cursor anscheinend nicht in der richtige Zelle platziert wird, liegt ganz einfach daran das in diesen Blöcken je eine Zelle einen Leerstring hat. Der wird mitsortiert.
Ich hatte nur nach dem Testen die Zellen nicht wieder geleert. Sorry fürs Verwirren ;o)

In Block C in Zelle H35
In Block D in Zelle T34

Mit der Formel: Länge(DeineZelle) in den jeweiligen Nachbarzellen hattest Du das auch selbst herausgefinden können ;o)

Gruß Matthias


  

Betrifft: AW: das geht so ja auch nicht von: Tom
Geschrieben am: 20.01.2012 12:18:48

Ok, danke. Jetzt brauch ich nur noch die Lösung, dass der Cursor in die nächste freie Zelle springt.
Dann bin ich happy :-)

Danke vorab! :-)

TOM


Beiträge aus den Excel-Beispielen zum Thema "zurück in leere Zelle"