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

Ein Bild per UserForm in Zellenkommentar einfügen

Ein Bild per UserForm in Zellenkommentar einfügen
20.06.2005 23:39:53
Kabakönich
Hallo Excel-Gemeinschaft.
Ich habe eine Arbeitsmappe mit 16 Arbeitsblättern.
Blatt1 ist die Übersicht, Blatt2 - Blatt16 sind geschützt und werden
ausschließlich über ein UserForm in Blatt1 mit Daten befüllt.
Das UserForm hab ich schon fertig, funktioniert auch schon,
nur fehlt mir noch eine Kleinigkeit.
Kann ich über ein Feld im UserForm eine Grafik aus einer Datei aufrufen,
die dann in der ersten Zelle des neuen Datensatzes als Kommentar hinzugefügt wird?
Wär echt nett wenn ihr mir da helfen könntet...
Grüße
Kabakönich

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ein Bild per UserForm in Zellenkommentar einfügen
20.06.2005 23:45:54
Jochen
Hi,
das kannst du komplett mit dem Rekorder aufzeichnen.
mfg Jochen
AW: Ein Bild per UserForm in Zellenkommentar einfü
20.06.2005 23:49:02
Peter W
Servus,
Beate hat mal in einem anderen Forum einen Code zum Exprotieren eines Diagramms in ein Bild und anschließendem einfügen des Bildes in einen Kommentar gepostet (geschrieben?).
Gibt dir zumindest die richtigen Denkanstöße zum weiterarbeiten (hoff ich?).
http://www.online-excel.de/fom/fo_read.php?f=1&bzh=252&h=214
MfG
Peter
AW: Ein Bild per UserForm in Zellenkommentar einfü
21.06.2005 00:07:42
Kabakönich
Also aufzeichnen geht nicht, weil es sich ja jedesmal um ein anderes Bild handelt.
Das Beispiel von Beate ist schon nicht schlecht, nun weiß ich wenigstens das sowas
machbar ist.
Aber für den Anfang müßte ich ertmal wissen wie man auf dem UserForm in Blatt1
ein Feld erzeugt über das der Anwender ein Bild von seiner Festplatte auswählen kann.
Der Name des Bildes, bzw. sein Pfad sollte dann in diesem Feld stehen.
Vielleicht kann man sogar eine Vorschau in das UserForm bauen?
Für kreative Antworten bin ich nach wie vor sehr dankbar.
Kabakönich
Anzeige
AW: Ein Bild per UserForm in Zellenkommentar einfü
21.06.2005 01:00:37
Josef Ehrensberger
Hallo Kabakönich! (wenn du wirklich so heist, dann hast du mein Mitgefühl!
ansonsten sind hier realnames üblich!)
Mal als Ansatz!
Option Explicit

'Modul UserForm

'Benötigte Steuerelemente des UF!
' CommandButton mit dem Namen - cmdGetPicture
' CommandButton mit dem Namen - cmdSetCommentPicture
' Label mit dem Namen - lblPicturePath
' Image mit dem Namen - imgCommentPicture


Private Sub cmdGetPicture_Click()
    Dim sFile As String
    
    'Datei auswählen
    sFile = Application.GetOpenFilename _
        ("Bilddateien _(*.bmp;*.gif;*.jpg), *.bmp;*.gif;*.jpg")
    
    If sFile = "Falsch" Then Exit Sub
    
    'Vorschau
    imgCommentPicture.Picture = LoadPicture(sFile)
    
    'Pfad zum Bild
    lblPicturePath = sFile
    
End Sub

Private Sub cmdSetCommentPicture_Click()
    Dim cmnt As Comment
    
    ' Cells(1, 1) muss du natürlich an die Zeile
    ' des aktuellen Datensatzes anpassen!
    
    If Not imgCommentPicture.Picture Is Nothing Then
        Set cmnt = Cells(1, 1).Comment
        'Wenn kein Kommentar vorhanden dann einfügen
        If cmnt Is Nothing Then _
            Set cmnt = Cells(1, 1).AddComment
        'Bild in den Kommentar einfügen
        cmnt.Shape.Fill.UserPicture lblPicturePath
    End If
    
End Sub


Gruß Sepp

P.S.: Rückmeldung nicht vergessen!


