【问题标题】:Create ActiveX checkbox in specific cell在特定单元格中创建 ActiveX 复选框
【发布时间】:2017-11-11 00:42:13
【问题描述】:

在我的工作表 1 中,A 列有一些值,我需要为工作表 2 中特定单元格中的所有值创建一个 Active X 复选框。首先,我需要检查 Active X 复选框是否存在该值,如果不存在,我需要创建。我已经尝试了下面的代码,但是它创建了重复的复选框。

Sub Addcheckbox()
Dim rng As Range, cell As Range
Dim rr As Integer
Dim tf As Boolean
Dim shpTemp As Shape

Set rng = Range("A1:A8")
Set Destrng = Range("A2:A9")
rr = 2
For Each cell In Worksheets("Sheet1").Range("A1:A8")
    If Not IsEmpty(cell.Value) Then
     With ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", _
        Left:=51.75, Top:=183, Width:=120, Height:=19.5)
        .Object.Caption = cell.Value
    End With
    End If
rr = rr + 1
Next cell
End Sub

如何使用标题名称检查工作表中是否已存在 ActiveX 复选框

我试过这段代码来检查复选框。但它不起作用..

Function shapeExists(ByRef shapename As String) As Boolean

    shapeExists = False
    Dim sh As Shape
    For Each sh In ActiveSheet.Shapes
        If sh.name = shapename Then
            shapeExists = True
            Exit Function
        End If
    Next sh


End Function

【问题讨论】:

  • 你在哪里检查文本框是否存在或现在?
  • 在表 2 中。我需要检查 Active X 复选框是否存在我通过的标题名称。例如,对于值“A”,我需要检查带有标题的复选框名称'A'是否存在..如果它不存在,我需要创建一个新的@SiddharthRout
  • 我知道,但是你在哪里检查它是否存在。我可以给你代码,但我希望你先尝试一下
  • 好的..我更新了我的帖子..我尝试编写一个检查复选框的函数..但它不起作用。我刚开始学习 VBA..@SiddharthRout

标签: excel checkbox vba


【解决方案1】:

ActiveX 复选框为OleObjects。这是你正在尝试的吗?

您还需要指定正确的.Top,否则它们将在同一位置创建。看看我是如何使用Top:=cell.Top

Sub Sample()
    Dim rng As Range, cell As Range
    Dim rr As Integer
    Dim tf As Boolean
    Dim shpTemp As Shape

    Set rng = Range("A1:A8")
    Set Destrng = Range("A2:A9")

    rr = 2

    For Each cell In Worksheets("Sheet1").Range("A1:A8")
        If Not IsEmpty(cell.Value) Then
            If Not CBExists(cell.Value) Then '<~~ Check if the checkbox exists
                With ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", _
                        Left:=51.75, Top:=cell.Top, Width:=120, Height:=19.5)
                        .Object.Caption = cell.Value
                End With
            End If
        End If
        rr = rr + 1
    Next cell
End Sub

'~~> Function to check if the checkbox exists
Function CBExists(s As String) As Boolean
    Dim oleObj As OLEObject
    Dim i As Long

    For i = 1 To Worksheets("Sheet1").OLEObjects.Count
        If s = Worksheets("Sheet1").OLEObjects(i).Object.Caption Then
            CBExists = True
            Exit Function
        End If
    Next i
End Function

【讨论】:

  • 工作谢谢.. 复选框是垂直创建的.. 有没有办法水平创建这些? @Siddharth Rout
  • 垂直创建是因为Top:=cell.Top。要创建horz,您需要更改Left:= ;) 尝试一下
  • 如果我按照您所说的更改为 Left:=cell.Left,复选框将在同一个地方创建.. @Siddharth Rout
  • 正确。那么你认为你应该怎么做? ;) 我可以给你答案,但想象一下,一旦你自己找到答案,你会有什么感觉?提示:如果你有一个在放置文本框之前计算左边的变量怎么办?
  • Nope :) 就像我说的,使用变量并增加变量。例如,第一次,Left:=51.75。接下来是51.75 + Checkbox.Width + Some buffer,接下来是51.75 + Checkbox.Width + CheckBOx Width + Some buffer,依此类推;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 2017-07-11
  • 2019-01-24
  • 2011-06-16
  • 2016-09-18
  • 1970-01-01
相关资源
最近更新 更多