2014-01-29 29 views
2

正如標題所示,我想刪除給定單元格位置的單元格頂部的按鈕。VBA - 我想刪除位於單元格頂部的按鈕 - 掃雷遊戲

這是我迄今爲止沒有成功嘗試過的。

Dim r As Range 'range is already given from another function call 
Dim butns As button 
With Sheet1.Buttons 
    butns.Top = r.Top 
    butns.Left = r.Left 
    End With 
Sheet1.Buttons(butns).Delete 

我的嘗試將獲取單元格的「頂部」和「左側」值,並找到與該值關聯的按鈕,然後將其刪除。

任何幫助將不勝感激。謝謝!

+0

當然你的代碼只會移動按鈕? –

+0

事實上,它基本上對同一個地方是。我只想讓它選擇位於給定單元格位置頂部的按鈕並將其刪除。 – user3221162

+0

它是什麼樣的按鈕? ActiveX控件或窗體控件? –

回答

2

我認爲真正能夠找到哪個按鈕位於單元格頂部的唯一方法是查看按鈕的中心是否包含在單元格的維度中。

Dim r As Range 
Dim s As Shape 
Dim i As Long 
Dim cx As Double, cy As Double 

For i = 1 To Sheet1.Shapes.Count 
    Set s = Sheet1.Shapes(i) 
    cx = s.Left + s.Width/2 
    cy = s.Top + s.Height/2 
    If cx >= r.Left And cx <= r.Left + r.Width And _ 
     cy >= r.Top And cy <= r.Top + r.Height _ 
    Then 
     s.Delete 
     Exit For 
    End If 
Next 
+0

我會試試這個 – user3221162

+0

像魅力一樣工作 – user3221162

1

這是形式的控制按鈕 - user3221162 13分鐘前

這是你想什麼呢?

注意在形狀循環時,確定.Type.FormControlType以確保您只刪除表單按鈕控件,否則它將刪除符合條件的任何形狀,這一點很重要。

Option Explicit 

Sub Sample() 
    Dim ws As Worksheet 
    Dim shp As Shape 

    '~~> Change this to the relevant worksheet 
    Set ws = ThisWorkbook.Sheets("Sheet1") 

    '~~> Loop through shapes 
    For Each shp In ws.Shapes 
     '~~> Check if it is a form control 
     If shp.Type = 8 Then 
      '~~> Check if it is a button 
      If shp.FormControlType = xlButtonControl Then 
       '~~> Check the cell. Taking B2 as example 
       If shp.TopLeftCell.Address = "$B$2" Then shp.Delete 
      End If 
     End If 
    Next 
End Sub 
+0

如果單元格在一個變量下怎麼辦? – user3221162

+0

一個單元格如何在一個變量下面?或者你的意思是單元地址存儲在一個變量? –

+0

@Downvoter:關心解釋?我想你今天要連續降低投票率。猜猜我將不得不將它報告給一個mod :)讓他們處理它 –

0

我建議你把形狀的名字(Button_1_1,Button_2_1等)的一些信息,然後在需要的時候打出了COORDS。由此你可以跟蹤哪個按鈕被放置在創建的地方。

座標轉換通常比預期更棘手。你需要關心縮放,DPI和其他東西。

+0

問題是,有超過100個按鈕來命名基本掃雷遊戲。所以這將是非常緩慢的 – user3221162

+0

當然,你用宏創建按鈕?在宏中,根據位置命名按鈕應該相當容易。 – Sam