Microsoft Excel

Herbers Excel/VBA-Archiv

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

Statusauswahl per Doppelklick aus eine Liste


Betrifft: Statusauswahl per Doppelklick aus eine Liste von: Lilli
Geschrieben am: 07.03.2018 18:29:12

Hallo Allerseits,

Ich bräuchte bitte Hilfe im Bereich VBA. Da habe ich da keine Ahnung. Aber ich glaube zu wissen, was ich gerne möchte. ;)

Also ich habe eine Demotabelle hinzugefügt.

Ich möchte in eine Spalte einen Status per Doppelklick erzeugen. Die Liste von den Status liegt auf einen anderen Tabellenblatt. Die Liste kann sich erweitern. Deshalb habe ich für die Liste einen Namen gelegt, der sich dynamisch verändert aufgrund der Länge der Liste.

Der Makro soll prüfen welchen Status gerade ausgewählt ist und beim Doppelklick soll der Makro das nächste Status nehmen.

https://www.herber.de/bbs/user/120265.xlsm

Es wäre schön, wenn das Makro kommentiert ist, damit ich ungefähr weiß, was in den Moment passiert, wenn es keine Umstände macht.

Vielen Dank für die Mühe und Hilfe im Voraus.

Viele Grüße, Lilli :)

  

Betrifft: AW: Statusauswahl per Doppelklick aus eine Liste von: EtoPHG
Geschrieben am: 07.03.2018 19:32:01

Hallo Lilli,

Du musst zuerst folgendes machen:
Ctrl-L in den blauen Bereich im Tabellblatt "Tabelle2"
Damit brauchst du das Bereich.Verschieben Gedöns nicht mehr!

Dann diesen (dokumentierten) Code in das Tabellenblatt "Tabelle1" einfügen

Option Explicit
' Dieses Ereignis tritt ein, wenn eine Zelle doppelklicked wird
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'   ZellBereich 1 = Datenteil der internen Tabelle auf diesem Blatt
    Dim lObj1 As Range
'   ZellBereich 2 = Datenteil der internen Tabelle auf dem Blatt "Tabelle2"  
    Dim lObj2 As Range  
    Set lObj1 = Me.ListObjects("Tabelle2").DataBodyRange
    Set lObj2 = Worksheets("Tabelle2").ListObjects("Tabelle1").DataBodyRange
    Dim fndStatus As Long   ' Zellenzeile, für gefundene statusbeschreibung
    ' Liegt die geklickte Zelle in der Spalte 5 von Zellbereich 1 ?
    If Not Intersect(Target, lObj1.Columns(5)) Is Nothing Then
        If IsEmpty(Target) Then
            ' Wenn die Zelle leer ist, wird die erste Statusbeschreibung eingefügt
            Target = lObj2.Cells(1, 2)
        Else
            ' ist sie nicht leer, wird die Statusbeschreibung gesucht
            On Error Resume Next
            fndStatus = WorksheetFunction.Match(Target, lObj2.Columns(2), 0)
            ' Die Statusbeschreibung wurde nicht gefunden
            If fndStatus = 0 Then
                MsgBox "Dieser Status ist ungültig! Bitte löschen!", vbCritical, _
                       "Ungültiger Status"
                On Error GoTo 0
                Exit Sub
            ' Die Statusbeschreibung wurde gefunden
            Else
                ' Den nächsten Status einfügen, wenn es nicht der letzte ist!
                If fndStatus < lObj2.Rows.Count Then
                    Target = lObj2.Cells(fndStatus, 2).Offset(1)
                ' Es ist leider der letzte
                Else
                    MsgBox "Es gibt keinen weiteren Status!", vbExclamation, _
                           "Kein weiterer Status"
                End If
            End If
        End If
        Cancel = True
    End If
End Sub

Fertig ist die Schosse.

Gruess Hansueli


  

Betrifft: AW: Statusauswahl per Doppelklick aus eine Liste von: Lilli
Geschrieben am: 08.03.2018 12:02:12

Hallo Hansueli,

Vielen Dank für Deine Mühe. Ich habe gerade Dein Code in der Liste eingetragen und bekomme folgende Fehler: Laufzeitfehler 9: Index außerhalb des gültigen Bereichs.

folgende Zeile wird gelb markiert:

Set lObj1 = Me.ListObjects("Tabelle2").DataBodyRange


Weißt Du zufällig, was das bedeutet?

Vielen Dank für die Mühe und Feedback im Voraus.

Viele Grüße,
Lilli :)


  

Betrifft: Ja, ich weiss was das bedeutet von: EtoPHG
Geschrieben am: 08.03.2018 13:13:06

Lilli,

Das List-Objekt heisst nicht "Tabelle2" in deinem Blatt mit dem Code.
Finde heraus, wie es heisst und ändere den Namen in den "...".
Herausfinden am einfachsten so: In der Zelladresse oben links, den Dropdown aktivieren, zeigt dir alle Namen von Listobjekten oder definierten Namen an!

Gruess Hansueli


  

Betrifft: AW: Statusauswahl per Doppelklick aus eine Liste von: Lilli
Geschrieben am: 08.03.2018 13:55:21

Hi Hansueli,

ich habe die Datei samt Code hochgeladen. Darf ich Dich bitten nachzuschauen, was ich falsch gemacht habe?

https://www.herber.de/bbs/user/120289.xlsm

Ich habe per Suchen Ersetzen die Namen in den Code geändert. Ich hoffe, ich habe es richtig gemacht. Dann habe ich wie Du mir beschrieben hast die Namen in diese Eigenschaft geändert. Ich hoffe auch, dass ich das richtig gemacht habe.

vielen Dank für Deine Mühe.

Viele liebe Grüße,
Lilli


  

Betrifft: Hier ist die Mappe zurück von: EtoPHG
Geschrieben am: 08.03.2018 14:29:24

Hallo Lilli,



Die Tabellenblätter heissen "MeineListe" uns "StatusListe"
In der StatusListe hast du den Bereich nicht, wie vorgeschlagen, in ein List-Objekt umgewandelt.
Es muss 2 Listobjekte geben.
Einen Zellenbereich in eine Tabelle umwandeln:
Eine Zelle im Zellenbereich selektieren. Es wird kein Register Tabellentools-Entwurf angezeigt.
Ctrl-L Drücken - [x] Tabelle hat Überschriften - [OK]
Ein Listobjekt umbennen:
Eine Zelle im Tabellenbereich selektieren. Es wird automatisch ein Tab Tabellentools-Entwurf angezeigt - Diesen neuen Tab anklicken.
Im Feld links oben den Tabellenname überschreiben.

Ich hab jetzt diese "internen" Tabellen gem. obigem Vorgehen auf "ListeAuftrag" und "ListeStatus" geändert. Diese beiden Begriffe erscheinen jetzt auch im Dropdown der Zelladresse in der Formeleingabezeile. Wenn einer dort ausgewählt wird markiert Excel automatisch den Listobject-Bereich.

Den Code entsprechend den Namen der "internen" Tabellen (Listobjects) angepasst.

Hier ist die angepasste Mappe!

Gruess Hansueli


  

Betrifft: AW: Hier ist die Mappe zurück von: Lilli
Geschrieben am: 08.03.2018 15:17:36

Hi Hansueli,

das klappt echt super klasse. Vielen Dank. :)

Ich wollte die Tabelle freigeben, weil noch andere daran arbeiten sollen. Aber da Streikt Excel, weil man bei eine Freigabe keine Tabellen enthalten dürfen.

kann man da vielleicht etwas machen? ich hoffe, es ist kein großer Aufwand.

Wenn ich eine Tabelle zu einem Bereich umwandeln würde, kann das Makro höchstwahrscheinlich gar nicht mehr darauf zugreifen, oder? und es kommt höchstwahrscheinlich den gleichen Fehler noch mal.

Vielen lieben Dank.
Liebe Grüße,
Lilli


  

Betrifft: Mappen freigeben...und so von: EtoPHG
Geschrieben am: 08.03.2018 16:15:06

Hallo Lilli,

Arbeitsmappen freigeben für die gleichzeitige Nutzung durch mehrere wird selbst von Microsoft nur mit vielen Vorbehalten empfohlen.
Wenn man die "internen" Tabellen (Listobjekte) in Bereiche umwandelt, müsste man das Makro ganz anders bauen. Aber in freigegebenen Mappen funktionieren die meisten Makros sowieso nicht.

Du musst damit leben, das Excel nicht dafür geschaffen ist und die Anwender anweisen, nach Änderungen die Mappe zu schliessen, so dass sie für andere wieder frei ist. Der Benutzer wird ja darauf hingewiesen, wer die Mappe gerade geöffnet hat.

Gruess Hansueli


Beiträge aus dem Excel-Forum zum Thema "Statusauswahl per Doppelklick aus eine Liste"