2021年8月31日 星期二

VBA:群組Group與取消群組Ungroup


這幾天小編覺得一張一張圖輸出很累,然後圖又要增加其他標籤,決定做一個群組自動建群的VBA,然後順便輸出成照片,如下圖,有2張股票市場常見的圖,小編透過文字方塊增加一個8021的文字方塊在走勢圖中,來看看怎樣群組化,滑鼠點選然後選群組 XD

圖1.範例圖檔
更正:VBA 基本語法 先來一下 MSDN:群組、 MSDN:取消群組
首先你要知道你物件的名稱這部分,

可以簡單透過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:

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
view raw gistfile1.txt hosted with ❤ by GitHub


        來檢查一下,輸出成功.. (/^▽^)/...未來都用這招發圖好了省事。


沒有留言:

張貼留言

指數變化(2025.03.28)

 指數變化(2025.03.28) 上周焦點: 美國消費者信心指數 3/25 92.9 美國耐久財訂單月增率 3/26 1.4 PCE 月增 0.4 年增 2.8 (不多阿,最高還有5.5ㄝ)   本周愛看: 美國非農業就業人數變化 美國ISM製造業採購經理人指數 美國芝加哥FE...