PDF als Objekt einfügen und Icon skalieren
#11
Hallo Flo,

ich hatte noch eine weitere Sache erwähnt. Das löschen der zwei Variablen tmpHeight und tmpWidth 


Lösch diese und teste noch einmal.

Ich kann das bei mir leider nicht testen, weil bei mir das Objekt AcroExch.Document.11 nicht erkannt wird.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • MPK-RT
Top
#12
Hallo Atilla,

super! Es klappt!
zumindest fast so wie ichs mir vorstell Wink


Code:
        Set Object = ActiveSheet.OLEObjects.Add(ClassType:="AcroExch.Document.11", Link:=False, _
        DisplayAsIcon:=True, IconFileName:= _
        "C:\Windows\Installer\{AC76BA86-7AD7-1031-7B44-AB0000000001}\PDFFile_8.ico", _
        IconIndex:=0, IconLabel:="Adobe Acrobat Document")
        
        With Object
       .Height = myTarget.Height
       .Width = myTarget.Width
       .Top = myTarget.Top
       .Left = myTarget.Left
       .Placement = xlMoveAndSize
   End With
   Set Object = Nothing

Jetzt orientiert er sich immer an der Breite der Zelle (der Icon ist aber ggf. höher als die gewählte Zelle).
Wenn ich das "Width" auskommentiere dann an der Höhe. (der Icon ist aber dann ggf. breiter als die Zelle)
D.h. die Proportionen des Icons werden beibehalten. Was auch nicht weiter schlimm wäre.

Wie könnte ich das ganze jetzt noch umschreiben, dass er jeweils das maximale nimmt?  also entweder max-breite oder max-höhe. Jenachdem, was zuerst "ansteht"?
D.h., dass der Icon nie größer als eine Zelle ist.


Grüße
Flo

PS.:Kann es sein, dass es das Objekt AcroExch.Document.11 erst ab Excel 2010 gibt?
Top
#13
Hallo Flo,

ich habe mit dem gleichen Code statt deines Objekt einen Button eingefügt.
Der Button ist innerhalb der Zelle eingefügt und hat die Maße dieser.

Das klappt aber nur, wenn ich das activate lösche.

Hier der Code, wie ich ihn eingesetzt habe, zum einfügen eines Buttons:


Code:
Sub Objekt_einfügen()
'Makro Objekt einfügen


'Gewünschte Zelle auswählen

'On Error GoTo MyErrHndl
 Dim myQ As Range, myC As Range
Dim myTarget As Range
Dim stRow As Integer, endRow As Integer
stRow = Selection.Row
endRow = 1
Set myQ = Selection
Set myTarget = Application.InputBox("An welcher Stelle Soll das Bild eingefügt werden ?", "Zielzelle wählen", Type:=8)
If Not myTarget Is Nothing Then
   For Each myC In myQ
       If myC.Row > endRow Then
           endRow = myC.Row
       End If
   Next
myTarget.Select
'Objekt einfügen
   Set Object = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, _
       DisplayAsIcon:=True, IconFileName:= _
      "C:\Windows\Installer\{AC76BA86-7AD7-FFFF-7B44-AA0000000001}\PDFFile_8.ico", _
       IconIndex:=0, IconLabel:="Adobe Acrobat Document")
   With Object
       .Height = myTarget.Height
       .Width = myTarget.Width
       .Top = myTarget.Top
       .Left = myTarget.Left
       .Placement = xlMoveAndSize
   End With
   Set Object = Nothing

    End If
MyErrHndl:

End Sub


Du musst nur "Forms.CommandButton.1" mit "AcroExch.Document.11" ersetzen und testen.

Wie Du siehst, habe ich am Anfang des Codes das On Error Resume Next auskommentiert.
Wenn ich Activate stehen lasse, erscheint dann eine Fehlermeldung und der Button wird nur in die Zelle eingefügt ohne Anpassung der Größe.
Nach löschen von Activate läuft der Code ohne Fehlermeldung durch und der Button wird an die Größe der Zelle angepasst.
Gruß Atilla
Top
#14
Hallo Atilla,

dein Makro funktioniert einwandfrei.
Wie du schon gesagt hast, wird der Button genau in die Zelle "eingepasst" bzw. der Icon behält die Proportionen nicht.

Wenn ich aber "Forms.CommandButton.1" mit "AcroExch.Document.11" ersetze, behält der Icon seine Proportionen und passt sich nur in Höhe oder Breite an. Siehe Zitat.
Zitat:Jetzt orientiert er sich immer an der Breite der Zelle (der Icon ist aber ggf. höher als die gewählte Zelle).
Wenn ich das "Width" auskommentiere dann an der Höhe. (der Icon ist aber dann ggf. breiter als die Zelle)
D.h. die Proportionen des Icons werden beibehalten. Was auch nicht weiter schlimm wäre.


Gibt es die Möglichkeit, dass ich in beiden Fällen sage, er soll maximal die Breite bzw. Höhe der Zelle verwenden?


Hab jetzt noch was angepasst, um den Icon in der jeweiligen Zelle zentiert auszurichten.

Code:
       .Top = myTarget.Top + (myTarget.Height - Object.Height) / 2
       .Left = myTarget.Left + (myTarget.Width - Object.Width) / 2


Grüße
Flo
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste