在新复制和粘贴的工作表中选择并清除未指定单元格范围的内容

时间:2016-02-09 01:08:46

标签: excel vba button range copy-paste

我正在努力实现以下目标:

  • 我有一个VBA按钮,点击后,复制活动工作表并将其粘贴到一个新的工作表中(我已经完成了此功能 - 请参阅下面的代码)。

  • 然后,我希望新粘贴的工作表找到两个指定的单元格,其中包含文本(“总线启动”)和(“总线完成”)并清除范围之间的单元格中的所有内容两个指定的细胞。

行是动态的,随着时间的推移会随着行的添加和删除而变化,因此我无法定义固定范围。但是,列不会被删除或添加,因此将被修复。

供参考,这是我的复制和粘贴代码:

Private Sub WkCapBtn_Click()

Dim Ws1 As Worksheet

Set Ws1 = ActiveSheet

    Ws1.Copy ThisWorkbook.Sheets(Sheets.Count)
        ActiveSheet.Range("C3").Value = DateAdd("d", 7, ActiveSheet.Range("C3"))
            ActiveSheet.Name = Format(ActiveSheet.Range("A1").Value, ("dd-mmm-yy"))

End Sub

我最初的想法是使用.Find函数来定位指定的单元格,然后使用.Offset选择下方和上方的单元格。我被困住的地方实际上是在尝试定义指定单元格之间的范围。

如果需要任何其他信息,请告知我们。先感谢您!

2 个答案:

答案 0 :(得分:0)

我在一开始就纠正了你的代码:

Static WsCopy As Worksheet
Static Ws1 As Worksheet

Private Sub WkCapBtn_Click()

    Set Ws1 = ThisWorkbook.Sheets("ORIGINALSHEETNAME")

    Set WSCopy = Ws1.Copy After:=(ThisWorkbook.Sheets(Sheets.Count))
    With WSCopy
        .Name = Format(.Range("A1").Value, ("dd-mmm-yy"))
        .Range("C3").Value = DateAdd("d", 7, .Range("C3"))
    End With
End Sub

对于您的其他子,您可以为包含“bus start”或“bus finish”的单元格设置变量。您可以尝试以下代码并告诉我它是否有效吗?

Private Sub DelBusRange()

    Dim BusStart As Range
    Dim BusFinish As Range

    With WsCopy
        Set BusStart = .Find(What:="Bus start", _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlPart, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)

        Set BusFinish = .Find(What:="Bus finish", _
                         After:=.Cells(.Cells.Count), _
                         LookIn:=xlValues, _
                         LookAt:=xlPart, _
                         SearchOrder:=xlByRows, _
                         SearchDirection:=xlNext, _
                         MatchCase:=False)

        .Range(BusStart, BusFinish).clear
    End With
End Sub

答案 1 :(得分:0)

一旦我改变它,Chris Neilson的代码就完成了这个伎俩。

Private Sub WkCapBtn_Click()

Dim Ws1 As Worksheet
Dim FindBus1 As String
Dim FindBus2 As String
Dim BusMatch1 As Range
Dim BusMatch2 As Range

Set Ws1 = ActiveSheet

    Ws1.Copy ThisWorkbook.Sheets(Sheets.Count)
        ActiveSheet.Range("C3").Value = DateAdd("d", 7, ActiveSheet.Range("C3"))
            ActiveSheet.Name = Format(ActiveSheet.Range("A1").Value, ("dd-mmm-yy"))

        FindBus1 = "Bus Start"

        FindBus2 = "Bus Finish"
        Set BusMatch1 = ActiveSheet.Cells.Find(FindBus1)
        Set BusMatch2 = ActiveSheet.Cells.Find(FindBus2)

        ActiveSheet.Range(BusMatch1.Offset(3, 1), BusMatch2.Offset(-2, 1)).ClearContents


End Sub