Microsoft Excel

Herbers Excel/VBA-Archiv

Zeile mittels Klick in Tabelle 2 und umgekehrt


Betrifft: Zeile mittels Klick in Tabelle 2 und umgekehrt von: Franz
Geschrieben am: 25.08.2016 08:48:08

Guten Morgen liebe Experten,

ich beschäftige mich erst seit kurzem mit VBA und zugehörigen Funktionen. Ich bin noch dabei mich in den Basics einzulesen, möchte aber auch anhand euren Empfehlungen und Hinweisen lernen; daher auch meine zugehörige Frage:

Derzeit möchte ich jeweilige Tabellen-Zeilen mit einem Button (und diesen mit einem Marko) versehen. In der Zeile sind bspw. Name und Anschrift hinterlegt. Mittels klick möchte ich die entsprechende Zeile in das Tabellenblatt 2 innerhalb der Arbeitsmappe überführen. Bspw. sollen in Tabelle 1 alle aktiven Mitglieder und in Tabelle 2 alle inaktiven Mitglieder stehen. Wird ein aktives Mitglied inaktiv, möchte ich am Ende der Zeile klicken, um die Zeile nicht händisch entfernen und in Tabelle 2 einfügen zu müssen.

Sofern möglich, möchte ich für inaktive Mitglieder, die wiederum zu aktiven Mitglieder werden, ebenso verfahren.

Wie würdet ihr so etwas umsetzen?

  

Betrifft: AW: Zeile mittels Klick in Tabelle 2 und umgekehrt von: UweD
Geschrieben am: 25.08.2016 09:46:40

Hallo

So hab ich mal den Aufbau der beiden Tabellen angenommen:

Aktiv

 ABCDE
1NameVornameStraße /Nr. PLZOrt
2MüllerLisaJenseits 122222Himmelreich



Inaktiv
 ABCDE
1NameVornameStraße /Nr. PLzOrt
2MeierErwinHolzweg 233333Hier
3MustermannMaxNirgedwo 1212345Dort


Dieses Makro in die beiden Tabellenblätter

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim Sp As Integer 
    Sp = 5 'Spalte E 
    If Target.Column = Sp And Target.Row > 1 Then
        Cancel = True
        Dim Nach As String
        Select Case Me.Name
            Case "Aktiv"
                Nach = "Inaktiv"
            Case "Inaktiv"
                Nach = "Aktiv"
            Case Else
                Exit Sub
        End Select
        Call Tauschen(Me.Name, Nach, Target.Row)
    End If
End Sub

Das hier in ein normals Modul

Sub Tauschen(Von As String, Nach As String, Zeile As Integer)
    Dim LR As Integer
    LR = Sheets(Nach).Cells(Sheets(Nach).Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte 
    Sheets(Von).Rows(Zeile).Copy Sheets(Nach).Rows(LR + 1)
    Sheets(Von).Rows(Zeile).Delete xlUp
End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0

Beim Rechtsclick in Spalte E (kannst du ja abändern) wird das jeweilige Makro ausgeführt...



LG UweD


  

Betrifft: AW: Zeile mittels Klick in Tabelle 2 und umgekehrt von: ChrisL
Geschrieben am: 25.08.2016 09:47:22

Hi Franz

Damit du nicht in jede Zeile einen Button einsetzen musst würde ich vorschlagen, dass du das Makro mittels BeforeDoubleClick Ereignis auslöst.

Im Beispiel Doppelklick in Spalte A (Target.Column = 1)

Alt+F11, links Doppelklick auf die Tabelle, Code einfügen:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 1 Then
    Rows(Target.Row).Copy Worksheets("Tabelle2").Cells(Rows.Count, 2).End(xlUp).Offset(1, -1)
    Rows(Target.Row).Delete
    Cancel = True
End If
End Sub

Die nächste freie Zeile wird anhand von Spalte B (Zahl 2) ermittelt. Offset "-1" korrigiert das Einfügen auf Spalte A.

Willst du z.B. Spalte D zur Ermittlung der letzten Zeile verwenden, dann...
Cells(..., 4)
Offset(..., -3)

cu
Chris


  

Betrifft: AW: Zeile mittels Klick in Tabelle 2 und umgekehrt von: Franz
Geschrieben am: 25.08.2016 11:01:12

Vielen lieben Dank ihr beiden. Genau das habe ich gesucht, ohne über ein nunmehr entstehendes Problem nachzudenken.

Vor dem eigentlichen Tabellenbereich, in dem die jeweiligen Mitglieder stehen, habe ich eine Nummerierung 1 - x (Abhängig von der Anzahl der Mitglieder) eingefügt. Also 1. Mitglied 2. Mitglied usw.!

Bei Anwendung des Makros bei Mitglied 1. wandert selbiges, inkl. "1." (Spalte A), wie gewollt in die Inaktiv-Tabelle. Klicke ich das nunmehr inaktive Mitglied 1. wieder in ein aktives Mitglied, wird dieses unter allen anderen Mitgliedern in der Aktiv-Tabelle eingefügt, aber leider ist die Nummerierung dann hinüber.... Gleiches gilt für die Inaktiv-Tabelle.

Wie füge ich noch eine Funktion ein, die jedes Mal die Nummeriung in Spalte A neu anstößt?


  

Betrifft: AW: Zeile mittels Klick in Tabelle 2 und umgekehrt von: ChrisL
Geschrieben am: 25.08.2016 11:09:58

Hi Franz

Wenn eine Nummer laufend ändert, wozu dann eine Nummer (heute bin ich Mitglied 7, morgen bin ich Mitglied 10).

Vielleicht mit Formel abhängig von der Zeilennummer
=ZEILE()

cu
Chris


  

Betrifft: AW: Zeile mittels Klick in Tabelle 2 und umgekehrt von: Franz
Geschrieben am: 25.08.2016 11:30:13

Hi ChrisL,

auch wieder wahr. Ich mag es halt gerne chronologisch, aber eigentlich macht es wirklich kein Sinn.

Dankeschön!


  

Betrifft: AW: Zeile mittels Klick in Tabelle 2 und umgekehrt von: UweD
Geschrieben am: 25.08.2016 11:55:09

Hallo

Du kannst natürlich in der Zieltabelle nach dem Einfügen noch sortieren.

füge das noch ein..

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   If Target.Column = 1 Then
       Rows(Target.Row).Copy Worksheets("Tabelle2").Cells(Rows.Count, 2).End(xlUp).Offset(1, -1)
       Rows(Target.Row).Delete
       '*****Sortieren Start 
       With Worksheets("Tabelle2").Sort
            .SortFields.Clear
            .SortFields.Add Key:=Range("A1"), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
                xlSortTextAsNumbers
            .SetRange Range("A:E")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
       End With
       '*****Sortieren Ende 
       Cancel = True
   End If
End Sub


VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Gruß UweD


  

Betrifft: AW: Zeile mittels Klick in Tabelle 2 und umgekehrt von: Franz
Geschrieben am: 25.08.2016 12:22:14

Ich muss nochmal zurückkommen auf die "unsortierte" Variante. Innerhalb des ersten Tabellenblattes ("Aktive Mitglieder")habe ich eine Tabelle erstellt, in der die Mitglieder verzeichnet sind. Durch das Doppelklicken (in das Tabellenblatt "Inaktive Mitglieder" in die dortige Tabelle) wird jedes Mitglieder UNTERHALB der jeweiligen Tabelle eingefügt. D.h. außerhalb der Tabelle.

Wie bekomme ich das "doppelgeklickte" Mitglied denn in die jeweilige Tabelle?


  

Betrifft: AW: Zeile mittels Klick in Tabelle 2 und umgekehrt von: ChrisL
Geschrieben am: 25.08.2016 12:26:02

Hi Franz

Verstehe ich nicht. Geht es vielleicht um Formatierungen? Lade mal bitte eine Beispieldatei.

cu
Chris


  

Betrifft: AW: Zeile mittels Klick in Tabelle 2 und umgekehrt von: Franz
Geschrieben am: 26.08.2016 11:45:30

Ich habe leider noch keine Möglichkeit Dateien hochzuladen (Beschränkung des Firmenrechners).

Ich versuche es nochmal zu erklären:
In dem Tabellenblatt "Aktive Mitglieder" habe ich einen Bereich als Tabelle formatiert. Dort habe ich die jeweiligen Mitglieder eingetragen. Der gleiche Tabellenaufbau befindet sich im Tabellenblatt "Inaktive Mitglieder" (ist jedoch leer - die dortige Tabelle reicht bis Zeile 8).
Klicke ich nun ein Mitglied mit Doppelklick an, um es in das andere Tabellenblatt ("Inaktive Mitglieder") zu überführen, funktioniert dies auch ABER genanntes Mitglied wird unterhalb des Tabellenbereich im Tabellenblatt "Inaktive Mitglieder" eingefügt. Also in Zeile 9. Gleiches gilt für ein nochmaliges Anklicken um das Mitglieder wieder auf die Aktive Liste zu überführen.

Wie muss ich VBA anpassen, dass die Überführung das Mitglied jeweils in den anderen Tabellenbereich und nicht unterhalb der jeweiligen Tabelle einfügt?


  

Betrifft: AW: Zeile mittels Klick in Tabelle 2 und umgekehrt von: ChrisL
Geschrieben am: 26.08.2016 12:37:25

offen, ich kann mich im Moment zeitlich leider nicht damit beschäftigen


  

Betrifft: ich auch nicht, aber von: Michael
Geschrieben am: 26.08.2016 16:09:25

Hi,

hier zwei Vorschläge:
a) "Tabellen" in Blättern aufheben, wenn es ohne die funktioniert.
b) wozu überhaupt ZWEI Listen? Für meinen Geschmack ist das eine zu viel!

Es würde doch reichen, in einer weiteren Spalte ein Kennzeichen zu setzen: die Überschrift heißt dann meinetwegen "Aktiv", und nach Bedarf wird ein "x" reingesetzt oder eben auch nicht.

Das Makro würde dadurch deutlich einfacher werden...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   If Target.Column = 7 Then ' 7 entspricht "G" oder welche auch immer
      If Target = "" Then Target = "x" Else Target = ""
      Cancel = True
   End If
 End Sub

... UND vor allem wären sämtliche Überlegungen zur Nummerierung von vornherein überflüssig.

Arbeiten läßt sich damit ganz easy, indem Du nach Bedarf auf "x" oder nicht "x" filterst.

Evtl. *könnte* man (ich halte das für überflüssig, außerdem verlangsamt es Excel) noch eine bedingte Formatierung anbringen, die Zeilen ohne "x" z.B. auf hellgrau setzt.

Schöne Grüße,

Michael


  

Betrifft: AW: Zeile mittels Klick in Tabelle 2 und umgekehrt von: ChrisL
Geschrieben am: 27.08.2016 08:16:57

Hi Franz

Wie man die Spalte anpasst, anhand derer die letzte freie Zeile ermittelt wird, ist in den Beispielcodes beschrieben. Allerdings werden reine Formatierungen hierbei nicht berücksichtigt, vermutlich hast du zusätzliche Zellen mit Inhalt befüllt.

Wenn du nicht weiter kommst hilft nur noch eine Beispieldatei.

cu
Chris


Beiträge aus den Excel-Beispielen zum Thema "Zeile mittels Klick in Tabelle 2 und umgekehrt"

http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip