• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Opslaan als afbeelding

Status
Niet open voor verdere reacties.

Schelledraad

Gebruiker
Lid geworden
11 feb 2014
Berichten
115
Ik heb in Excel een aantal plaatjes staan die ik wil opslaan in een nieuwe map. Dit kan je handmatig doen door het plaatje te selecteren en dan met je rechter muisknop kiezen voor "opslaan als afbeelding" in de gewenste map en dan is het weer .jpg.
Maar je voelt het al. Dat wil ik doen met een VBA code. :)
 
Een dat is hier al tig keer beantwoord.
 
Code:
Sub M_snb()
  c00 = Application.DefaultFilePath & "foto.gif"

  With Sheet1.Shapes(1)
    .CopyPicture
    With Sheet1.ChartObjects.Add(1, 1, .Width, .Height).Chart
      .Paste
      .Export c00, "GIF"
      .Parent.Delete
    End With
  End With
End Sub
 
OK, dat helpt al heel erg voor mijn begrip.

Zelf heb ik onderstaande code gevonden, die doet precies wat ik wil. Ik kan eerst een map selecteren waarin ik de bestandjes wil hebben.
Alleen.... Het vreemde doet zich voor dat als ik de code uitvoer er wel bestanden worden aangemaakt, maar zonder plaatje. Echter als ik de code handmatig doorloop neemt ie de plaatjes wel op?!?!

Sub ExportImages_ExtendOffice()
'Updated by Extendoffice 20220308
Dim xStrPath As String
Dim xStrImgName As String
Dim xImg As Shape
Dim xObjChar As ChartObject
Dim xFD As FileDialog
Set xFD = Application.FileDialog(msoFileDialogFolderPicker)
xFD.Title = "Please select a folder to save the pictures" & " - ExtendOffice"
If xFD.Show = -1 Then
xStrPath = xFD.SelectedItems.Item(1) & ""
Else
Exit Sub
End If

On Error Resume Next
For Each xImg In ActiveSheet.Shapes
If xImg.TopLeftCell.Column = 2 Then
xStrImgName = xImg.TopLeftCell.Offset(0, -1).Value
If xStrImgName <> "" Then
xImg.Select

Selection.Copy
Set xObjChar = ActiveSheet.ChartObjects.Add(0, 0, xImg.Width, xImg.Height)
With xObjChar
.Border.LineStyle = xlLineStyleNone
.Activate
ActiveChart.Paste
.Chart.Export xStrPath & xStrImgName & ".jpg"
.Delete
End With
End If
End If
Next
End Sub
 
Ja, die doet het prima, alleen kan ik de export vervolgens nergens vinden ?!? . Ik ben dus nu aan het prutsen met de code daaronder om de code van snb daarmee te combineren, zodat er eerst een scherm verschijnt waar je kan aangeven waar je de export naar toe wil verplaatsen en daarna wil ik de code van snb runnen, maar dat lukt me vooralsnog niet :confused:
 
Het vreemde is dus dat als ik de code stapje voor stapje uitvoer het wel goed gaat, maar als ik hem in 1 keer laat runnen neemt ie de plaatjes niet mee. de naam wel ?!
 
Kijk eens:

Code:
Sub M_snb()
  msgbox Application.DefaultFilePath & "foto.gif"
End Sub


Gebruik code tags als je VBA-code plaatst.
 
Ja zo heb ik hem idd gevonden. Maar nu wil ik dus met dat stukje uit die andere code eerst de locatie kunnen opgeven om vervolgens jouw code erop los te laten.
 
Je hebt nog steeds geen code tags gebruikt in je post met VBA-code. Pas dat eerst eens aan svp.
 
Vergeet alle andere code, maar gebruik slechts:

Code:
Sub M_snb()
  With Application.FileDialog(4)
     If .Show Then
        c00 = .SelectedItems(1)

        With Sheet1.Shapes(1)
          .CopyPicture

          With Sheet1.ChartObjects.Add(1, 1, .Width, .Height).Chart
            .Paste
            .Export c00 & "\foto.gif", "GIF"
            .Parent.Delete
          End With

        End With
      End If
    End With
End Sub
 
En ook voor de code van snb geldt dat ie alleen werkt als ik hem regel voor regel uitvoer. Laat ik de code in 1 keer runnen dan neemt ie het plaatje niet mee.
 
Ik word er bijna wanhopig van. Het enige wat ik in jouw laatste kolom heb aangepast is Sheet1 naar Blad1. Dat kan het toch niet zijn ? jouw code werkt prima, alleen neemt ie het plaatje niet mee.
 
Ik ben alweer een stukje verder. Als ik de code in 1 keer afspeel dan neemt ie .paste niet over !
 
Plaats een voorbeeld van je document.
 
PHP:
Sub Plakken()
With Blad1.Shapes("hand")
    .CopyPicture
          With Blad1.ChartObjects.Add(1, 1, .Width, .Height).Chart
            .Paste
          End With
End With
End Sub

Dit stukje van de code pakt ie dus niet. Zou With te diep genest kunnen zijn ?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan