Microsoft Excel

Herbers Excel/VBA-Archiv

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

Eintrag erzwingen mit Intersec | Herbers Excel-Forum


Betrifft: Eintrag erzwingen mit Intersec von: Franz D.
Geschrieben am: 15.11.2009 16:24:26

Hallo Freunde,
Habe die Intersec-Methode noch nicht verstanden. Wo ist hier der Denkfehler? Möchte in einem Bereich doch stehen bleiben wo nur leere Felder sind. Dies sollte sich solange wiederholen bis die alle Pflichfelder gefüllt sind. Momentan bleibt der Cursor überall stehen.

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
'"$A$1:$C$14" muss logischerweise vorher mit Dummies gefüllt sein
Dim iSect As Range, C As Range
Set iSect = Intersect(Target, Range("$A$1:$C$14"))
On Error GoTo Errorhandler
If Not iSect Is Nothing Then
    For Each C In Range("$A$1:$C$14")
        If IsEmpty(C) Then
            Application.EnableEvents = False
            Target.Activate
            MsgBox (Target.Address)
            Exit For
        End If
    Next C
End If
Errorhandler:
Application.EnableEvents = True
End Sub
Kann ich auf eure Hilfe zählen?
Gruß
Franz D.

  

Betrifft: AW: C.Activate von: Daniel
Geschrieben am: 15.11.2009 16:37:11

nicht Target.Activate

Gruß, Daniel


  

Betrifft: AW: Merci Daniel - o.T. von: Franz D.
Geschrieben am: 15.11.2009 17:00:51

.


  

Betrifft: AW: C.Activate Nachtrag von: Franz D.
Geschrieben am: 15.11.2009 18:22:12

Hallo Daniel!
Würde gerne noch in einer Zeile die Felder "aufsteigend" absichern. Habe "unser" Code etwas geändert wie folgt:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
'"A1:E1" muss logisch vorher mit einige Dummies gefüllt sein
Dim iSect As Range, C As Range
Set iSect = Intersect(Target, Range("A1:E1"))
On Error GoTo Errorhandler
If Not iSect Is Nothing Then
    For Each C In Range("A1:E1")
        Application.EnableEvents = False
        If IsEmpty(C) Then
            C.Activate
            Application.StatusBar = Target.Address & " muss zuerst ergänzt werden!"
            'MsgBox (Target.Address & " muss zuerst ergänzt werden!")
        End If
        Application.EnableEvents = True
    Next C
End If
Errorhandler:
Application.EnableEvents = True
End Sub

Anstelle das 1.leere Feld anzuspringen reagiert die SUb "rückwärts"?? Ich krieg's nicht hin dass er nacheinander sauber prüft. Kannst du mir (oder wer auch immer) noch helfen?
Franz D.


  

Betrifft: AW: C.Activate Nachtrag von: Daniel
Geschrieben am: 15.11.2009 20:20:11

HI
so ganz verstehe ich noch nicht, was du willst.

gruß, Daniel


  

Betrifft: AW: C.Activate Nachtrag von: Franz D.
Geschrieben am: 15.11.2009 21:19:37

Hallo Daniel.
Die Überwachung soll sukzessiv sämtliche Einträge von links nach rechts nacheinander auf "isempty" überprüfen. In der jetzigen SUB fängt es (bei mir) bei E1 an anstelle von A1 an.
Beispiel in Range("A1:E1")): A1("28.02.09", "B1(""), C1("etwas"), D1(800,00), E1("").
Der Cursor soll bei einem Inhalt "" den user zwingen eine Angabe zu machen bevor er weiter nach rechts springen darf. Hast du eine idee?. Danach bin ich wahrscheinlicher schlauer sein mit was die Change und selection_change Gutes tun können.
Tschüss!
Franz D.


  

Betrifft: AW: C.Activate Nachtrag von: Daniel
Geschrieben am: 15.11.2009 22:58:48

Hi

probiers mal so:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static rng As Range
Dim check As Boolean
If Not rng Is Nothing Then
    If rng.Cells.Count = 1 Then
        If rng.Value = "" Then
            check = True
            Application.EnableEvents = False
            rng.Select
            Application.EnableEvents = True
            MsgBox "Bitte Wert eingeben in Zelle " & rng.Address(0, 0)
        End If
    End If
End If
If Not check Then Set rng = Target

End Sub

Gruß, Daniel


  

Betrifft: AW: C.Activate Nachtrag von: Franz D.
Geschrieben am: 16.11.2009 19:12:26

Hallo Daniel,
Nicht schlecht! Die Prozedur zwingt mich sauber von links nach rechts . Wie bekomme ich aber die Navigation nur innerhalb eines Range("A1:E1") oder auch "C8:G8" als Beispiel? Habe es mit einem Set rng=range("C8:G8") probiert, irgendwie geht es nicht. Kannst du dies noch ermöglichen (gerne auch ein anwesender Profi) ?
MfG
Franz D.


  

Betrifft: AW: C.Activate Nachtrag von: Daniel
Geschrieben am: 16.11.2009 21:42:48

HI
das würde ich mal so versuchen:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static rng As Range
Dim check As Boolean

if target.Cells.count = 1 and Not Intersect(Target, Range("C8:G8")) Is Nothing Then

If Not rng Is Nothing Then
    If rng.Cells.Count = 1 Then
        If rng.Value = "" Then
            check = True
            Application.EnableEvents = False
            rng.Select
            Application.EnableEvents = True
            MsgBox "Bitte Wert eingeben in Zelle " & rng.Address(0, 0)
        End If
    End If
End If

end if

If Not check Then Set rng = Target



End Sub
Gruß, Daniel
ps nicht getestet


  

Betrifft: AW: C.Activate Nachtrag von: Franz D.
Geschrieben am: 17.11.2009 19:20:38

Hallo Daniel,
Danke schön für die vielen Bemühungen. Muss an der Prozedur noch etwas arbeiten. Ich hoffe ich packe es.
Tschüss!
Franz D.


Beiträge aus den Excel-Beispielen zum Thema "Eintrag erzwingen mit Intersec"