vba excel读入png文件转为jpg文件,采用逐语句执行可以得到想要的结果,而直接运行却得到一个空白的jpg? 10
Subaa()SetoS=ActiveSheet.Shapes.AddPicture("d:\ttt\1.png",msoCTrue,msoCTrue,10,10,980...
Sub aa() Set oS = ActiveSheet.Shapes.AddPicture("d:\ttt\1.png", msoCTrue, msoCTrue, 10, 10, 980, 710) oS.Copy With ActiveSheet.ChartObjects.Add(0, 0, oS.Width, oS.Height).Chart .Paste .Export "d:\ttt\1.jpg", "JPG" .Parent.Delete End With oS.DeleteEnd Sub
展开
1个回答
展开全部
测试下来没问题
如果拷贝的是分辨率较大的图片,
请在调用 Shape.Copy 和 Chart.Paste 方法的前后加入下面的延时函数试试(可单独复制到一个空白模块中)。
#If VBA7 Then
Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long
#Else
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
#End If
'################################
' [功能描述] 延时等待指定的毫秒数.
' [参数列表] Milliseconds 毫秒数.
' [返回类型] 无.
'################################
Public Sub Delay(ByVal Milliseconds As Long)
Dim lngTime As Long
lngTime = timeGetTime
While timeGetTime < lngTime + Milliseconds
DoEvents
Wend
End Sub
比如在 Shape.Copy 的前后加上延时
...
oS.Copy
Delay 1000 ' 延时 1 秒
...
.Paste
Delay 1000 ' 延时 1 秒
追问
感谢您的回答,但我测试还是不行,我也试过在.copy和.paste后加Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 5)应该是等效的,也是不行
追答
运行的时候关闭其他软件再试试,
因为之前碰到过迅雷软件打开的时候调用 Copy 方法会卡很久。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询