需要使用VBA将checkbox限制为每行一个

我正在使用下面的代码来创build每一行旁边的checkbox。 可以有500-2500行的任何地方,所以行数需要是dynamic的。

我在尝试着:

  1. 将工作表从一个工作簿复制到另一个工作簿
  2. 表单被复制后,添加每行旁边的checkbox
  3. 如果K为TRUE,我使用条件格式来浏览连续的所有文本,checkbox在J.
  4. 我遇到的问题是,如果一行的格式不相同的高度,两个checkbox出现在该行,它会影响后续的行。

这就是我使用的代码的样子。 请帮忙。

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 

间距在你当前的代码中的一个问题的原因是因为你从来没有设置checkbox的Height ,所以它设置为默认的高度。 Add方法中的参数只是告诉VBA 放置checkbox的VBA上的哪个部分,它似乎并没有设置checkbox的Height ,因此这些框根据行高重叠。

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

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

添加以下内容,我认为我sorting。 对错误格式的问题抱歉,这是我第一次张贴堆栈。 感谢您所有的帮助!!!

为了摆脱回车,我添加了这个循环

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