這幾天小編覺得一張一張圖輸出很累,然後圖又要增加其他標籤,決定做一個群組自動建群的VBA,然後順便輸出成照片,如下圖,有2張股票市場常見的圖,小編透過文字方塊增加一個8021的文字方塊在走勢圖中,來看看怎樣群組化,滑鼠點選然後選群組 XD
圖1.範例圖檔
首先你要知道你物件的名稱這部分,
可以簡單透過Shapes.Count+for方式來逐一檢查是哪一個
For i = 1 To activesheet.Shapes.Count
Set myShape = activesheet.Shapes(i)
With myShape
.selected
debug.print .Name
End With
Next
小編自己的物件名稱為"Chart 4", "Chart 5", "TextBox 13",要群組化很簡單就是下ActiveSheet.Shapes.Range(XXX).Group
指令即可,但多物件要怎做?之前有一篇自動存檔的教學,當中有提到ARRAY(工作表名稱),概念是一樣的。
先用陣列Array("Chart 4", "Chart 5", "TextBox 13")包物件起來,然後再用
SHARPES.RANGE().GROUP包起來即可,如下:
ActiveSheet.Shapes.Range(Array("Chart 4", "Chart 5", "TextBox 13")).Group
相反要解除,透過UNGroup即可。
那前面小編有提到想要自動輸出成照片.....這可不是透過EXPORT指令,因為Shapes物件沒這好用的方法 xd 微軟大大聽到麻煩未來把這物件增加這功能,感恩。
小編是CopyPicture方式來滿足此一需求,之前有一篇line自動傳圖的文章有提過。
vba:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Set Group_OUT = ActiveSheet.Shapes.Range(Array("Chart 4", "Chart 5", "TextBox 13")).Group 'objects.name in array | |
Set Shape_OUT = Group_OUT | |
Shape_OUT.CopyPicture xlScreen, xlPicture | |
Set chtObj = ActiveSheet.ChartObjects.Add(Shape_OUT.Left, Shape_OUT.Top, Shape_OUT.Width, Shape_OUT.Height) | |
chtObj.Chart.Paste | |
Application.CutCopyMode = True | |
chtObj.Chart.Export Filename:=ThisWorkbook.Path & "d:\01" & ".png", Filtername:="PNG" | |
chtObj.Delete |
沒有留言:
張貼留言