Board logo

標題: [發問] 清除sheet內的圖片,要如何預防連command button 也一併被刪除 [打印本頁]

作者: morris_lth    時間: 2015-12-18 11:51     標題: 清除sheet內的圖片,要如何預防連command button 也一併被刪除

我寫了一小段程式,清除SHEET內所有的圖片,但是他會連同控制的command button 也一被刪除
這種現象要如何處理?

Private Sub CommandButton_Clear_Click()
chose = MsgBox("是否清除儲存格內所有資料", vbYesNo + vbQuestion, "提示")
     Select Case chose
       Case vbYes
         Range(Cells(1, 1), Cells(65536, 256)).ClearContents '清除A1~IV65536儲存格資料
         ActiveSheet.Shapes.SelectAll                        '選擇所有圖片(Barcode)
         Selection.Delete                                    '刪除圖片
         Cells(1, 1).Select
       Case vbNo
     End Select
End Sub
作者: 准提部林    時間: 2015-12-18 12:54

ActiveSheet.Pictures.Delete
作者: morris_lth    時間: 2015-12-18 14:47

沒用阿,CommandButton 一樣會被刪掉.....
作者: rouber590324    時間: 2015-12-18 15:13

不會阿  我TEST就OK 只會刪圖片

chose = MsgBox("是否清除儲存格內所有資料", vbYesNo + vbQuestion, "提示")
     Select Case chose
       Case vbYes
         Range(Cells(1, 1), Cells(65536, 256)).ClearContents '清除A1~IV65536儲存格資料
         ActiveSheet.Pictures.Delete
         Cells(1, 1).Select
       Case vbNo
     End Select
作者: morris_lth    時間: 2015-12-18 15:58

回復 4# rouber590324

我還是會阿~
參閱附件[attach]22869[/attach]
作者: 准提部林    時間: 2015-12-18 16:14

For Each SHP In ActiveSheet.DrawingObjects
  If TypeName(SHP) = "Picture" Then SHP.Delete
Next
作者: morris_lth    時間: 2015-12-18 16:33

回復 6# 准提部林

真是謝謝幫忙,能否稍微解釋一下,雖然只有短短2行,看的我一頭霧水
現在正在GOOGLE..ing
作者: ikboy    時間: 2015-12-18 17:11

Please read https://msdn.microsoft.com/EN-US/library/office/ff860759.aspx
Sub zz()
Dim x()
For Each s In ActiveSheet.Shapes
    If s.Type = 13 Then s.Delete
Next
End Sub
作者: 准提部林    時間: 2015-12-18 17:40

回復 7# morris_lth

DrawingObjects 為工作表中的〔全部〕〔物件〕,
使用〔編輯.到.特殊.物件〕.即可錄製程式碼!
TypeName(?) 可以取出括號內〔物件〕或〔內容〕的名稱或類型,
MsgBox TypeName(Range("A1")) 判定為 Range 物件,
MsgBox TypeName(Range("A1").Value) 則依A1輸入的〔內容〕判定其類型


試試在工作表中放不同類型的物件:
For Each SHP In ActiveSheet.DrawingObjects
  MsgBox TypeName(SHP)
Next
作者: PKKO    時間: 2015-12-19 23:55

回復 9# 准提部林


    感謝版大,我從以前就一直不宣告程式碼,但實際上不是因為快速,而是因為不知道型態
有了TypeName,就可以知道所有的型態了,非常感謝版大

因為每次看高手寫程式碼,都會強制宣告,避免錯誤,但自己無法辦到,現在就可以知道所有的型態了,感謝版大

For Each SHP In ActiveSheet.DrawingObjects
        If TypeName(SHP) = "Picture" Then SHP.Delete
    Next

這段程式碼也很好用哦!感恩!
作者: c_c_lai    時間: 2015-12-23 09:11

回復 5# morris_lth
[attach]22931[/attach]
作者: morris_lth    時間: 2015-12-23 15:14

回復 12# c_c_lai

謝謝大家的幫忙~




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)