需要使用VBA将复选框限制为每行一个

时间:2016-03-23 15:05:58

标签: excel vba excel-vba checkbox

我使用以下代码在我拥有的每一行旁边创建复选框。可以有500-2500行,因此行数需要是动态的。

我想:

  1. 将工作表从一个工作簿复制到另一个工作簿
  2. 复制工作表后,在每行旁边添加复选框
  3. 我正在使用条件格式来浏览a中的所有文本 行如果K为TRUE,则复选框在J。
  4. 我遇到的问题是,如果行的格式不相同 高度,该行中出现两个复选框,它会影响 后续行。
  5. 这就是我使用的代码看起来像。 请帮忙。

    Sub create_new_wb_CHECKLIST()
        Sheets("Jobs by Day").Copy
        Dim ToRow As Long
        Dim LastRow As Long
        Dim MyLeft As Double
        Dim MyTop As Double
        Dim MyHeight As Double
        Dim MyWidth As Double
        LastRow = Range("I20000").End(xlUp).Row
        For ToRow = 2 To LastRow
        If Not IsEmpty(Cells(ToRow, "I")) Then            
            MyLeft = Cells(ToRow, "J").Left
            MyTop = Cells(ToRow, "J").Top
            MyHeight = Cells(ToRow, "J").Height
            MyWidth = MyHeight = Cells(ToRow, "J").Width        
            ActiveSheet.CheckBoxes.Add(MyLeft, MyTop, MyWidth, MyHeight).Select
             With Selection
                .Caption = ""
                .Value = xlOff
                .LinkedCell = "K" & ToRow
                .Display3DShading = False
             End With
          End If
      Next
    
    List item
    
    End Sub
    

2 个答案:

答案 0 :(得分:0)

当前代码中间距是一个问题的原因是因为您从未设置复选框的Height,因此它设置为默认高度。 Add方法中的参数只是告诉VBA在工作表上放置复选框的位置,它似乎没有实际设置复选框的Height,因此框中基于行高的重叠。

我发现在.Height = MyHeight块中放置With Selection解决了它:

    With Selection
        .Caption = ""
        .Value = xlOff
        .LinkedCell = "K" & ToRow
        .Display3DShading = False
        .Height = myHeight
     End With

答案 1 :(得分:0)

添加了以下内容,我认为我已经排序了。对于格式错误的问题道歉,这是我第一次发帖到堆栈。谢谢你们所有的帮助!!!

去掉回车,我添加了这个循环

For Each MyRange In ActiveSheet.UsedRange
       If 0 < InStr(MyRange, Chr(10)) Then
        MyRange = Replace(MyRange, Chr(10), "")
    End If
Next