Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1852to1856
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Doppel klick hat kein Value

Doppel klick hat kein Value
03.11.2021 19:36:35
Oraculix
Hallo
Habe mir einen Code zusammengestellt der mir bei Doppelklick in Spalte B die Userform1 öffnet und das Image1 aus der Tabelle Quasi kopiert,und in die Userform1 Image24 einfügt.
Aber leider wird die die Zeile in der Userform1 Listbox nicht markiert nur das Bild wird in Image24 in der Userform1 angezeigt.
Irgendwie hat mein Code keinen Wert den er an die Listbox weitergeben kann.
Leider kann ich keine Arbeitsmappe erstellen wegen der 300kb Begrenzung, aber ich hoffe jemand kann mir meinen Code etwas Ändern damit in der Listbox eine Markierung erfolgt der den Namen Value des Bildes erkennt.
Irgendwie hat der Code keinen Value.
' Doppel klick in Spalte B öffnet Bild in Userform1

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim strFilename As String
Application.EnableEvents = False
With UserForm1
ActiveWindow.ScrollRow = ActiveCell.Row
Const FOLDER_PATH As String = "D:\EMDB\HTML\ExcelUserform1\" 'versuche hier verzweifelt einen Value zu bekommen
strFilename = Dir$(FOLDER_PATH & objCell.Text & ".*")
Set .Image24.Picture = Image1.Picture
Call .Show
End With
Application.EnableEvents = True
End Sub
Gruß
Oraculix

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Doppel klick hat kein Value
03.11.2021 20:04:50
{Boris}
Hi,
ohne Dein Userform / die Mappe zu kennen, wird das schwierig.
Das verstehe ich nicht:

Const FOLDER_PATH As String = "D:\EMDB\HTML\ExcelUserform1\" 'versuche hier verzweifelt einen Value zu bekommen
Was für einen "Value" möchtest Du wofür bekommen?
Grundsätzlich:
Der Doppelklick liefert Dir zumindest mal die auslösende Zelle (=Target) - und Target beinhaltet dann auch den Wert eben dieser Zelle.
Also: Welcher "Value" soll genau für was verwendet werden?
VG, Boris
AW: Doppel klick hat kein Value
03.11.2021 20:29:14
Oraculix
Ah vielen Dank das Du mir hilfst!
''''''''''''''''''''''''''''''''''''''''''''''''''
Dim strFilename As String
ActiveWindow.ScrollRow = ActiveCell.Row
Const FOLDER_PATH As String = "D:\EMDB\HTML\ExcelUserform1\" 'versuche hier verzweifelt einen Value zu bekommen
strFilename = Dir$(FOLDER_PATH & objCell.Text & ".*")
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Das kann man alles weglassen das habe nur in meiner Verzweiflung hingeschrieben
Das habe ich nur dazugeschrieben damit ich irgendwie einen Value für die Listbox bekomme.
Leider weis ich nicht wie ich die Listbox =(Lst_Treffer) der Name der Listbox in diesem code anspreche.
Wenn ich in der Tabelle in der Spalte B eine Zelle markiere wird mir ein Bild angezeigt aus dem Ordner
"D:\EMDB\HTML\ExcelUserform1\"
Wenn ich in dieser Zelle nun Doppelklicke bleibt das Bild Dann eben in Spalte C Image1
mit diesem Code öffne ich nun die Userform1
With UserForm1
Set .Image24.Picture = Image1.Picture
Call .Show
End With
In der Userform1 öffnet sich jetzt das Bild Image1 aus der Tabelle C in Image24 Userform das Funktioniert auch aber
Neben dem Bild in der Userform1 ist auch eine Listbox die diesen Value erhalten soll und den Eintrag markieren soll!
Hoffe du Verstehst mich jetzt etwas besser.
Danke
Gruß
Oraculix
Anzeige
AW: Doppel klick hat kein Value
03.11.2021 20:38:44
{Boris}
Hi,
...das ist alles noch ein wenig verworren.
Vielleicht erstmal hierzu:

Leider weis ich nicht wie ich die Listbox =(Lst_Treffer) der Name der Listbox in diesem code anspreche.
Du hast doch das Userform1 zu beginn mit dem With-Rahmen referenziert. Damit sprichst Du doch bereits das Image-Control Image24 an.

Set .Image24.Picture = Image1.Picture
Genau so kannst Du auch die Listbox ansprechen:

.Lst_Treffer
Woher soll jetzt der notwendige Wert für die ListBox kommen?
VG, Boris
Anzeige
AW: Doppel klick hat kein Value
03.11.2021 20:54:18
Oraculix
Danke für die rasche Antwort!
Genau jetzt kommen wir der Sache näher
.Lst_Treffer = Value vom Doppelklick
wie schreibe ich das korrekt in meinen Code?
In der Listbox Lst_Treffer steht genau unter 3000 Einträgen der Name des Doppelklicks.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.EnableEvents = False
With UserForm1
Lst_Treffer = Target 'hab ich versucht kommt aber Fehler Varible nicht definiert
Set .Image24.Picture = Image1.Picture
Call .Show
End With
Application.EnableEvents = True
End Sub
Gruß
Oraculix
Anzeige
Achte auf die Kleinigkeiten...
03.11.2021 20:58:57
{Boris}
Hi,

With UserForm1
Lst_Treffer = Target
Da fehlt der Punkt vor Lst_Treffer.
Also

With UserForm1
.Lst_Treffer = Target
VG, Boris
AW: Achte auf die Kleinigkeiten...
03.11.2021 21:14:49
Oraculix
Jup jetzt hat es kurz funktioniert !
Nach dem dritten mal klicken bei verschieden Zellen kahm dann
Laufzeitfehler '380':
Eigenschaft Value konnte nicht gesetzt werden. Ungültiger Eigenschaftenwert.
Jetzt zeigt er mir auch keine Bilder mehr in der Tabelle muss Excel immer Neustarten dann geht es wieder aber der Fehler kommt immer Wieder.
Liegt es daran das nur die die Spalte B angesprochen werden darf weil nur dort gibt es den gleichen Eintrag.
.Lst_Treffer(B) = Target ?

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.EnableEvents = False
With UserForm1
.Lst_Treffer = Target
Set .Image24.Picture = Image1.Picture
Call .Show
End With
Application.EnableEvents = True
End Sub
Gruß
Oraculix
Anzeige
AW: Achte auf die Kleinigkeiten...
03.11.2021 21:22:10
{Boris}
Hi,
wenn Target einen Wert enthält, der nicht in der Listbox (Lst_Treffer) vorhanden ist, dann kommt es natürlich zu einem Fehler.
Warum die Mappe dann komplett abschmiert, vermag ich aus der Ferne nicht zu sagen.
So, wie Deine Doppelklick-Ereignis bisher programmiert ist, reagiert es ja auf jeden Doppelklick im gesamten Tabellenblatt, da Du zu Beginn keinen Wirkungsbereich festlegst. Zudem würde ich die Variable Cancel mit dem Wert True belegen, da sich Excel ansonsten im Editiermodus und somit in eine "eigenen Welt" befindet, die nicht immer erklärbar ist (und auch zu Abstürzen führen kann).
VG, Boris
Anzeige
Danke für Deine Mühe
03.11.2021 21:34:24
Oraculix
Danke für Deine Mühe mit einem Anfänger!
Also es Steht sicher genau dieser Wert exact in Spalte B in der Listbox.
Aber das mit der gesamte Tabelle per Doppelklick könnte auch ein Fehler sein.
Wie kann das machen das er nur auf Spate B in der Tabelle Doppelklick reagiert?
Das ist mir etwas zu hoch sorry verstehe nicht was Du meinst!
Zudem würde ich die Variable Cancel mit dem Wert True belegen
Gruß
Oraculix
Kurze Erklärung
03.11.2021 21:48:11
{Boris}
Hi,
schau Dir mal die erste Zeile des Doppelklick-Ereignisses genau an:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dort gibt es 2 Variablen:
Target = Zelle, in der der Doppelklick ausgeführt wurde - eine Variable des Typs Range. Ist der Doppelklick z.B. in Zelle D1 erfolgt, dann enthält Target das Objekt (Range) D1 - mit allen zugehörigen Eigenschaften (.Value, .Interior, .Address etc. etc.)
Cancel - eine Variable des Typs Boolean - also WAHR (True) oder FALSCH (False). Ohne explizite Angabe ist der Wert FALSCH / False - bedeutet: Das Doppelklick-Ereignis wird nicht beendet - dadurch befindet sich die Zelle im Editiermodus. Das kann man verhindern, indem man diese Variable im Code explizit auf True stellt:

Cancel = True
Damit wird das Ereignis quasi "abgebrochen" - im Klartext: Der Editiermodus wird ausgeschaltet.
Zum Wirkungsbereich des Ereignisses: Diesen kann man z.B. mit der Intersect-Methode abfragen - man prüft also, ob es eine Überschneidung (=Intersect) zwischen Target und dem angegebenen Bereich (im Beispiel: B1:B100) gibt - in der Programmierung oft als "Wenn nicht ist nichts..." geschrieben:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("B1:B100")) Is Nothing Then
'hier kommt Dein gesamter Code
End If
End Sub
Wenn keine Überschneidung existiert, dann wird der Code auch nicht ausgeführt.
VG, Boris
Anzeige
Super erklärt!
03.11.2021 22:07:45
Oraculix
Wauw Danke Super erklärt!
Muss es wahrscheinlich noch genau durcharbeiten aber ungefähr verstehe ich es.
So hab ich es jetzt aber es kommt immer wieder der gleiche Fehler wie vorhin und dann Excel Neustart.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("B1:B100")) Is Nothing Then
Cancel = True
Application.EnableEvents = False
With UserForm1
Set .Image24.Picture = Image1.Picture
.Lst_Treffer = Target
Call .Show
End With
Application.EnableEvents = True
End If
End Sub
Vielleicht hilft dieser Code weiter mit dem ich das Bild per klick in Spalte B auslese?
'Fügt immer ein Bild ein bei linksklick in Spalte B

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim objCell As Range
Dim strFilename As String
Application.EnableEvents = False
Application.DisplayCommentIndicator = xlNoIndicator
If TypeOf Selection Is Range Then
For Each objCell In Selection
With objCell
If Not .Comment Is Nothing And .Column = 2 Then .Comment.Visible = False
End With
Next
End If
ActiveWindow.ScrollRow = ActiveCell.Row
Const FOLDER_PATH As String = "D:\EMDB\HTML\ExcelUserform1\"
Set objCell = Target.Cells(1, 1)
If Not Intersect(objCell, Columns(2)) Is Nothing Then
strFilename = Dir$(FOLDER_PATH & objCell.Text & ".*")
If strFilename  vbNullString Then
With OLEObjects("Image1")
.Top = objCell.Top
.Left = objCell.Left + objCell.Width
.Visible = True
Set .Object.Picture = LoadPicture(Filename:=FOLDER_PATH & strFilename)
End With
Else
OLEObjects("Image1").Visible = False
End If
Else
OLEObjects("Image1").Visible = False
End If
Set objCell = Nothing
'Zeigt Markierte Zeile aus Spalte B in C1 an.
BildName = Target.Text
If Selection.Column = 2 Then
ActiveSheet.Range("C1").Value = Selection
Else: ActiveSheet.Range("C1").Value = ""
End If
Application.EnableEvents = True
End Sub
Gruß
Oraculix
Anzeige
AW: Super erklärt!
03.11.2021 22:16:38
{Boris}
Hi,
also aus der gezeigten Kombination von SelectionChange-Ereignis (bei dem Du im Übrigen auch die selbe Vorabprüfung bezgl. Wirksamkeit machen solltest mit If Not Intersect... Is Nothing - aber das nur am Rande) und BeforeDoubleKlick-Ereignis kann ich ad hoc nicht erkennen, wo und warum genau es zum Absturz kommt.
Dafür bräuchte es halt mal Deine Mappe. Wenn sie zu groß für das Forum ist, dann benutze OneDrive oder Ähnliches zum Upload.
Meine "Tipps" hast Du aber korrekt eingebaut!
VG, Boris
AW: Super erklärt!
03.11.2021 22:29:42
Oraculix
Hi Danke
Onedrive möchte ich nicht benutzen und kenne mich mit der Sicherheit zu wenig aus.
Darf ich Dir die Arbeitsmappe senden per E-Mail ca.30MB und Film Cover muss ich Dir ja nicht alle senden nur ein Paar Bilder 10Stk.
außer Du möchtest alle haben dann sag bescheid.
Gruß
Oraculix
Anzeige
AW: Super erklärt!
03.11.2021 22:32:47
{Boris}
Hi,
mal sehen, ob das funktioniert:
borisbeaker AT gmx Punkt de
Wird aber morgen, da ich jetzt "Feierabend" mache ;-)
VG, Boris
AW: Super erklärt!
03.11.2021 22:42:11
Oraculix
ok Danke
Dateien sind bei Dir!
Gruß
Oraculix
Noch nix da...oT
03.11.2021 22:48:42
{Boris}
VG, Boris
AW: Noch nix da...oT
03.11.2021 23:02:34
Oraculix
Sorry habe .at statt de eingegeben
jetzt müsste es aber gehen.
Gruß
Oraculix
Puhhhhh....
03.11.2021 23:49:22
{Boris}
Hi,
...da hast Du ja bereits ein mächtiges Projekt umgesetzt - WOW!
Um es kurz zu machen - teste mal:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim x As Long
If Not Intersect(Target, Range("B2:B5000")) Is Nothing Then
Cancel = True
Application.EnableEvents = False
With UserForm1
Set .Image24.Picture = Image1.Picture
For x = 1 To .Lst_Treffer.ListCount - 1
If .Lst_Treffer.List(x, 1) = Target Then
.Lst_Treffer.Selected(x) = True
Exit For
End If
Next x
Call .Show
End With
Application.EnableEvents = True
End If
End Sub
VG, Boris
Anzeige
Kleine Korrektur...
03.11.2021 23:56:22
{Boris}
Hi,
die Schleife muss bei Null beginnen - also statt

For x = 1 To .Lst_Treffer.ListCount - 1
muss es heißen

For x = 0 To .Lst_Treffer.ListCount - 1
VG, Boris
Geniale Lösung Boris!! Vielen Dank
04.11.2021 00:21:03
Oraculix
Echt Super von Dir , und das zu so später Stunde!!!
Funktioniert Fehlerfrei jetzt.
Hätte da noch eine Frage an Dich*?
In der Userform1 klicke ich per Doppelklick auf Image24 und dann wird der Eintrag gesucht das Funktioniert auch nur die Userform1 geht nicht zu. Unload Me wird einfach ignoriert!!
'Doppelklick auf Bild in Userform1sucht eintrag in Tabelle Ansehen

Private Sub Image24_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim OpenFile As String
Dim rngSuche As Range
Set rngSuche = Worksheets("FilmeAnsehen").Columns(2).Find(Lst_Treffer.Value, LookAt:=xlPart)
If Not rngSuche Is Nothing Then
Me.Hide
Application.Goto Reference:=rngSuche
Else
MsgBox "Titel nicht gefunden"
End If
Unload Me
'Wenn Abrechen gewählt wird Fehler abfangen
On Error Resume Next
ThisWorkbook.FollowHyperlink rngSuche.Hyperlinks(1).Address
On Error Resume Next
If OpenFile = False Then
UserForm1.Show
Exit Sub
End If
Unload Me
End Sub
Gruß
Oraculix
kost fast nix
AW: Geniale Lösung Boris!! Vielen Dank
04.11.2021 00:33:49
{Boris}
Hi,
so, wie ich das aus dem Code lese, "unloadest" Du das Form, schaltest die Fehlerbehandlung aus, lädst das Form wieder und verlässt dann die Routine mit Exit Sub.
Zum letzten Unload kommt es somit nicht mehr.
Zu mehr reicht es heute aber nicht - morgen gerne mehr dazu :-)
VG, Boris

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige