两张纸的VBA代码在第二张

时间:2017-05-16 14:38:54

标签: excel excel-vba vba

我正在尝试在两张纸上运行这个VBA代码,它在第一张纸上工作正常,但在第二张纸上失败了 - 任何想法为什么?

错误是:运行时错误'1004':无法对重叠选择使用该命令。

  • VBA代码的目的是删除表中的所有空白行。
  • 范围单独命名。
  • 我想在按下按钮时在ActiveSheet上运行代码。
  • 该按钮仅在工作表上。
Private Sub DeleteBlankRowsHoursTable_Click()
    Dim Rng As Range
    On Error Resume Next
    Set Rng = ActiveSheet.Range("DataHoursTable").SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0
    If Not Rng Is Nothing Then
        Rng.Delete Shift:=xlUp
    End If
End Sub

2 个答案:

答案 0 :(得分:0)

我假设两张纸上都有这个范围?尝试指定工作表。 如果你改变:

Set Rng = Range("DataHoursTable").Spec...

Set Rng = Activesheet.Range("DataHoursTable").Spec...

它将Set范围扩展到当前活动工作表上的命名范围。

答案 1 :(得分:0)

编辑(阅读更新后的问题): 您的问题是您有2张纸,您想要相同的功能。但是,命名范围必须是唯一的,以及按钮名称。

因此: 在表1中,让我们说按钮被调用" DeleteBlankRowsHoursTable1"你希望运行的命名范围/表被称为" DataHoursTable1"。 在表2上,该按钮将被调用" DeleteBlankRowsHoursTable2"和命名范围" DataHoursTable2"。 然后,在VBA编辑器中,将以下代码放在工作表1中:

Private Sub DeleteBlankRowsHoursTable1_Click()
    Dim Rng As Range
    On Error Resume Next
    Set Rng = Me.Range("DataHoursTable1").SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0
    If Not Rng Is Nothing Then
        Rng.Delete Shift:=xlUp
    End If
End Sub

在第二个工作表中:

Private Sub DeleteBlankRowsHoursTable2_Click()
    Dim Rng As Range
    On Error Resume Next
    Set Rng = Me.Range("DataHoursTable2").SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0
    If Not Rng Is Nothing Then
        Rng.Delete Shift:=xlUp
    End If
End Sub

请注意,您不能使用" ActiveSheet",而是" Me",因为在工作表内编码时,它会引用工作表本身。