我正在尝试获取正确的VBA代码,该代码允许我在多个工作表的同一位置插入一个过滤表,并复制上面整行的所有内容。
有一个与工作簿中每个工作表相关的复选框。如果勾选复选框,则应将该行插入此工作表。
表格受密码保护。密码可在文件的另一个工作表中找到。
我几乎得到了这个工作。我的文件可以在以下位置找到:
https://drive.google.com/file/d/0B5HnHgSNFkFid0gwbDNMOFN1NUU/view?usp=sharing
代码如下:
Sub Insert_Rows()
Dim sh As Worksheet
For Each sh In Sheets
If sh.Name = "Sheet1" And Worksheets("Sheet4").Range("D1").Value = True Or _
sh.Name = "Sheet2" And Worksheets("Sheet4").Range("D2").Value = True Or _
sh.Name = "Sheet3" And Worksheets("Sheet4").Range("D3").Value = True Then
With sh
.Unprotect Password:=Worksheets("Sheet4").Range("A1")
.Cells(ActiveCell.Row, 4).EntireRow.Insert
.Range(.Cells(ActiveCell.Row, 1), .Cells(ActiveCell.Row, 4)).FillDown
.Protect DrawingObjects:=True, contents:=True, Scenarios:=True, Password:=Worksheets("Sheet4").Range("A1")
End With
End If
Next sh
End Sub
我遇到的问题是并非上述行中的所有数据都被复制。第5列中的数据未复制。我确信它与代码 .Cells(ActiveCell.Row, 4)
中的4有关。我希望它复制上面的整行而不管列数。
非常感谢任何帮助。
由于
答案 0 :(得分:0)
要填充WholeRow,而不仅仅是第1列和第4列之间的范围,替换
.Range(.Cells(ActiveCell.Row, 1), .Cells(ActiveCell.Row, 4)).FillDown
与
.Cells(ActiveCell.Row, 1).EntireRow.FillDown
(也可以写成.Rows(ActiveCell.Row).FillDown
)
注意:
请记住,ActiveCell.Row不一定是指Sheet1,Sheet2或Sheet3上的任何特殊位置。
如果当前活动单元格是Sheet4上的单元格G67,则ActiveCell.Row将评估为67,因此Sheet1(和/或Sheet2和/或Sheet3)的第66行将被复制到Sheet1上新插入的行(和/或Sheet2和/或Sheet3) - 它不会神奇地决定在Sheet1上插入第58行,在Sheet2上插入第82行等。
如果您遇到的仅问题是整个行没有被填满,那么上面的解决方案将解决它。但如果您发现错误的行被填满,那么您需要重新考虑如何选择该行。