我使用以下代码在我拥有的每一行旁边创建复选框。可以有500-2500行,因此行数需要是动态的。
我想:
这就是我使用的代码看起来像。 请帮忙。
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
答案 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