【问题标题】:excel macro to select multiple rowexcel宏选择多行
【发布时间】:2009-11-12 22:09:51
【问题描述】:

我有 excel 宏来选择要剪切并粘贴到下一张表的行。现在我想一次选择多行以剪切并粘贴到下一张纸,然后返回上一张纸以删除被剪切的空白行。我对单行剪切和粘贴的代码如下:

Sub CutPasteRows()
Dim iLastRow As Integer


   'select the first cell to intiate script
    txtRowNum = Selection.Row
    'select the row
    Rows(txtRowNum).EntireRow.Select
    Selection.Cut

    'if the active worksheet is the last one (no next worksheet), display error.
    If ActiveSheet.Index = Worksheets.Count Then
       MsgBox ("There are no next worksheet")
    Else
        ActiveSheet.Next.Select
        iLastRow = ActiveSheet.UsedRange.Rows.Count

        'if the workshet is blank, start with the first row. Otherwise, add 1 to the last row
        If Cells(1, 1).Value = "" And iLastRow = 1 Then
            iLastRow = 1
        Else
            iLastRow = iLastRow + 1
        End If

        'Paste row
        Rows(iLastRow).EntireRow.Select
        ActiveSheet.Paste

        'Go back to the last worksheet
        ActiveSheet.Previous.Select
        Rows(txtRowNum).EntireRow.Select
        Selection.Delete
    End If
End Sub

感谢任何帮助。

谢谢

【问题讨论】:

  • 它做错了什么?错误信息或问题是什么?

标签: vba excel


【解决方案1】:

如果您一次选择多行,Selection 属性将返回一个 Range 对象。使用此 Range 对象,您应该能够将选定的行剪切并粘贴到下一个工作表,然后从上一个工作表中删除它们。

我对您的代码进行了快速更改,我认为这应该可以让您走上正确的道路:

Sub CutPasteRows()
 Dim iLastRow As Integer

 'Cut entire selection'
 Selection.Cut

 'if the active worksheet is the last one (no next worksheet), display error.'
  If ActiveSheet.Index = Worksheets.Count Then
   MsgBox ("There are no next worksheet")
  Else
    ActiveSheet.Next.Select
    iLastRow = ActiveSheet.UsedRange.Rows.Count

  'if the worksheet is blank, start with the first row. Otherwise, add 1 to the last row'
    If Cells(1, 1).Value = "" And iLastRow = 1 Then
        iLastRow = 1
    Else
        iLastRow = iLastRow + 1
    End If

    'Paste row'
    Rows(iLastRow).EntireRow.Select
    ActiveSheet.Paste

    'Go back to the last worksheet and delete selection'
    ActiveSheet.Previous.Select
    Selection.Delete
End If

Selection property

Range object

【讨论】:

    【解决方案2】:

    你只需要合并你需要的行。

    像这样:

    Set workingRange = Application.Union(workingRange, newRange)
    

    当然,这意味着使用范围对象而不是行号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      相关资源
      最近更新 更多