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



我正在尝试实现以下目标:

  • 我有一个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

我最初的想法是使用 .查找函数以查找指定的单元格,然后使用 .偏移以选择下方和上方的单元格。我卡在的地方实际上是试图定义指定单元格之间的范围。

如果需要任何其他信息,请告诉我。提前谢谢你!

一开始我稍微更正了你的代码:

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

对于您的其他子,您可以为包含"总线开始"或"总线完成"的单元格设置一个变量。你能试试下面的代码并告诉我它是否有效吗?

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

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

最新更新