Anzeige
AW: Ein Bild per UserForm in Zellenkommentar einfü
21.06.2005 16:41:12
Chris B.
Hallo Josef.
Absolut geniales Skript. ;o) Vielen Dank fürs mitdenken.
Ich habs noch ein bisschen umgeschrieben, aber es ist genau das
was ich gesucht habe. Funktioniert auch fast schon tadellos!! ;o)
4 Fragen hab ich nun noch dazu:
1. Bilder werden nun in ein eigenes VorschauForm geöffnet.
Nach dem Öffnen eines Bildes erscheint dessen Pfad nicht auf einem Label,
sondern im Tag von imgCommentPicture.
Erst wenn ich nun auf ok clicke wird der Bild-Pfad in Label2.Tag auf einem zweiten
UserForm (EingabeForm) übertragen und gleichzeitig das VorschauForm geschlossen.
Soweit bin ich schon. Funktioniert.
Problem: Wie bekomme ich jetzt den Namen des Bildes aus Label2.Tag in Label2?
Aber eben nicht den vollständigen Pfad, sondern nur den Namen des Bildes.
2. Kann ich beim Öffnen eines Bildes seine Größe prüfen lassen?
Wenn es größer als 110x110Pixel ist sollte eine MsgBox erscheinen die anzeigt das
das Öffnen verweigert wurde.
3. Wenn ich nun ok im EingabeForm clicke wird der Bild-Pfad aus Label2.Tag ausgelesen
und das entsprechende Bild als Kommentar in das passende Tabellenfeld übertragen.
Funktioniert erstklassig.
Problem: Wenn Label2.Tag keine Pfadangabe enthält bekomme ich bei click auf ok eine
kräftige Fehlermeldung. Wie kann ich das verhindern?
Wenn Label2.Tag leer ist, dann soll eben einfach kein Kommentarbild eingfügt werden.
4. Die Größe des Kommentar-Feldes in meinen Tabellen stimmt noch nicht.
Das Feld soll 2,5cm breit sein und das Seitenverhältnis des eingefügten Bildes
berücksichtigen.
Meinst Du könntest mir da noch ein bisschen helfen?
Sonnige Grüße
Chris B.
Anzeige
AW: Ein Bild per UserForm in Zellenkommentar einfü
21.06.2005 23:06:32
Josef Ehrensberger
Hallo Chris!
Viel Spass!
'**********************************************************
'Code-Modul UserForm1
Option Explicit

Const maxBreite As Integer = 110 'maximale Breite des Bildes
Const maxHoehe As Integer = 110 'maximale Höhe des Bildes


Private Sub CommandButton1_Click()
    'Bild auswählen
    Dim sFile As String
    
    
    'Datei auswählen
    sFile = Application.GetOpenFilename _
        ("Bilddateien _(*.bmp;*.gif;*.jpg), *.bmp;*.gif;*.jpg")
    
    If sFile = "Falsch" Then Exit Sub
    
    'Grössenkontrolle
    If MaxImgSize(sFile, maxBreite, maxHoehe) Then
        
        'Vorschau
        With UserForm2
            
            .imgCommentPicture.Picture = LoadPicture(sFile)
            .imgCommentPicture.Tag = sFile
            .Show
            
        End With
        
    Else
        'Meldung bei ungültigem Bild
        MsgBox "Das gewählte Bild ist zu groß!" & Space(20) & vbLf & _
            vbLf & "Bitte beachten Sie die maximale Größe" & vbLf & _
            "von " & maxBreite & " x " & maxHoehe & " Pixel!", _
            vbInformation, "Hinweis"
    End If
    
End Sub

Private Sub CommandButton2_Click()
    'Bild in Kommentar einfügen
    Dim cmnt As Comment
    Dim dblAspR As Double
    
    
    If Label2.Tag <> "" Then
        Set cmnt = Cells(1, 1).Comment
        'Wenn kein Kommentar vorhanden dann einfügen
        If cmnt Is Nothing Then _
            Set cmnt = Cells(1, 1).AddComment
        
        'Seitenverhältnis des Bildes ermitteln
        dblAspR = GetImgAspectRatio(Label2.Tag)
        
        With cmnt.Shape
            'Bild in den Kommentar einfügen
            .Fill.UserPicture Label2.Tag
            'Kommentargrösse anpassen
            .LockAspectRatio = msoFalse
            .Width = 70.5
            .Height = .Width / dblAspR
        End With
        
    Else
        'wenn kein Bildpfad vorhanden
        MsgBox "Kein Bild vorhanden!" & Space(25), vbInformation, "Hinweis"
        
    End If
    
End Sub

'Ende Code-Modul UserForm1
'**********************************************************


'**********************************************************
'Code-Modul UserForm2
Option Explicit

