Avatar billede hjald8 Nybegynder
24. januar 2014 - 17:12 Der er 5 kommentarer og
1 løsning

Indsætte billeder som bliver gemt med Excel fil - VBA

Jeg har denne kode - som sammen med øvrig kode finder og indsætter 100 billeder fra et bibliotek i min Excelfil

Men, men. Billeder indsat således er fortsat linket til det oprindelige billede. Så filen kan ikke sendes ud af huset med billederne i - samt øvrige problemer med linket filer.
Jeg har behov for at billederne kan blive gemt og un-linked med oprindelige billedfiler. Kender nogen en metode til dette.

Her et udsnit af min nuværende kode:

Range(Z.Offset(-1, -8), Z.Offset(4, -5))
Set myPict = ActiveSheet.Pictures.Insert(strPath & strFileName)
With myPict
    myPict.Top = ActiveCell.Top
    myPict.Width = ActiveCell.Width
    myPict.Height = ActiveCell.Height
    myPict.Left = ActiveCell.Left
    myPict.Placement = xlMoveAndSize
End With
With myPict
    .ShapeRange.Height = 70# '53.8582677165
    .ShapeRange.IncrementLeft 10
    .ShapeRange.IncrementTop 6
End With


Som jeg har forstået skal man bruge metoden: ActiveSheet.Shapes.AddPicture - for at få det un-linked - men jeg kan ikke få det til at virke med indsættelse i definerede ranges.

På forhånd tusind tak.
Avatar billede hjald8 Nybegynder
25. januar 2014 - 12:51 #1
Jeg tror, at jeg fandt en løsning.

Der skal så vidt jeg kan se, arbejdes i Shape og ikke Picture

Således skulle Dim være Shape istedet for Picture

Derefter fandt jeg denne kode på en anden amerikansk hjemmeside:

Application.Goto reference:=Range(Z.Offset(-1, -8), Z.Offset(4, -5))
myPictP = strPath & strFileName
Set PicRange = Range(Z.Offset(-1, -8), Z.Offset(4, -5))
Set Shp = ActiveSheet.Shapes.AddPicture(Filename:=myPictP, LinkToFile:=False, SaveWithDocument:=True, Left:=PicRange.Left, Top:=PicRange.Top, Width:=PicRange.Width, Height:=PicRange.Height)
Shp.Placement = xlMoveAndSize
Shp.ControlFormat.PrintObject = True

Billederne bliver sat fint ind og tilpasset de flette celler i den specificeret range.
Filen med billeder bliver også noget større ;-)
Avatar billede hjald8 Nybegynder
04. februar 2014 - 08:48 #2
Denne har jeg vist selv svaret p.....
Avatar billede Jens_Clausen Nybegynder
30. januar 2016 - 22:24 #3
Hej Hjald8 - jeg tror jeg har samme problem som du havde.

Desværre er jeg ikke stærk i at indsætte en del af en kode - så på trods af flere forsøg er det ikke lykkedes mig at få din kode til at fungere.

Har du mulighed for at formidle den fulde kode - naturligvis anonymiseret i nødvendigt omfang.

Pft.

Med venlig hilsen

Jens
Avatar billede hjald8 Nybegynder
31. januar 2016 - 09:38 #4
Jeg er sørme ikke helt stærk - men jeg kan da prøve at hjælpe. Hvilken kode skal du have lagt en kode ind i?
Avatar billede Jens_Clausen Nybegynder
31. januar 2016 - 12:18 #5
Hej - tak for hurtig respons - det er denne kode jeg gerne vil have ændret således den bruger "shape" i stedet så billederne ligges i filen.

Hensigten er at den skal slå en sti op i kolonne O og indsætte billedet i kolonne A. Det er mest klippe / klistre så det kan sagtens være at koden "ser forfærdelig ud" :-)

Jeg tester også på om billedet er bredere end højden og optimerer størrelsen så den passer til cellen - kan det lade sig gøre med "shapes" også ?

Pft.


Sub InsertPic()
    Dim pic As String 'file path of pic
    Dim myPicture As Picture 'embedded pic
    Dim rng As Range 'range over which we will iterate
    Dim cl As Range 'iterator
    Dim sti As String
       
    sti = Range("sti").Value
       
    Set rng = Range("A21:A500")
    For Each cl In rng

        If Not IsEmpty(cl.Offset(0, 1)) Then
           
            pic = (sti & cl.Offset(0, 15))
           
                     
            If pic <> sti Then
               
                If Dir(pic) <> "" Then
               
                Set myPicture = ActiveSheet.Pictures.Insert(pic)
               
                If myPicture.Width > myPicture.Height Then
                       
                        With myPicture
                        .ShapeRange.LockAspectRatio = msoTrue
                        .Width = cl.Width
                        .Top = Rows(cl.row).Top
                        .Left = Columns(cl.Column).Left
                        End With
                       
                        Else
               
                        With myPicture
                        .ShapeRange.LockAspectRatio = msoTrue
                        .Height = cl.Height
                        .Top = Rows(cl.row).Top
                        .Left = Columns(cl.Column).Left
                        End With
                       
                        End If
                    End If
                End If
        End If

    Next

End Sub
Avatar billede Jens_Clausen Nybegynder
10. februar 2016 - 23:34 #6
Hej - har du haft lejlighed til at kigge på udfordringen :-)

Pft.

Vh

Jens
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester