Excel Tablosunu Jpeg olarak kaydetmek

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,788
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Pek anlamadım ama koddaki her satır arasına bunu koy
Kod:
Application.Wait (Now + TimeValue("00:00:01"))
dene
 
Katılım
17 Haziran 2017
Mesajlar
25
Excel Vers. ve Dili
Excel 2016
Altın Üyelik Bitiş Tarihi
06/07/2019
With caart
.Paste

Komutundan sonra grafiği yapıştırmak süre alıyor. Oraya bekleme de ekledim şu komutla:

Application.Wait Now + TimeValue("00:00:02")

fakat olmadı yine. Tek yol F8 gibi görünüyor.
Ya da excel 2016 dan vazgeçmek :)

Şimdilik PDF olarak kaydedebiliyorum istediğim hücreleri. o da işimi görüyor ama bunu da başarmak istiyorum bir yandan.
 
Katılım
17 Haziran 2017
Mesajlar
25
Excel Vers. ve Dili
Excel 2016
Altın Üyelik Bitiş Tarihi
06/07/2019
Pek anlamadım ama koddaki her satır arasına bunu koy
Kod:
Application.Wait (Now + TimeValue("00:00:01"))
dene
With caart.
.paste

işlemini yaptıktan sonra biraz beklemek istiyor. F8 ile giderken de gördüm, yazdığım adımdan sonra biraz işlem yapıyor ve resim sonra geliyor. Anında gelmiyor. Yani anladığım daha resmi ilgili bölgeye yapıştıramadan, işlemini tamamlayamadan

.Export "d:\test.jpg" yaptırıyoruz. Ondan dosyanın içi boş geliyor.

İlginç.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,788
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Bir de bunu dene .pasta dan sonra

Kod:
Dim basla
Dim bekle

basla = Timer
bekle = 3
While Timer < basla + bekle
DoEvents '3 saniye bekle
Wend
 
Katılım
17 Haziran 2017
Mesajlar
25
Excel Vers. ve Dili
Excel 2016
Altın Üyelik Bitiş Tarihi
06/07/2019
Bir de bunu dene .pasta dan sonra

Kod:
Dim basla
Dim bekle

basla = Timer
bekle = 3
While Timer < basla + bekle
DoEvents '3 saniye bekle
Wend
Yine olmadı.
ve anladığım şu: biz sistem beklesin diye de .paste işleminden sonra sonuçta yine bir komut gönderiyoruz. Ondan işe yaramıyor bekleme komutları.

Yani ancak şöyle olacak, iki ayrı makro olacak, biri yine .paste komutunda bitecek, sonra diğer makroyu çalıştırıp komutu bitireceğim.

gerçi onda da şüphelerim var. End Sub da bir komut sonuçta. İşlem biter diye düşünüyorum.

Bakalım.

Olmadı F8 ile adım adım giderim.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,788
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Api ile yapılan bir kod bu kodun hepsini bir modüle ekleyin

Kod:
Option Explicit
Option Compare Text

