Board logo

標題: [發問] 如何刪除控制項 [打印本頁]

作者: caichen3    時間: 2012-3-26 13:15     標題: 如何刪除控制項

請問若我是以OLEObjects.Add方法增加多個不同群組的選項按鈕,如果我要刪除其中某一個群組,該用什麼方法呢??
作者: hugh0620    時間: 2012-3-26 14:09

回復 1# caichen3


    Shapes.Item(1).Delete
    item(1) 群組一

   妳這個問題應該跟妳之前問的問題延伸出來的
作者: caichen3    時間: 2012-3-26 15:22

選項按鈕是以vba程式的方式加入,右邊的按鈕是以[開發人員]/[插入]/[active X 按制項]的方式加入,
若我有5組選項按鈕,要刪除GroupName=4,程式碼如下:

Private Sub CommandButton5_Click()
   ActiveSheet.Shapes.Item(4).Delete
End Sub

當我執行時,結果便會將右邊的按鈕刪除,是為什麼呢?
作者: GBKEE    時間: 2012-3-26 15:56

回復 3# caichen3
  1. Private Sub CommandButton5_Click()
  2.     Dim E As Object
  3.     For Each E In ActiveSheet.OLEObjects
  4.         If E.Name Like "OptionButton*" Then
  5.             If E.Object.GroupName = 4 Then E.Delete
  6.         End If
  7.     Next
  8. End Sub
複製代碼

作者: Hsieh    時間: 2012-3-26 16:03

本帖最後由 Hsieh 於 2012-3-26 16:04 編輯

回復 3# caichen3


    以你的圖片上所顯示的按鈕標題字串規則可利用題號來區別
  1. Sub Del_Opt()
  2. Dim k%
  3. k = InputBox("欲刪除的群組", , 4)
  4. For Each ob In ActiveSheet.OLEObjects
  5. If ob.progID = "Forms.OptionButton.1" Then
  6.    If Val(ob.Object.Caption) = k Then ob.Delete '題號與k值相同就刪除
  7. End If
  8. Next
  9. End Sub
複製代碼

作者: caichen3    時間: 2012-3-26 16:30

感謝各位大大的回覆喔
作者: caichen3    時間: 2012-3-27 16:24

本帖最後由 caichen3 於 2012-3-27 17:38 編輯

請問各位大大
我有5項需求陳述(圖1),當我按下右邊"刪除"按鈕,刪除第4項需求陳述,圖畫呈現如圖2,若希望將圖2下面選項按鈕依序往上排列該如何呢??
以下是我的程式碼:
rivate Sub CommandButton5_Click()
gyou = Selection.Row
ActiveSheet.Rows(gyou).ClearContents
Range("I1").Value = Range("I1").Value - 1
TMMPA = Range("I1").Value
aaa = Chr(65)
ccc = Chr(67)
Dim yyy As String
Dim XXX As String
Dim k As Integer
Dim ob As Object

For I = 2 To 100
XXX = I
Range(aaa + XXX).Value = ("")
Range(ccc + XXX).Value = ("")
Next
ActiveSheet.Range("A2:H200").Borders.LineStyle = XILinestyleNone
ActiveSheet.Range("A2:H200").Interior.ColorIndex = xlColorIndexNone

For R = 1 To TMMPA
yyy = R + 1
Range(aaa + yyy).Value = R
Range(ccc + yyy).Value = R
Next
ActiveSheet.Range("A2:H" + yyy).Borders.LineStyle = xlContinuous
ActiveSheet.Range("A2:H" + yyy).Borders(xlEdgeBottom).Weight = xlThick
ActiveSheet.Range("A2:H" + yyy).Borders(xlEdgeRight).Weight = xlThick
ActiveSheet.Range("A2:H" + yyy).Borders(xlEdgeLeft).Weight = xlThick
ActiveSheet.Range("A2:A" + yyy).Interior.ColorIndex = 15

k = gyou - 1
For Each ob In ActiveSheet.OLEObjects
  If ob.Name Like "OptionButton*" Then
    If ob.Object.GroupName = k Then ob.Delete
  End If
Next

End Sub
作者: Hsieh    時間: 2012-3-27 17:41

回復 7# caichen3

ob.Object.GroupName = k
但是你在建立選項按鈕時給他的GroupName是只有數字嗎?
作者: caichen3    時間: 2012-3-27 17:54

嗯~我後來將每個選項按鈕的GroupName都改為數字
作者: Hsieh    時間: 2012-3-27 18:12

回復 9# caichen3
把檔案附上才能了解問題所在
作者: caichen3    時間: 2012-3-27 18:27

這是我的檔案,請大大幫我看一下,感謝:)
作者: Hsieh    時間: 2012-3-27 18:57

回復 11# caichen3
你要刪除的是選取儲存格那一列的群組嗎?
For Each ob In ActiveSheet.OLEObjects
  If ob.Name Like "OptionButton*" Then
    If ob.TopLeftCell.Row = gyou Then ob.Delete
  End If
Next
Cells(gyou, 1).Resize(, 8).Delete xlShiftUp
作者: caichen3    時間: 2012-3-28 11:57

本帖最後由 caichen3 於 2012-3-28 12:31 編輯

嗯,我要刪除的是當時選取儲存格的那列(gyou)
為什麼我選取編號4按下刪除會同時將編號4、5一起刪除呢?
只要是選取倒數第二列刪除,就會將最後二列的編號、需求陳述刪除,但還是會剩最後一列的選項按鈕
作者: GBKEE    時間: 2012-3-28 15:37

本帖最後由 GBKEE 於 2012-3-28 15:53 編輯

回復 13# caichen3
為什麼我選取編號4按下刪除會同時將編號4、5一起刪除呢?幫你查看控制項的群組如下 GroupName=5 有10個OptionButton控制項
請你先用 Ex 的程式調整在同一列上的OptionButton  用列號設定為同一群組
用 Ex 的程式調整後再執行你的Private Sub CommandButton5_Click()
  1. OptionButton2  GroupName=1
  2. OptionButton1  GroupName=1
  3. OptionButton4  GroupName=1
  4. OptionButton3  GroupName=1
  5. OptionButton5  GroupName=1
  6. OptionButton11  GroupName=2
  7. OptionButton6  GroupName=2
  8. OptionButton7  GroupName=2
  9. OptionButton8  GroupName=2
  10. OptionButton9  GroupName=2
  11. OptionButton10  GroupName=3
  12. OptionButton13  GroupName=3
  13. OptionButton12  GroupName=3
  14. OptionButton17  GroupName=3
  15. OptionButton14  GroupName=3
  16. OptionButton15  GroupName=4
  17. OptionButton16  GroupName=4
  18. OptionButton18  GroupName=4
  19. OptionButton20  GroupName=4
  20. OptionButton19  GroupName=4
  21. OptionButton21  GroupName=5
  22. OptionButton22  GroupName=5
  23. OptionButton23  GroupName=5
  24. OptionButton26  GroupName=5
  25. OptionButton24  GroupName=5
  26. OptionButton25  GroupName=5
  27. OptionButton27  GroupName=5
  28. OptionButton28  GroupName=5
  29. OptionButton29  GroupName=5
  30. OptionButton30  GroupName=5
  31. OptionButton31  GroupName=6
  32. OptionButton32  GroupName=6
  33. OptionButton33  GroupName=6
  34. OptionButton34  GroupName=6
  35. OptionButton35  GroupName=6
  36. Sub Ex()  '在同一列上的OptionButton 以列號設定為同一群組
  37. Dim ob As OLEObject
  38. For Each ob In ActiveSheet.OLEObjects
  39.   If ob.Name Like "OptionButton*" Then   '
  40.     ob.Object.GroupName = ob.TopLeftCell.Row
  41.   End If
  42. Next
  43. End Sub
複製代碼
執行的Private Sub CommandButton5_Click() 須修改如下
  1. Private Sub CommandButton5_Click()
  2. Dim yyy As String
  3. Dim XXX As String
  4. Dim k As Integer
  5. Dim ob As Object
  6. gyou=Selection.Row
  7. ActiveSheet.Rows(gyou).ClearContents
  8. Range("I1").Value = Range("I1").Value - 1
  9. TMMPA = Range("I1").Value
  10. aaa = Chr(65)
  11. ccc = Chr(67)
  12. For I = 2 To 100
  13. XXX = I
  14. Range(aaa + XXX).Value = ("")
  15. Range(ccc + XXX).Value = ("")
  16. Next
  17. ActiveSheet.Range("A2:H200").Borders.LineStyle = XILinestyleNone
  18. ActiveSheet.Range("A2:H200").Interior.ColorIndex = xlColorIndexNone

  19. For R = 1 To TMMPA
  20. yyy = R + 1
  21. Range(aaa + yyy).Value = R
  22. Range(ccc + yyy).Value = R
  23. Next
  24. ActiveSheet.Range("A2:H" + yyy).Borders.LineStyle = xlContinuous
  25. ActiveSheet.Range("A2:H" + yyy).Borders(xlEdgeBottom).Weight = xlThick
  26. ActiveSheet.Range("A2:H" + yyy).Borders(xlEdgeRight).Weight = xlThick
  27. ActiveSheet.Range("A2:H" + yyy).Borders(xlEdgeLeft).Weight = xlThick
  28. ActiveSheet.Range("A2:A" + yyy).Interior.ColorIndex = 15
  29. For Each ob In ActiveSheet.OLEObjects
  30.   If ob.Name Like "OptionButton*" Then
  31.     If ob.Object.GroupName = Selection.Row Then ob.Delete
  32.   End If
  33. Next
  34. Selection.EntireRow.Delete   '刪除整列
  35. Ex        '***  再度的 將 在同一列上的OptionButton  用 [列號]設定為同一群組
  36. End Sub
