Excel VBA在多个工作表

时间:2016-08-19 18:01:14

标签: vba excel-vba excel

我正在尝试获取正确的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有关。我希望它复制上面的整行而不管列数。

非常感谢任何帮助。

由于

1 个答案:

答案 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行等。

如果您遇到的问题是整个行没有被填满,那么上面的解决方案将解决它。但如果您发现错误的行被填满,那么您需要重新考虑如何选择该行。