Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1140to1144
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
Verknüpfung auf Desktop-Bild selbst wählen
Sonja
Hallo,
gibt es eine Möglichkeit, wenn per Makro eine Verknüpfung auf das Desktop gelegt wird, dass man nicht den Standard-Ordner-Icon hat, sondern selbst ein Icon bestimmen kann?
Set WSH = CreateObject("WScript.Shell")
Desktop = WSH.SpecialFolders("Desktop")
Set Verknuepfung = WSH.CreateShortcut(Desktop & "\Testordner" & Testname & ".lnk")
With Verknuepfung
.Targetpath = "C:\Testordner\"
.Save
End With

Grüße
Sonja

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Verknüpfung auf Desktop-Bild selbst wählen
23.02.2010 18:07:09
Josef
Hallo Sonja,

das geht so.


Sub CreateFileShortcut()
  Dim objWSHShell As Object
  Dim objWSHShortcut As Object
  
  Set objWSHShell = CreateObject("WScript.Shell")
  Set objWSHShortcut = objWSHShell.CreateShortcut(Environ("USERPROFILE") & "\Desktop\neu.lnk")
  
  With objWSHShortcut
    'Dateipfad
    .TargetPath = "E:\Temp\abc.xls"
    'Icon
    .IconLocation = "E:\Bilder\Diverses\Icon\cct.ico"
    'Beschreibung
    .Description = "Dies ist eine neue Verknüpfung"
    .WorkingDirectory = "C:\Windows"
    .WindowStyle = vbNormalFocus
    .Save
  End With
  
  Set objWSHShortcut = Nothing
  Set objWSHShell = Nothing
End Sub

Gruß Sepp

Anzeige
AW: Verknüpfung auf Desktop-Bild selbst wählen
23.02.2010 18:07:26
ransi
HAllo Sonja
Das geht auch. Versuch mal so:
Dim WSH
Dim Desktop
Dim Verknuepfung
Dim Testname
Set WSH = CreateObject("WScript.Shell")
Desktop = WSH.SpecialFolders("Desktop")
Set Verknuepfung = WSH.CreateShortcut(Desktop & "\Testordner" & Testname & ".lnk")
With Verknuepfung
    .Targetpath = "C:\Testordner\"
    .IconLocation = Application.Path & "\Excel.exe, 1"
    .Save
End With

ransi
Anzeige
AW: Verknüpfung auf Desktop-Bild selbst wählen
23.02.2010 18:20:33
Sonja
Danke Sepp, danke ransi,
habe wohl das wichtigste bei meiner Frage vergessen:
Ich möchte meine Excel-Mappe weitergeben. Da ich ja keine Ahnung habe, wie der PC des Anwenders tickt, dachte ich mir, ich füge ein Bild in meine Exce-Mappe und kann das dann wieder hernehmen, wenn die Excel-Mappe per Makro auf den PC gespeichert wird.
Grüße
Sonja
AW: Verknüpfung auf Desktop-Bild selbst wählen
23.02.2010 18:52:25
Nepumuk
Hallo,
wenn dein Icon ein Bitmap ist, würde es gehen. Allerdings nur für eine Verknüpfung, das Originalicon der Mappe lässt sich nicht ändern bzw. nur für alle Excelmappen auf dem Rechner.
Gruß
Nepumuk
AW: Verknüpfung auf Desktop-Bild selbst wählen
23.02.2010 18:59:00
Sonja
Hallo Nepumuk,
das Icon der Verknüpfung zu ändern, das würde mir vollkommen reichen!
Grüße
Sonja
Anzeige
AW: Verknüpfung auf Desktop-Bild selbst wählen
23.02.2010 19:58:55
Nepumuk
Hallo,
füg mal in deine Mappe ein Userform (Userform1) ein mit einem Image-Control. In das Image-Control ein belibiges (aber nicht zu großes) Bild. Benutzen kannst du alle Formate, nur kein Icon (.ico). Denn das bekomme ich nicht aus dem Clipboard.
Folgender Code in ein Standardmodul:
Option Explicit

Private Declare Function CopyImage Lib "user32.dll" ( _
    ByVal handle As Long, _
    ByVal imageType As Long, _
    ByVal newWidth As Long, _
    ByVal newHeight As Long, _
    ByVal lFlags As Long) As Long
Private Declare Function OpenClipboard Lib "user32.dll" ( _
    ByVal hWnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Declare Function SetClipboardData Lib "user32.dll" ( _
    ByVal wFormat As Long, _
    ByVal hMem As Long) As Long
Private Declare Function DeleteObject Lib "gdi32.dll" ( _
    ByVal hObject As Long) As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" ( _
    ByRef PicDesc As uPicDesc, _
    ByRef RefIID As GUID, _
    ByVal fPictureOwnsHandle As Long, _
    ByRef IPic As IPicture) As Long
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" ( _
    ByVal DirPath As String) As Long

Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type

Private Type uPicDesc
    lngSize As Long
    lngType As Long
    lnghPic As Long
    lnghPal As Long
End Type

Private Const CF_BITMAP = 2
Private Const IMAGE_BITMAP = 0
Private Const LR_COPYRETURNORG = &H4
Private Const PICTYPE_BITMAP = 1
Private Const FOLDER_NAME = "C:\TEMP\"
Private Const FILE_NAME = "Image.ico"

Public Sub Create_Link()
    
    Dim objPicture As Object, objWSH As Object, objLink As Object
    Dim lngReturn As Long, lngTempPicture As Long
    Dim strDesktop As String
    
    Set objWSH = CreateObject("WScript.Shell")
    strDesktop = objWSH.SpecialFolders("Desktop")
    Set objLink = objWSH.CreateShortcut(strDesktop & "\" & _
        Left$(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) & ".lnk")
    With objLink
        .Targetpath = ThisWorkbook.FullName
        .WorkingDirectory = ThisWorkbook.Path
        .Hotkey = "CTRL+SHIFT+S"
        .WindowStyle = vbMaximizedFocus
        lngTempPicture = CopyImage(UserForm1.Image1.Picture, _
            IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)
        If lngTempPicture <> 0 Then
            Call OpenClipboard(Application.hWnd)
            Call EmptyClipboard
            Call SetClipboardData(CF_BITMAP, lngTempPicture)
            Call CloseClipboard
            Call DeleteObject(lngTempPicture)
            Set objPicture = Create_Picture(lngTempPicture, 0, CF_BITMAP)
            If Not objPicture Is Nothing Then
                lngReturn = MakeSureDirectoryPathExists(FOLDER_NAME)
                If lngReturn <> 0 Then
                    stdole.StdFunctions.SavePicture objPicture, FOLDER_NAME & FILE_NAME
                    .IconLocation = FOLDER_NAME & FILE_NAME
                Else
                    .IconLocation = Application.Path & "\Excel.exe, 1"
                End If
            Else
                .IconLocation = Application.Path & "\Excel.exe, 1"
            End If
        End If
        .Save
    End With
    
    Set objPicture = Nothing
    Set objWSH = Nothing
    Set objLink = Nothing
    
End Sub

Private Function Create_Picture( _
        ByVal lnghPic As Long, _
        ByVal lnghPal As Long, _
        ByVal lngPicType As Long) As IPicture

    
    Dim udtPicInfo As uPicDesc, udtIID_IDispatch As GUID
    Dim objIPicture As IPicture
    
    With udtIID_IDispatch
        .Data1 = &H7BF80980
        .Data2 = &HBF32
        .Data3 = &H101A
        .Data4(0) = &H8B
        .Data4(1) = &HBB
        .Data4(2) = &H0
        .Data4(3) = &HAA
        .Data4(4) = &H0
        .Data4(5) = &H30
        .Data4(6) = &HC
        .Data4(7) = &HAB
    End With
    With udtPicInfo
        .lngSize = Len(udtPicInfo)
        .lngType = PICTYPE_BITMAP
        .lnghPic = lnghPic
        .lnghPal = lnghPal
    End With
    Call OleCreatePictureIndirect(udtPicInfo, udtIID_IDispatch, True, objIPicture)
    Set Create_Picture = objIPicture
    
End Function

Falls es das Programm nicht schafft ein Icon zu erzeugen, bekommt der Link das Standard-Excelicon.
Ich lad dir mal vorsichtshalber eine Musterdatei hoch: https://www.herber.de/bbs/user/68207.xls
Gruß
Nepumuk
Anzeige
AW: Verknüpfung auf Desktop-Bild selbst wählen
23.02.2010 20:35:47
Sonja
Hallo Nepumuk,
vielen Dank für Deine Mühe. Ich werde das Makro morgen testen und Dir dann berichten, wie es gelaufen ist!
Nochmals danke und einen schönen Abend.
Grüße
Sonja
AW: OT
24.02.2010 20:14:35
Volker
OT
AW: OT
24.02.2010 20:35:02
Volker
Hallo Nepumuk,
ich würde auch gern eine Verknüpfung auf den Desktop mit einem Bestimmten ICO. Leider habe ich es noch nicht hinbekommen.
Gruss Volker
AW: OT
25.02.2010 14:04:02
Nepumuk
Hallo,
na anhand der Beispielmappe kann das doch nicht soooooo schwer sein. Woran scheitert es denn?
Gruß
Nepumuk
AW: OT
25.02.2010 20:26:52
Volker
Hallo Nepumuk,
also ich start den Link und ,dann?
Ich dachte ich setzte einen Button der dann den Code startet.
Wenn ich den Code starte dann bekomme ich den Fehler Objekt unterstützt diese Eigenschaft oder Methode nicht. Der Fehler verwaist auf diese Zeile.
Call OpenClipboard(Application.hWnd)
Gruss Volker
Anzeige
AW: OT
25.02.2010 22:32:05
Nepumuk
Hallo,
der Code ist für Excel 2003 gedacht. Das ist die Version welche in der ursprünglichen Frage angegeben war. Sollte auch in Excel 2002, 2007 und 2010 funktionieren. Wenn du eine andere Version hast, dann musst du das schon angeben.
Gruß
Nepumuk
AW: OT
26.02.2010 06:31:42
Volker
Hallo Nepumuk;
kannst du mir für Excel 2000 eine Lösung machen?
Wäre toll, den könnte ich meine Datei dann verändern
Danke aber schon mal und schönen Tag noch
Gruss Volker
AW: OT
26.02.2010 09:03:12
Reinhard
Hallo Volker,
ersetze die bemängelte Codezeie durch:
lngMyHwnd = FindWindow("XLMAIN", Application.Caption)
Call OpenClipboard(lngMyHwnd)
Bei den DIMs noch hinzufügen:
Dim lngMyHwnd as long
Und oben bei den APIs noch einfügen:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String ) As Long
Getestet mit XL2000.
Gruß
Reinhard
Anzeige
AW: OT
28.02.2010 12:08:27
Volker
Hallo Reinhard,
wie immer ein Könner von dem Excel-
Klasse der Code läuft ja bei Excel 2000.
Danke mal wieder, an dich und den anderen Helfen hier im Forum
Gruss Volker
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige