Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
904to908
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
904to908
904to908
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Bild auswählen

Bild auswählen
12.09.2007 11:51:52
Sven
Guten Tag,
ich stehe vor folgendem Problem, und hoffe, jemand kann mir helfen.
Eine grundsätzliche Frage stellt sich mir zu aller erst:
Ist es möglich, dass man eine Zelle (beliebig) anklickt (MouseDown) und sich das typische Windows-Kontextmenü zur Auswahl einer Datei öffnet? Sinn soll sein, in einem Formular Bilder in einer Zelle einzufügen, ohne den konventionellen Weg zu benutzen. Des Weiteren muss es hierbei möglich sein, dass sich dieses eingefügte Bild zur Zelle zentriert bzw. sich der Größe dieser Zelle anpasst.
Gibt es ein Workaround dazu?
Vielen Dank.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bild auswählen
12.09.2007 13:01:00
Renee
Hi Sven,
Hier mal ein Beispiel für einen Doppelklick in die Zelle E15 (ggf. in der 3. Zeile anpassen).
Code einfügen: Rechtsklick auf Tabellenreiter - Code anzeigen und in das leere Fenster einfügen.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim sFileToOpen As Variant
Dim ix As Integer
If Target.Address  "$E$15" Then Exit Sub
On Error GoTo exitImport
sFileToOpen = Application.GetOpenFilename("Bilddatei (*.*), *.*", , "Bild importieren")
If sFileToOpen  False Then
ActiveSheet.Pictures.Insert(sFileToOpen).Select
If Selection.Height > ActiveCell.Height Or _
Selection.Width > ActiveCell.Width Then
Selection.Width = ActiveCell.Width
Selection.Height = ActiveCell.Height
Else
Selection.Top = ActiveCell.Top + ((ActiveCell.Height - Selection.Height) / 2)
Selection.Left = ActiveCell.Left + ((ActiveCell.Width - Selection.Width) / 2)
End If
End If
exitImport:
Application.CutCopyMode = False
ActiveCell.Activate
Cancel = True
End Sub


GreetZ Renee

Anzeige
AW: Bild auswählen
12.09.2007 13:22:00
Sven
Das klappt super, vielen Dank.
Ein kleines Manko hat die Sache allerding:
Die Zelle, um die es sich dreht, habe ich mittels Zellen formatieren / Ausrichtung / Zellen verbinden formatiert. Somit funktioniert das Script nicht mehr. Hab es mit "B63-L63" in der entsprechenden Zeile probiert; geht aber nicht. Auch der Zelle einen eindeutigen Namen zu verpassen und die Zeile "$name" anzupassen, führt nicht zum gewünschten Erfolg. Wo ist die Einfachheit von PHP nur hin.. :D

AW: Bild auswählen
12.09.2007 13:30:21
Renee
Hallo Sven,
Dazu ein Link: Achtung Seuchengefahr!
und 2 Bemerkungen:
1. In Deinem Post ist durchwegs von einer Zelle die Rede! Auszug: zur Zelle zentriert bzw. sich der Größe dieser Zelle anpasst.
2. Ich habe absolut keine Lust, hier eine Anpassung auf verbundene Zellen zu machen!
GreetZ Renee

Anzeige
AW: Bild auswählen
12.09.2007 13:39:00
Sven
In meinem Thread geht es um ein Workaround, nicht um komplette Lösungsmodelle. Subjektive Einstellungen zu gewissen Features möchte ich gern außen vor lassen, da sie der Sache nicht dienlich sind und vielleicht an anderer Stelle diskutiert werden können. (Link)
Also: Es verlangt niemand, dass du irgendwas anpassen musst. Und da ich - so bin ich der Meinung - klar offeriert habe, dass ich in Sachen Excel / VB ein Neuling bin, muss ich wohl nicht deutlicher als nötig erwähnen, dass es mir leid tut, dass ich verbundene Zellen als Einheit sehe.

AW: Bild auswählen
12.09.2007 13:44:00
Renee
Hi Sven,
In meinem Thread geht es um ein Workaround,
Ein Workaround ? Um was herum willst Du den arbeiten ? Ich hab schliesslich ausser einer Anfrage absolut nix von Deiner Arbeit gesehen!
GreetZ Renee

Anzeige
AW: Bild auswählen
12.09.2007 14:42:00
fcs
Hallo Sven,
solch eine Funktion via Mausklick bzw. Mausdown sollte man nur für einen bestimmten Zellbereich auslösen und nicht für beliebige Zellen im Blatt. In meinem Beispielcode ist es Spalte 3.
Die Prozedur für das Selection_Change-Ereignis im VBA-Editor unter der Tabelle einfügen.
Die Prozedur GrafikEinfuegen fuegst du besser in ein allgemeines Modul der Datei ein, speziell, wenn du die Funktion in mehreren Blättern der Datei nutzen möchtest.
Gruß
Franz

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 3 And Target.Cells.Count = 1 Then
Call BildEinfuegen(Target)
End If
End Sub
Sub BildEinfuegen(Zelle As Range)
' Fügt gewählte Grafik-Datei als Bild in Zelle ein und passt Bild-Größe an Zellgröße an
Dim strDatei, Element As Shape, Faktor As Double
Dim PfadAktiv$, PfadBilder$, DateiFilter$
On Error GoTo Fehler
PfadAktiv = VBA.CurDir
PfadBilder = "C:\Dokumente und Einstellungen\S014123\Eigene Dateien\Eigene Bilder"
VBA.ChDir (PfadBilder)
'Grafikdatei auswählen
DateiFilter = "*.emf; *.wmf; *.jpg; *.jpeg; *.jfif; *.jpe; *.png;" _
& " *.bmp; *.gif; *.tif; *.tiff; *.cdr; *.eps; *.pct; *.pict; *.wpg"
DateiFilter = "Grafikdateien(" & DateiFilter & "), " & DateiFilter
strDatei = Application.GetOpenFilename(Filefilter:=DateiFilter)
If strDatei = False Then Exit Sub
'Grafikdatei einfügen
ActiveSheet.Pictures.Insert(strDatei).Select
Set Element = ActiveSheet.Shapes(Selection.Name)
'Bild größe an Zelle anpassen und Zentrieren
Faktor = Application.WorksheetFunction.Min(Zelle.Height / Element.Height, _
Zelle.Width / Element.Width)
Element.ScaleWidth Faktor, msoFalse, msoScaleFromTopLeft
Element.ScaleHeight Faktor, msoFalse, msoScaleFromTopLeft
Element.Top = Zelle.Top + (Zelle.Height - Element.Height) / 2
Element.Left = Zelle.Left + (Zelle.Width - Element.Width) / 2
VBA.ChDir (PfadAktiv)
Exit Sub
Fehler:
MsgBox "Fehler Nr.: " & Err.Number & " ist aufgetreten" & vbLf & vbLf & _
Err.Description & vbLf & vbLf & _
"Bitte nur Grafik-Datei zum Einfügen auswählen"
End Sub


Anzeige
Auch Deine Code hat ne Macke...
12.09.2007 14:51:51
Renee
Hi Franz,
Auch mein Code war auf eine Zelle beschränkt.
Auch Dein Code hat die mokierte Macke, dass er nicht mit verbundenen Zellen umgehen kann ;-D
GreetZ Renee

AW: Auch Deine Code hat ne Macke...
12.09.2007 15:41:59
fcs
Hallo Renee,
überraschender Weise funktioniert folgende kleine Anpassung dann auch mit verbundenen Zellen:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 3 Then
Call BildEinfuegen(Target)
End If
End Sub


Eigentlich bin ich von verbundenen Zellen (grrr grrr) mehr Ärger gewohnt.
Kleiner Neben-Effekt: Werden mehrere Zellen markiert beginnend in der Prüfspalte, dann wird das Bild in den selektierten Bereich eingepasst.
Man lernt halt immer wieder dazu!
Gruß
Franz

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige