Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro soll in die nächste Zelle springen

Makro soll in die nächste Zelle springen
10.01.2021 14:10:06
Mildred
Hallo zusammen,
ich habe einen VBA Code, das bei der Eingabe in bestimmten Zellen ein anderes Tabellenblatt kopiert und mit dem Namen des jeweiligen Zellinhaltes anlegt. Gleichzeitig wird aber auch geprüft, ob dieser Name bereits existiert, weil ja nicht 2 Tabellenblätter mit dem gleichen Namen in einer Datei angelegt werden können. Wenn dies der Fall ist, wird das Tabellenblatt nicht kopiert und nicht mit den Namen angelegt. Jetzt möchte ich das Makro aber so steuern, dass, wenn in diesen Zellen ein Name eingetragen wird, der bereits existiert, der Cursor in die nächste Zelle springt, ohne den Eintrag in der jeweiligen Zelle zu erlauben. Das Makro darf aber nicht so gesteuert werden, dass dann in der besagten Zelle der Inhalt auf leer ("") gesetzt wird, weil es auch hier ein weiteres Makro gibt, dass, wenn die Zelle geleert wird, ein Tabellenblatt gelöscht wird. Das Makro muss in die nächste Zelle springen.
Das Makro sieht so aus (es geht um den Teil, der fett und kursiv geschrieben ist):
Option Explicit
Private mstrSheetname As String
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Fehler As Integer, ws As Object
If Target.Column = 5 Then
Select Case Target.Row
Case 12, 18, 24, 30
If Not IsEmpty(Target.Cells(1, 1).Value) Then
mstrSheetname = Replace(Target.Cells(1, 1), "/", "")
If MsgBox("Tabelenblatt mit Name """ & Target.Text & """ anlegen ?", _
vbYesNo, "Blatt Vorlage kopieren") = vbYes Then
For Each ws In ThisWorkbook.Worksheets
If ws.Name = mstrSheetname Then
MsgBox "Blatt mit dem eingegeben Namen " & mstrSheetname _
& " existiert bereits!"
Target.Select
Exit Sub
End If
Next
Application.ScreenUpdating = False
With Worksheets("Kalkulationsvorlage")
.Visible = xlSheetVisible
.Copy Before:=Worksheets("Kalkulationsvorlage")
.Visible = xlSheetVeryHidden
End With
ActiveSheet.Name = mstrSheetname
End If
Else
        For Each ws In ThisWorkbook.Worksheets
If ws.Name = mstrSheetname Then
If MsgBox("Tabellenblatt wirklich löschen?", vbYesNo) = vbYes Then
Application.DisplayAlerts = False
ws.Delete
End If
Exit For
End If
Next ws
End If
Case Else
End Select
End If
Worksheets("Deckblatt Pos 1-4").Select
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 5 Then
Select Case Target.Row
Case 12, 18, 24, 30
mstrSheetname = Replace(Target.Cells(1, 1), "/", "")
Case Else
End Select
End If
End Sub

Vielen Dank im Voraus für eure Hilfe.
V.G. Mildred
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro soll in die nächste Zelle springen
10.01.2021 14:36:14
Werner
Hallo,
meinst du so?
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim ws As Worksheet
If Target.Column = 5 Then
Select Case Target.Row
Case 12, 18, 24, 30
If Not IsEmpty(Target.Cells(1, 1).Value) Then
mstrSheetname = Replace(Target.Cells(1, 1), "/", "")
If MsgBox("Tabelenblatt mit Name """ & Target.Text & """ anlegen ?", _
vbYesNo, "Blatt Vorlage kopieren") = vbYes Then
For Each ws In ThisWorkbook.Worksheets
If ws.Name = mstrSheetname Then
MsgBox "Blatt mit dem eingegeben Namen " & mstrSheetname _
& " existiert bereits!"
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Target.Offset(1).Select
Exit Sub
End If
Next
Application.ScreenUpdating = False
With Worksheets("Kalkulationsvorlage")
.Visible = xlSheetVisible
.Copy Before:=Worksheets("Kalkulationsvorlage")
.Visible = xlSheetVeryHidden
End With
ActiveSheet.Name = mstrSheetname
End If
End If
Case Else
End Select
End If
Worksheets("Deckblatt Pos 1-4").Select
End Sub
Gruß Werner
Anzeige
AW: Makro soll in die nächste Zelle springen
10.01.2021 15:29:49
Mildred
Hallo Werner,
ja genau. Super, vielen Dank!
V.G. Mildred
Gerne u. Danke für die Rückmeldung. o.w.T.
10.01.2021 17:25:28
Werner
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Makro für automatisches Zellen-Springen in Excel


Schritt-für-Schritt-Anleitung

Um ein Makro zu erstellen, das automatisch in die nächste Zelle springt, wenn ein bereits existierender Name eingegeben wird, folge diesen Schritten:

  1. Öffne Excel und gehe zum VBA-Editor, indem du ALT + F11 drückst.

  2. Wähle das entsprechende Arbeitsblatt aus, in dem das Makro eingesetzt werden soll.

  3. Füge den folgenden VBA-Code in das Codefenster ein:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
       Dim ws As Worksheet
       If Target.Column = 5 Then
           Select Case Target.Row
           Case 12, 18, 24, 30
               If Not IsEmpty(Target.Cells(1, 1).Value) Then
                   mstrSheetname = Replace(Target.Cells(1, 1), "/", "")
                   If MsgBox("Tabellenblatt mit Name """ & Target.Text & """ anlegen ?", _
                   vbYesNo, "Blatt Vorlage kopieren") = vbYes Then
                       For Each ws In ThisWorkbook.Worksheets
                           If ws.Name = mstrSheetname Then
                               MsgBox "Blatt mit dem eingegeben Namen " & mstrSheetname & " existiert bereits!"
                               Application.EnableEvents = False
                               Application.Undo
                               Application.EnableEvents = True
                               Target.Offset(1).Select
                               Exit Sub
                           End If
                       Next
                       Application.ScreenUpdating = False
                       With Worksheets("Kalkulationsvorlage")
                           .Visible = xlSheetVisible
                           .Copy Before:=Worksheets("Kalkulationsvorlage")
                           .Visible = xlSheetVeryHidden
                       End With
                       ActiveSheet.Name = mstrSheetname
                   End If
               End If
           End Select
       End If
       Worksheets("Deckblatt Pos 1-4").Select
    End Sub
  4. Schließe den VBA-Editor und teste das Makro, indem du in die Zellen der Spalte 5 (E) schreibst.


Häufige Fehler und Lösungen

  • Fehler: Das Makro springt nicht zur nächsten Zelle.

    • Lösung: Stelle sicher, dass das Makro in der richtigen Arbeitsblattmodul ist und Application.EnableEvents korrekt gesetzt ist.
  • Fehler: Fehlermeldung beim Erstellen eines neuen Tabellenblatts.

    • Lösung: Überprüfe, ob der Tabellenblattname bereits existiert und ob das Arbeitsblatt nicht schreibgeschützt ist.

Alternative Methoden

Wenn du keine VBA-Lösungen verwenden möchtest, kannst du auch die Datenüberprüfung in Excel nutzen:

  1. Wähle die Zellen in Spalte 5 aus.
  2. Gehe zu „Daten“ > „Datenüberprüfung“.
  3. Setze eine Regel, die nur bestimmte Werte zulässt.

Diese Methode ist jedoch weniger flexibel und bietet nicht die gleiche Funktionalität wie ein VBA-Makro.


Praktische Beispiele

Angenommen, du hast in Zelle E12 den Namen „ProjektA“ eingetragen. Wenn du versuchst, in Zelle E18 erneut „ProjektA“ einzugeben, wird das Makro erkennen, dass der Name bereits existiert und automatisch zur nächsten Zelle E19 springen.


Tipps für Profis

  • Debugging: Nutze Debug.Print innerhalb deines Codes, um Daten in das unmittelbare Fenster auszugeben. Dies hilft dir, den Fluss des Codes zu verfolgen und Probleme zu identifizieren.

  • Code optimieren: Reduziere die Anzahl der MsgBox-Aufrufe, um die Benutzererfahrung zu verbessern. Verwende stattdessen Statusleistenmeldungen.


FAQ: Häufige Fragen

1. Kann ich das Makro auch in anderen Spalten verwenden?
Ja, ändere einfach die Target.Column-Bedingung im Code auf die gewünschte Spalte.

2. Funktioniert das Makro in Excel Online?
Nein, VBA-Makros funktionieren nur in der Desktop-Version von Excel. Für Excel Online müssen alternative Lösungen gefunden werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige