VBA-我想删除单元格顶部的按钮-扫雷游戏

VBA-我想删除单元格顶部的按钮-扫雷游戏,vba,excel,Vba,Excel,正如标题所说,我想删除给定单元格位置的单元格顶部的按钮 以下是我迄今为止所做的努力,但没有成功 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 我的尝试

正如标题所说,我想删除给定单元格位置的单元格顶部的按钮

以下是我迄今为止所做的努力,但没有成功

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
我的尝试是获取单元格的“top”和“left”值,并找到与该值关联的按钮,然后将其删除


任何帮助都将不胜感激。谢谢

我认为唯一能真正找到哪个按钮位于单元格顶部的方法是查看按钮的中心是否包含在单元格的尺寸内

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
Dim r As范围
像形状一样变暗
我想我会坚持多久
暗cx为双精度,cy为双精度
对于i=1到Sheet1.Shapes.Count
设置s=Sheet1.形状(i)
cx=左s+宽度s/2
cy=s.顶部+s.高度/2
如果cx>=r.左,cx=r.顶和cy

这是表单控制按钮–用户322162 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

我建议您在形状的名称(Button_1_1、Button_2_1等)中添加一些信息,然后在需要时拆分坐标。 有了它,您可以跟踪在创建时将什么按钮放在哪里


坐标转换通常比预期的更复杂。您需要注意缩放、dpi和其他内容。

您的代码肯定只会移动按钮吗?确实如此。。基本上都在同一地点。我只想让它选择位于给定单元格位置顶部的按钮并删除它。它是什么类型的按钮?ActiveX控件还是窗体控件?它是窗体控件按钮,是一款扫雷游戏。基本上,当您单击一个按钮并且按钮下的单元格为空时,它将通过递归查找周围的空白单元格。在这一部分中,我想删除当前选定单元格顶部的按钮。如果单元格位于变量之下,该怎么办?单元格如何位于变量之下?还是说单元格地址存储在变量中?@Downvoter:需要解释吗?我想你今天就要连续投票了。我想我必须向mod报告:)让他们处理是的,在另一个函数中,我将单元格地址设置为一个变量。地址是如何存储在单元格中的?有了
$
标志或没有
$
标志?问题是,一款基本的扫雷游戏有100多个按钮可供命名。那么,用宏创建按钮会非常慢吗?在宏中,根据位置命名按钮应该相当容易。