Clever-Excel-Forum

Normale Version: Werte per Mausklick von "Tabelle_1" in leere Zeile von "Tabelle_2"
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo Excel Forum!

Meine Suche im Internet hat mich leider nicht weitergebracht. Hat jemand von euch einen Vorschlag für folgendes Problem? 

Mein Ziel:
  • Ich habe in "Tabelle_2" eine Liste mit über 200 Produkten. Auf jeder Zeile ist ein neues Produkt mit spezifischen, zugehörigen Werten aufgelistet. 
    [attachment=10628]
  • In "Tabelle_1" habe ich eine Berechnungsmatrix erstellt. Sie ist leer, soll aber mit dem Namen von beliebig ausgewählten Produkten gefüllt werden. 
    [attachment=10629]
  • Ich suche nun nach einer Möglichkeit, wie ich in "Tabelle_2" ein beliebiges Produkt anwählen kann (am liebsten per Klick auf das Produktbild, aber auch ein Klick auf ein Steuerelement ginge), worauf der Name des angewählten Produktes in "Tabelle_1" verschoben wird. (Gewünscht ist nur das Kopieren des Produktnames, denn die zugehörigen Produkteigenschaften sucht die Berechnungsmatrix automatisch, sofern sie einen Produktname zur Verfügung hat). In "Tabelle_1" soll der Produktname in die nächst freie Zelle meiner Berechnungsmatrix geschrieben werden. Die Berechnungsmatrix hat hierfür vordefinierte, freie Zellen.  
    [attachment=10630]
    [attachment=10631]
Wie ich bereits herausgefunden habe, ist die von mir gesuchte Funktion nur mit VBA möglich. Weil das Excel Dokument nebst Win10 auch auf Mac OS funktionieren sollte, Excel auf Mac OS aber meines Wissens keine "ActiveX-Steuerelemente" unterstützt, müsste zwingend ein normales "Steuerelement" bzw. einen dafür gültigen VBA Code verwenden werden. Weiss jemand, wie der gesuchte Code aussehen würde? 

PS: VBA Funktionen sind ja meist mit Steuerlementen verknüpft, die einen einzigartigen Namen aufweisen. Ich habe aber über 200 Produkte und damit über 200 solcher potentieller Steuerelemente. Infolge dessen müsste ich den VBA Code manuell mit den unterschiedlichen Steuerelement-Namen versehen. Wenn es eine Möglichkeit gibt, einen generellen Code zu schreiben, den man einfach auf alle 200 Produkte übertragen kann, wäre das ein enormer Zeitgewinn.

Ich danke bereits jetzt allen, die weiterhelfen möchten!
Hallo,

folgenden Code ins Codemodul der Tabelle2 einfügen:


Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Dim lngZ As Long
 If Target.Row > 1 And Target.Column = 4 Then
   Cancel = True
   If Target <> "" Then
     With Sheets("Tabelle1")
       lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
       If Application.CountIf(.Range("A2:A" & lngZ), Target) Then
         MsgBox Target & " existiert bereits in Tabelle1"
       Else
         .Range("A" & lngZ) = Target
       End If
     End With
   End If
 End If
End Sub


Bei Doppelklick in Spalte D ab Zeile 2 der Tabelle2 wird der Wert in die erste frei Zelle in Spalte A der Tabelle1 geschrieben.
Sollte der Wert in Spalte A schon vorhanden sein, also bei mehrmaligem Doppelklick in die selbe Zelle, erscheint eine Meldung.
Hallo Atilla!

Zuerst einmal danke für deine Hilfe! Die Idee, die gesuchte Funktion an einem Doppelklick festzumachen, könnte nicht besser sein. Ich habe deinen Code in einer Übungsdatei ausprobiert und er funktioniert einwandfrei. Top!

