Page 1 of 1

save รูปพร้อมกับใส่ชื่อ

Posted: Tue Jan 28, 2020 3:18 pm
by mr.zatan
ต้องการ Save รูป พร้อมกับใส่ชื่อครับ
- ติดปัญหาคือชื่อไม่ตรงกับรูป

VBA

Code: Select all

Sub SaveImages()

    'the location to save all the images
    Const destFolder$ = "C:\Users\user\Desktop\New folder\"

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("image")

    Dim ppt As Object, ps As Variant, slide As Variant

    Set ppt = CreateObject("PowerPoint.application")
    Set ps = ppt.presentations.Add
    Set slide = ps.slides.Add(1, 1)

    Dim shp As Shape, shpName$
    For Each shp In ws.Shapes
        shpName = destFolder & shp.TopLeftCell.Offset(1, 1) & ".jpg"
        shp.Copy
        With slide
            .Shapes.Paste
            .Shapes(.Shapes.Count).Export shpName, 2
            .Shapes(.Shapes.Count).Delete
        End With
    Next shp

    With ps
        .Saved = True
        .Close
    End With
    ppt.Quit
    Set ppt = Nothing

End Sub

Re: save รูปพร้อมกับใส่ชื่อ

Posted: Tue Jan 28, 2020 8:41 pm
by snasui
:D ในเครื่องผมไม่สามารถ Debug ได้เพราะ Code จะจบแค่ .Shapes.Paste ไม่มีการ Run ต่อ

ลอง Debug ตรง .Shapes(.Shapes.Count) โดยสังเกตว่าเป็น Shape อะไร ตรงกับภาพที่นำมาวางหรือไม่ครับ

Re: save รูปพร้อมกับใส่ชื่อ

Posted: Fri Jan 31, 2020 10:42 am
by mr.zatan
:oops:
รัน VBA นานๆแล้ว solve system error &H80070057(-2147024809)

- Excel 2019
- รูปเยอะมากๆ จำเป็นต้อง รันนานๆ ครับ

** มีวิธีแก้ไหมครับ

Code: Select all

Sub Export_Pictures()


Dim picturename As String, mypath As String
Dim PicWidth As Double, PicHeight As Long
Dim init_PicWidth As Long, init_PicHeight As Double
Dim shp As Shape
Dim tempChart As Chart
Dim chartName As String
Dim sheetname As String
Dim sh As Worksheet

mypath = "C:\Users\safe\Desktop\New folder\"

sheetname = ActiveSheet.Name

Set tempChart = Charts.Add


tempChart.Location xlLocationAsObject, Name:=sheetname


chartName = Mid(ActiveChart.Name, Len(sheetname) + 2)

For Each shp In ActiveSheet.Shapes



picturename = Replace(shp.TopLeftCell.Offset(0, 1).Value, "/", "-")

picturename = Application.WorksheetFunction.Substitute(Application.WorksheetFunction.Substitute(picturename, _
Chr(10), " "), "  ", " ")

init_PicWidth = shp.Width
init_PicHeight = shp.Height



If shp.Name <> "Chart 1" And shp.HasChart = False Then
If Dir(flowerpath & picturename & ".jpg") = "" Then



shp.ScaleHeight 1#, True, msoScaleFromTopLeft


PicHeight = shp.Height
PicWidth = shp.Width

With ActiveSheet.Shapes(chartName)

.Width = shp.Width
.Height = shp.Height
End With


shp.Copy

ActiveChart.Paste


ActiveChart.Export Filename:=mypath & picturename & ".jpg", FilterName:="jpg"

shp.Width = init_PicWidth
shp.Height = init_PicHeight

ActiveChart.Shapes(1).Delete

End If

End If

Next


ActiveChart.ChartArea.Clear

End Sub


Image

Re: save รูปพร้อมกับใส่ชื่อ

Posted: Fri Jan 31, 2020 10:28 pm
by snasui
:D เปิดหน้าต่าง Immediate Window และเพิ่ม Debug.print shp.name ก่อนบรรทัด shp.copy เพื่อจะดูว่า Code มา Error ด้วย Shape ตัวไหน เผื่อพอจะได้ไล่หาสาเหตุจาก Shape ตัวนั้นได้ครับ

Re: save รูปพร้อมกับใส่ชื่อ

Posted: Sat Feb 01, 2020 9:29 am
by mr.zatan
ขึ้นมาแบบนี้ครับ

Code: Select all

Picture 1
Picture 2
Picture 3
Picture 8
Picture 9
Picture 11
Picture 1
Picture 2
Picture 3
Picture 5
Picture 6
Picture 8
Picture 9
Picture 11
Picture 1
Picture 2
Picture 3
Picture 5
Picture 6
Picture 8
Picture 9
Picture 11
Picture 12
Picture 13
Picture 13
Picture 14
Picture 16
Picture 17
Picture 18
Picture 22
Picture 24
Picture 25
Picture 27
Picture 28
Picture 29
Picture 30
Picture 31
Picture 32
Picture 33
Picture 34
Picture 35
Picture 36
Picture 37
Picture 38
Picture 39
Picture 40
Picture 41
Picture 42
Picture 44
Picture 45
Picture 46
Picture 47
Picture 48
Picture 49
Picture 50
Picture 51
Picture 52
Picture 53
Picture 54
Picture 5
Picture 6
Picture 8
Picture 9
Picture 11
Picture 12
Picture 13
Picture 14
Picture 16
Picture 17
Picture 18
Picture 19
Picture 20
Picture 21
Picture 22
Picture 23
Picture 2
Picture 3
Picture 5
Picture 6
Picture 8
Picture 9
Picture 11
Picture 12
Picture 13
Picture 14
Picture 16
Picture 17
Picture 18
Picture 19
Picture 20
Picture 21
Picture 22
Picture 24
Picture 25
Picture 26
Picture 8
Picture 9
Picture 1
Picture 2
Picture 5
Picture 12
Picture 17
Picture 25
Picture 27
Picture 29
Picture 30
Picture 39
Picture 35
Picture 1
Picture 5
Picture 6
Picture 8
Picture 12
Picture 1
Picture 2
Picture 3
Picture 1
Picture 1
Picture 3
Picture 6
Picture 8
Picture 12
Picture 19
Picture 22
Picture 29
Picture 1
Picture 2
Picture 3
Picture 5
Picture 6
Picture 8
Picture 9
Picture 11
Picture 12
Picture 13
Picture 14
Picture 16
Picture 17
Picture 18
Picture 19
Picture 20
Picture 21
Picture 22
Picture 23
Picture 24
Picture 25
Picture 26
Picture 27
Picture 28
Picture 29
Picture 30
Picture 31
Picture 32
Picture 33
Picture 34
Picture 2
Picture 3
Picture 5
Picture 1
Picture 2
Picture 3
Picture 5
Picture 6
Picture 8
Picture 9
Picture 11
Picture 12
Picture 13
Picture 14
Picture 16
Picture 17
Picture 18
Picture 19
Picture 20
Picture 21
Picture 22
Picture 23
Picture 24
Picture 26
Picture 27
Picture 28
Picture 29
Picture 30
Picture 31
Picture 32
Picture 33
Picture 34
Picture 35
Picture 1
Picture 3
Picture 2
Picture 1
Picture 2
Picture 3
Picture 5
Picture 6
Picture 2
Picture 1
Picture 1


Re: save รูปพร้อมกับใส่ชื่อ

Posted: Sat Feb 01, 2020 9:38 am
by snasui
:D บรรทัดสุดท้ายคือรายการใด แสดงว่ารายการนั้นก่อให้เกิดปัญหา ลองเพิ่ม Debug.Pirnt ของชื่อชีตมาแสดงควบคู่ไปด้วยจะได้ทราบว่าของชีตไหนครับ

Re: save รูปพร้อมกับใส่ชื่อ

Posted: Sat Feb 01, 2020 9:48 am
by mr.zatan
รึว่าเป็นเพราะมี Shape ตรงไหนสักแห่งที่ไม่ใช่ picture

ผมลองเพิ่ม Shape ลงไปที่ไม่ใช่ picture ก็จะเกิด solve system error &H80070057(-2147024809)

Re: save รูปพร้อมกับใส่ชื่อ

Posted: Sat Feb 01, 2020 9:54 am
by snasui
:D ก็อาจจะเป็นไปได้เช่นกัน หากจะแก้ปัญหานี้ก็ต้องดักว่าจะต้องเป็น Picture จึงจะคัดลอกไปวางครับ

Re: save รูปพร้อมกับใส่ชื่อ

Posted: Sat Feb 01, 2020 10:02 am
by mr.zatan
รบกวนแก้ Code ดักเอาแต่ Picture ให้ด้วยครับ

Re: save รูปพร้อมกับใส่ชื่อ

Posted: Sat Feb 01, 2020 10:15 am
by snasui
:D ลองเขียนมาเองดูก่อนครับ

ดูตัวอย่างโพสต์นี้มีการดักว่าชื่อขึ้นต้นด้วย "Pict" แล้วลบทิ้ง viewtopic.php?t=324