複製代碼

作者: caichen3    時間: 2012-3-28 19:20

本帖最後由 caichen3 於 2012-3-28 22:04 編輯

請問大大:
用 Ex 的程式調整後再執行你的Private Sub CommandButton5_Click()   EX( )這段程式會該放在哪裡呢?是Private Sub CommandButton5_Click()裡面一開始的地方嗎?

接下來在Private Sub CommandButton5_Click()程式最後面的地方在執行一次EX( ) 這段程式嗎??

我嘗試放在CommandButton5_Click()程式碼前與後面,還是無法可以幫我看一下嗎,感謝:)
Private Sub CommandButton5_Click()
Dim yyy As String
Dim xxx As String
Dim k As Integer
Dim ob As OLEObject
gyou = Selection.Row
ActiveSheet.Rows(gyou).ClearContents
Range("I1").Value = Range("I1").Value - 1
TMMPA = Range("I1").Value
aaa = Chr(65)
ccc = Chr(67)

For I = 2 To 100
xxx = I
Range(aaa + xxx).Value = ("")
Range(ccc + xxx).Value = ("")
Next
ActiveSheet.Range("A2:H200").Borders.LineStyle = XILinestyleNone
ActiveSheet.Range("A2:H200").Interior.ColorIndex = xlColorIndexNone

For R = 1 To TMMPA
yyy = R + 1
Range(aaa + yyy).Value = R
Range(ccc + yyy).Value = R
Next
ActiveSheet.Range("A2:H" + yyy).Borders.LineStyle = xlContinuous
ActiveSheet.Range("A2:H" + yyy).Borders(xlEdgeBottom).Weight = xlThick
ActiveSheet.Range("A2:H" + yyy).Borders(xlEdgeRight).Weight = xlThick
ActiveSheet.Range("A2:H" + yyy).Borders(xlEdgeLeft).Weight = xlThick
ActiveSheet.Range("A2:A" + yyy).Interior.ColorIndex = 15

k = gyou - 1
For Each ob In ActiveSheet.OLEObjects
If ob.Name Like "OptionButton*" Then
    If ob.Object.GroupName = k Then ob.Delete
  End If
Next
Cells(gyou, 1).Resize(, 8).Delete xlShiftUp

For Each ob In ActiveSheet.OLEObjects
    If ob.Name Like "OptionButton*" Then
    ob.Object.GroupName = ob.TopLeftCell.Row
    End If
Next

End Sub
作者: Hsieh    時間: 2012-3-28 23:12

回復 13# caichen3

[attach]10190[/attach]
作者: caichen3    時間: 2012-3-29 11:57

本帖最後由 caichen3 於 2012-3-29 12:12 編輯

感謝大大的回覆:victory:
gyou = Selection.Row    ' gyou表示所在列
If ob.TopLeftCell.Row = gyou Then ob.Delete   ' 這行程式是說明若ob左上儲存格的行值等於gyou即刪除嗎??
topLeftCell.Row 是左上單元格的行值,該如何辦識topleftcell.row的所在位置呢??
作者: Hsieh    時間: 2012-3-29 12:13

回復 17# caichen3

是的,以選項按紐位置做判斷
所以你說會有重複刪除的狀況,我就不知道你是怎麼做的
作者: caichen3    時間: 2012-3-29 13:12

若我Selection.Row在第3列,請問topleftcell.row在哪個位置呢??
作者: Hsieh    時間: 2012-3-29 16:04

回復 19# caichen3
看動畫
按鈕放在第4列就是4
第5列就是5
[attach]10199[/attach]
作者: caichen3    時間: 2012-3-29 20:24

感謝各位大大的教學,幫助我許多也瞭解一些語法




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