我正在尝试使用vba清除表格A:H和K中的某一行。 在K列中,不仅有值,还有复选框。 我想留下列I和J,因为这些行中有一个公式。
现在我尝试了很多在互联网上破碎的不同选项,但似乎无法解决问题。
我的代码如下:
Sub ClearSelected()
Sheets("overview").Unprotect
Sheets("Database").Unprotect
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng As Range
Dim counter As Integer
Dim vert As Integer
Dim r As Range
Dim chkbx As CheckBox
Set ws1 = Worksheets("Overview")
Set ws2 = Worksheets("Database")
Set rng = ws1.Range("P2")
vert = rng.Value + 1
counter = 2
'do Loop
Worksheets("Database").Activate
Do While counter < vert
'if "True", remove row
If ws2.Range(ws2.Range("K" & counter)) = True Then
ws2.Range("A" & counter & ":H" & counter).Select
Selection.Clear
ws2.Range("K" & counter).Select
Selection.Clear
'Remove checkbox in selectie
Set r = Selection
For Each chkbx In ActiveSheet.CheckBoxes
If Not Intersect(r, chkbx.TopLeftCell) Is Nothing Then chkbx.Delete
Next chkbx
rng.Value = rng.Value - 1
'remove checkbox
End If
counter = counter + 1
Loop
Sheets("overview").Protect AllowUsingPivotGraphs:=True
Sheets("Database").Protect
End Sub
由于某种原因,它在范围选择/清除方面失败了。 我收到了错误消息1004。
希望你对我有好的建议。
答案 0 :(得分:0)
我不完全确定这是否有效,但您是否尝试将select.clear行改为
ws2.Range("K" & counter).ClearContents
这会清除单元格而不会影响格式化,这可能会导致问题。有时1004也会失去对象的焦点,或者你正在尝试操作的范围的大小。
顺便说一句,你可能也不需要过多担心删除公式。您可以自动重新插入它们。类似的东西:
ws2.Range("K" & counter).FormulaR1C1="=(R+1*C+1)"
'R and C refer to row and column, so equations remain relatively referenced
最简单的方法是开始录制宏,将所需的公式输入到单元格中,然后查看代码以了解如何在VBA中构建公式。
不确定是否有任何帮助,但希望如此。