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.
Hallo Atilla,
super! Es klappt!
zumindest fast so wie ichs mir vorstell
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?
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.
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