Gerne hab ich noch 2 Fragen:

  1. Mit deinem Code wird per Doppelklick auf eine Zelle der jeweils hinterlegte Wert in die gewünschte Berechnungsmatrix in "Tabelle_1" kopiert. Im Prinzip hilft mir das sehr weiter und ich kann diese Funktion gut gebrauchen. Noch einfacher wäre für mich, auf die Zelle mit dem Produktbild zu klicken (in unserem Fall also Doppelklick), worauf der zugehörige Produktname (nicht dieselbe Zelle) kopiert würde. In meinen Beispielbildern ist dies wahrscheinlich zu wenig klar rübergekommen. Darum hier eine neue Darstellung:
    [attachment=10638]
  2. Bei der Anwendung deines Codes in meiner intendierten Datei kommt es zu einem spannenden Phänomen: Obschon die Zellen in der Berechnungsmatrix (in "Tabelle_1") optisch leer sind, werden sie vom Code nicht genutzt. Erst am Ende der "Tabelle_1" findet er eine Zelle, die er mit dem Produktnamen füllt. Die leeren Zellen in der Berechnungsmatrix scheinen also gar nicht "leer" zu sein - zumindest für die Funktion nicht. Wahrscheinlich liegt dies daran, dass die genannten, leeren Zellen ein Dropdown-Menü aufweisen, über das ich auf die Produkte in "Tabelle_2" zugreifen kann (ist aber viel zu umständlich). Keine Ahnung, was ich da machen sollte. Darum wollte ich fragen, ob du den Code leicht modifizieren könntest. Im Internet habe ich eine Idee aufgeschnappt: Statt nach leeren Zellen ("") zu suchen, könnte man ja z.B. nach der Länge von 0 Zeichen suchen. Vielleicht könnte man so das Problem umgehen?
IHallo August,

Du arbeitest wahrscheinlich mit "intelligenten Tabellen", deshalb wird die erste freie Zelle außerhalb dieser gefunden.

Was Du beschreibst kann problemlos umgesetzt werden. Doch bin ich gerade unterwegs und kann Dir erst heute Abend eine angepasste Version einstellen.
Du kannst aber selber schon mal etwas tüfteln. Such mal nach Target.Offset, damit kannst Du leicht einen Wert um Zeilen/Spalten versetzt ansprechen. Es geht auch mit Cells(Target.Row, Spaltenzahl)
Hallo Atilla,

danke für die Hinweise! Ich versuche einmal, ob ich mit den Tipps etwas vorwärts komme.
Hallo Atilla

Ich habe versucht den Code mit Target.Offset bzw. mit Cells(Target.Row, Spaltenzahl) zu erweitern. Meine Versuche waren leider nicht mit Erfolg gekrönt.

Was die Suche nach einer freien Zelle anbelangt: Es muss sich in der Tat um eine intelligente Tabelle handeln...

Möglicherweise hattest du ja schon Zeit/Lust, den Code zu ergänzen?
Hallo August,

wenn Du eine Deinem Original nachgestellte Beispieldatei einstellst, dann können vielleicht auch andere helfen.
Ich selbst habe auch wenig Zeit im Moment.
Danke für den Tipp! Eine Beispielsdatei liegt bei.

Besten Dank schon mal!
Hallöchen,

hier mal eine Variante für den Eintrag. Zwischen den beiden "fetten" codes kommt was neues Smile
With Sheets("Auswertung")
Code:
lngZ = 2
       Do While .Cells(lngZ, 2) <> ""
       lngZ = lngZ + 1
       Loop
If Application.CountIf(.Range("B2:B" & lngZ), Target) Then

Allerdings wird es dann ein Problem mit dem Tabellenaufbau geben, wenn eine Produktklasse voll ist. Was hast Du denn dann vor? Eine Variante wäre ja, die Klasse zu jedem Produkt in eine extra Spalte zu schreiben. Du könntest später danach sortieren oder filtern, was jetzt nicht geht.
Hallo

anbei die Beispieldatei mit einer Makrolösung in Modul1 zurück.  Ich koiere durch Anklicken der Schere.
Mir fiel auf das in der Tabelle Auswertung die Zeile 8 fehlte, deshalb war sie nicht 1:1 zur Tabelle Produkte !!
Beim Öffen kam eine Meldung das mein Excel 2007 nicht alles übernehmen konnte. Für das Makro egal.

mfg  Gast 123
Seiten: 1 2