#If Win64 Then
Private Declare PtrSafe Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Integer) As Long
Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
Private Declare PtrSafe Function GetClipboardData Lib "user32" (ByVal wFormat As Integer) As Long
Private Declare PtrSafe Function CloseClipboard Lib "user32" () As Long
Private Declare PtrSafe Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As uPicDesc, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
Private Declare PtrSafe Function CopyEnhMetaFile Lib "gdi32" Alias "CopyEnhMetaFileA" (ByVal hemfSrc As Long, ByVal lpszFile As String) As Long
Private Declare PtrSafe Function CopyImage Lib "user32" (ByVal handle As Long, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
#Else
Private Declare Function IsClipboardFormatAvailable Lib "user32" (ByVal wFormat As Integer) As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Integer) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" (PicDesc As uPicDesc, RefIID As GUID, ByVal fPictureOwnsHandle As Long, IPic As IPicture) As Long
Private Declare Function CopyEnhMetaFile Lib "gdi32" Alias "CopyEnhMetaFileA" (ByVal hemfSrc As Long, ByVal lpszFile As String) As Long
Private Declare Function CopyImage Lib "user32" (ByVal handle As Long, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long

#End If

#If VBA7 Then
#Else
#End If


Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type

Private Type uPicDesc
Size As Long
Type As Long
hPic As Long
hPal As Long
End Type


Const CF_BITMAP = 2
Const CF_ENHMETAFILE = 14
Const IMAGE_BITMAP = 0
Const LR_COPYRETURNORG = &H4

Function PastePicture(Optional lXlPicType As Long = xlPicture) As IPicture

Dim h As Long, hPicAvail As Long, hPtr As Long, hPal As Long, lPicType As Long, hCopy As Long
lPicType = IIf(lXlPicType = xlBitmap, CF_BITMAP, CF_ENHMETAFILE)
hPicAvail = IsClipboardFormatAvailable(lPicType)
If hPicAvail <> 0 Then
h = OpenClipboard(0&)
If h > 0 Then
hPtr = GetClipboardData(lPicType)
If lPicType = CF_BITMAP Then
hCopy = CopyImage(hPtr, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)
Else
hCopy = CopyEnhMetaFile(hPtr, vbNullString)
End If
h = CloseClipboard
If hPtr <> 0 Then Set PastePicture = CreatePicture(hCopy, 0, lPicType)
End If
End If

End Function

Private Function CreatePicture(ByVal hPic As Long, ByVal hPal As Long, ByVal lPicType) As IPicture
Dim r As Long, uPicInfo As uPicDesc, IID_IDispatch As GUID, IPic As IPicture

With IID_IDispatch
.Data1 = &H7BF80980
.Data2 = &HBF32
.Data3 = &H101A
.Data4(0) = &H8B
.Data4(1) = &HBB
.Data4(2) = &H0
.Data4(3) = &HAA
.Data4(4) = &H0
.Data4(5) = &H30
.Data4(6) = &HC
.Data4(7) = &HAB
End With
With uPicInfo
.Size = Len(uPicInfo)
.Type = IIf(lPicType = CF_BITMAP, 1, 4)
.hPic = hPic
.hPal = IIf(lPicType = CF_BITMAP, hPal, 0)
End With

r = OleCreatePictureIndirect(uPicInfo, IID_IDispatch, True, IPic)
If r <> 0 Then Debug.Print "Create Picture: " & fnOLEError(r)
Set CreatePicture = IPic

End Function

Private Function fnOLEError(lErrNum As Long) As String

Select Case lErrNum
Case &H80004004
fnOLEError = " Aborted"
Case &H80070005
fnOLEError = " Access Denied"
Case &H80004005
fnOLEError = " General Failure"
Case &H80070006
fnOLEError = " Bad/Missing Handle"
Case &H80070057
fnOLEError = " Invalid Argument"
Case &H80004002
fnOLEError = " No Interface"
Case &H80004001
fnOLEError = " Not Implemented"
Case &H8007000E
fnOLEError = " Out of Memory"
Case &H80004003
fnOLEError = " Invalid Pointer"
Case &H8000FFFF
fnOLEError = " Unknown Error"
Case &H0
fnOLEError = " Success!"
End Select

End Function

bunu da farklı bir modüle ekleyin ve bu kodu çalıştırın.

Kod:
Sub resimkayıtyap()
Dim Dosya_Adı As String
Dim Say As Long, lPicType As Long, oPic

Klasor = ThisWorkbook.Path
sat = CreateObject("Scripting.FileSystemObject").GetFolder(Klasor).Files.Count
dosyaadi = Klasor & "\" & "Resim" & sat & ".jpg"

If Val(Application.Version) > 11 Then
lPicType = IIf(obMetafile, xlPicture, xlPicture) 'ofis 2007 için
Else
lPicType = IIf(obMetafile, xlPicture, xlBitmap) 'ofis 2003 için
End If

Selection.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
Set oPic = PastePicture(lPicType)
SavePicture oPic, dosyaadi

MsgBox " resim ekleme işi yapıldı"
End Sub
 
Katılım
17 Haziran 2017
Mesajlar
25
Excel Vers. ve Dili
Excel 2016
Altın Üyelik Bitiş Tarihi
06/07/2019
Halit Bey
Şu hatayı verdi:

Runtime error '380': Invalid property value

satırda şu:

SavePicture oPic, dosyaadi

Şu yolu izledim: sadece bu excel dosyası açıkken
VBA ekranı açıkken soldaki modules kısmından
insert/Module deyip yeni bir modül ekledim
ilk verdiğiniz kodu yapıştırdım
aynı şekilde bir modül daha ekledim ve son eklediğimi bir butona atadım.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,788
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
bu iki ayrı kodu sırası ile dene hangisi olacak

Kod:
Sub resimkayıtyap1()
Dim Dosya_Adı As String
Dim Say As Long, lPicType As Long, oPic

Klasor = ThisWorkbook.Path
sat = CreateObject("Scripting.FileSystemObject").GetFolder(Klasor).Files.Count
dosyaadi = Klasor & "\" & "Resim" & sat & ".jpg"

lPicType = IIf(obMetafile, xlPicture, xlBitmap)
Selection.CopyPicture Appearance:=xlScreen, Format:=xlBitmap
Set oPic = PastePicture(lPicType)
SavePicture oPic, dosyaadi

MsgBox " resim ekleme işi yapıldı"
End Sub


Sub resimkayıtyap2()
Dim Dosya_Adı As String
Dim Say As Long, lPicType As Long, oPic

Klasor = ThisWorkbook.Path
sat = CreateObject("Scripting.FileSystemObject").GetFolder(Klasor).Files.Count
dosyaadi = Klasor & "\" & "Resim" & sat & ".jpg"

lPicType = IIf(obMetafile, xlPicture, xlPicture)
Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
Set oPic = PastePicture(lPicType)
SavePicture oPic, dosyaadi

MsgBox " resim ekleme işi yapıldı"
End Sub
 
Katılım
17 Haziran 2017
Mesajlar
25
Excel Vers. ve Dili
Excel 2016
Altın Üyelik Bitiş Tarihi
06/07/2019
File not found: olepro32.dll
 
Katılım
17 Haziran 2017
Mesajlar
25
Excel Vers. ve Dili
Excel 2016
Altın Üyelik Bitiş Tarihi
06/07/2019
Sn. halit3

olepro32.dll
eksik dedi son işlem

bu tür dll dosyaları için güvenilir kaynaklar var mıdır indirebileceğimiz?
 

istanbulcahan

Altın Üye
Katılım
11 Ocak 2008
Mesajlar
1,386
Excel Vers. ve Dili
Office 365 (Türkçe)
Altın Üyelik Bitiş Tarihi
05-11-2024
Merhabalar.
Bende ekteki dosyadaki gibi resmi kaydetmek istiyorum.
 

Ekli dosyalar

Katılım
10 Ekim 2013
Mesajlar
424
Excel Vers. ve Dili
Excel 2013 (64bit) - Türkçe
Altın Üyelik Bitiş Tarihi
26/05/2022
Epey işime yarayacak kodlar var. Emeği geçen herkese teşekkür ediyorum.
 
Katılım
20 Aralık 2013
Mesajlar
195
Excel Vers. ve Dili
Microsoft Office Standart 2013 - Microsoft Windows 10 Enterprise
soru?

Merhabalar

Windows 10 Education 64-bit işletim sistemine sahibim ve Microsoft Excel 2013 (15.0.5023.1000) 32-bit kullanmaktayım.

Forumdaki kodları denedim fakat hiç biri çalışmadı farklı hatalar verdi.

Sistemime uygun kodlar elinizde mevcut mudur?

Yardımlarınızı rica ederim. İyi günler
 
Katılım
4 Ağustos 2011
Mesajlar
6
Excel Vers. ve Dili
2007 türkçe
Ofis 2010 da Onenot var ben yazdırıp onenota gönderiyorum oradan png olarak kayıt edilebiliyor.
 
Üst