Private Sub CommandButton1_Click()
    'OK
    UserForm1.Label2.Tag = Me.imgCommentPicture.Tag
    UserForm1.Label2 = Right(Me.imgCommentPicture.Tag, _
        InStr(1, StrReverse(Me.imgCommentPicture.Tag), "\") - 1)
    Unload Me
End Sub

Private Sub CommandButton2_Click()
    'Abbrechen
    UserForm1.Label2.Tag = ""
    UserForm1.Label2 = ""
    Unload Me
End Sub

'Ende Code-Modul UserForm2
'**********************************************************


'**********************************************************
'Allgemeines Modul
Option Explicit
'Code aus "Online Excel Forum" - http://www.online-excel.de/
'Postet by Nepumuk, 20/06/05

'Abgewandelt von J.Ehrensberger

Private Declare Function CreateIC Lib "GDI32.dll" Alias "CreateICA" ( _
    ByVal lpDriverName As String, _
    ByVal lpDeviceName As String, _
    ByVal lpOutput As String, _
    ByRef lpInitData As Any) As Long
Private Declare Function DeleteDC Lib "GDI32.dll" ( _
    ByVal hDC As Long) As Long
Private Declare Function GetDeviceCaps Lib "GDI32.dll" ( _
    ByVal hDC As Long, _
    ByVal nIndex As Long) As Long
Private Declare Function MulDiv Lib "Kernel32.dll" ( _
    ByVal nNumber As Long, _
    ByVal nNumerator As Long, _
    ByVal nDenominator As Long) As Long

Private Const LOGPIXELSX = 88&
Private Const LOGPIXELSY = 90&

Private Const HimetricInch = 2540&

Public Function MaxImgSize(strPicturePath As String, _
        xPix As Integer, yPix As Integer) As Boolean

    'Bildgrösse (Pixel) Checken
    Dim MyPicture As StdPicture
    Dim dblPixelX As Long, dblPixelY As Long
    Set MyPicture = LoadPicture(strPicturePath)
    dblPixelX = HimetricToPixelsX(MyPicture.Width)
    dblPixelY = HimetricToPixelsY(MyPicture.Height)
    
    MaxImgSize = dblPixelX <= xPix And dblPixelY <= yPix
    
    Set MyPicture = Nothing
End Function

Public Function GetImgAspectRatio(strPicturePath As String) As Double
    'Seitenverhältnis ermitteln
    Dim MyPicture As StdPicture
    
    Set MyPicture = LoadPicture(strPicturePath)
    
    GetImgAspectRatio = CDbl(MyPicture.Width / MyPicture.Height)
    
    Set MyPicture = Nothing
End Function

Private Function HimetricToPixelsX(ByVal inHimetric As Long) As Long
    HimetricToPixelsX = ConvertPixelHimetric(inHimetric, True, True)
End Function

Private Function HimetricToPixelsY(ByVal inHimetric As Long) As Long
    HimetricToPixelsY = ConvertPixelHimetric(inHimetric, True, False)
End Function

Private Function ConvertPixelHimetric(ByVal inValue As Long, _
        ByVal ToPix As Boolean, inXAxis As Boolean) As Long

    Dim TempIC As Long, GDCFlag As Long
    TempIC = CreateIC("DISPLAY", vbNullString, vbNullString, ByVal 0&)
    If (TempIC) Then
        If (inXAxis) Then GDCFlag = LOGPIXELSX Else GDCFlag = LOGPIXELSY
        If (ToPix) Then ConvertPixelHimetric = MulDiv(inValue, _
            GetDeviceCaps(TempIC, GDCFlag), HimetricInch) _
        Else ConvertPixelHimetric = MulDiv(inValue, _
            HimetricInch, GetDeviceCaps(TempIC, GDCFlag))
        Call DeleteDC(TempIC)
    End If
End Function

'Ende Allgemeines Modul
'**********************************************************



Gruß Sepp

P.S.: Rückmeldung nicht vergessen!


Anzeige
AW: Ein Bild per UserForm in Zellenkommentar einfü
22.06.2005 21:08:32
Chris B.
Hallo Sepp.
Absolut Perfekt. Funktioniert tadellos und kann sogar noch mehr als ich
mir vorgestellt hab. (Über X im VorschauForm kann man vorher eingefügte Bilder
jetzt auch wieder entfernen!)
Vielen Dank für Deine Mitarbeit. Das ist echt ein schönes Forum das ihr hier habt.
Nun steht fest das wir unser Projekt verwirklicht bekommen. :o)
Kleine Erklärung:
Ich schreib einen Mix aus Datenbank und Statistischer Verwaltung für mein Münz-Forum.
Forums-Cross-Working sozusagen. :o)
Wir haben da viele Einträge von Leuten die nach einer Möglichkeit suchen ihre
Euro Sammlung am PC zu verwalten. Nur leider gibts noch nix was uns wirklich weiterhilft.
...also selbermachen!!! :o)))
Hier nun das fertige Teil-Ergebnis.

Eingabemaske für neue Datensätze:

Userbild


Und das Vorschaufenster für die Münzbildauswahl:

Die Datei https://www.herber.de/bbs/user/24104.jpg wurde aus Datenschutzgründen gelöscht


Nochmal Danke für die lehrreiche Konversation. Wenn Du weiterhin Lust hättest
an dem kleinen Programm mitzubasteln, würde ich mich natürlich sehr freuen.
Wie immer sonnige Grüße
Chris
Anzeige

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige