2016-03-10 58 views
1

我使用宏来生成发票的图像。我们一直在使用Excel 2013,而且宏观工作完美无瑕。但是,由于我们切换到Excel 2016,宏无法生成有效的图像。它会创建一个空白图像。它甚至不抛出一个错误,这是难以解决的,以及工作excel 2013宏不工作在excel 2016

Sub saveimage() 
Set Sheet = ActiveSheet 
output = "F:\Invoices\" & Range("e8") & ".png" 
zoom_coef = 100/Sheet.Parent.Windows(1).Zoom 
Dim sht As Worksheet 
Dim LastRow As Long 
Dim LastColumn As Long 
Dim StartCell As Range 

Set sht = Worksheets("Invoice") 
Set StartCell = Range("A1") 

'Refresh UsedRange 
    Worksheets("Invoice").UsedRange 

'Find Last Row 
    LastRow = sht.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

'Select Range 
    sht.Range("A1:N" & LastRow).Select 
Set area = Selection 
area.CopyPicture xlPrinter 
Set chartobj = Sheet.ChartObjects.Add(0, 0, area.Width * zoom_coef, area.Height * zoom_coef) 
chartobj.Chart.Paste 
chartobj.Chart.Export output, "png" 
chartobj.Delete 
End Sub 

这可能是问题的原因是什么?

回答

1

似乎有某种bug可以通过粘贴之前选择过去的区域来解决。所以,你应该添加以下行

chartobj.Chart.Parent.Select 

之前

chartobj.Chart.Paste 

那么你会得到所要求的输出文件。只是要确保只有我会在这里发布最后几行您Sub来说明其中线必须插入:

Set area = Selection 
area.CopyPicture xlPrinter 
Set chartobj = Sheet.ChartObjects.Add(0, 0, area.Width * zoom_coef, area.Height * zoom_coef) 
chartobj.Chart.Paste 
chartobj.Chart.Export output, "png" 
chartobj.Delete 
End Sub 
+0

PNG编辑以JPG在2个地方,但仍然得到一个空白的白色图像。 – Ahmed

+0

删除'chartobj.Delete'确实会给出空白图表。得到一个运行时错误“Range类的CopyPicture方法失败”,当我用'area.CopyPicture xlPrinter,xlBitmap'和'area.CopyPicture xlScreen,xlBitmap'替换'area.CopyPicture xlPrinter'时,也会给出空白图像并用gif替换给出一个空白图像 – Ahmed

+0

@艾梅德:我想我终于明白了。对不起,延迟很长。让我知道它现在是否有效。顺便说一句,现在你也可以保持'GIF'格式的'PNG'格式。如果结果如预期那么我建议我们删除所有评论并清理这篇文章以供他人查找和分享。但是你肯定发现了这个Excel 2016中的一个“小故障”。 – Ralph

0

变化png格式以JPG格式如下行

output = "F:\Invoices\" & Range("e8") & ".png" 

chartobj.Chart.Export output, "png" 

Keashan