剪切并粘贴一组行以允许新的空白行

时间:2019-05-07 20:01:49

标签: excel vba xlsm

我正在整理一个项目管理excel电子表格(我的公司不会为所有人提供许可,让每个人都可以访问诸如MS Project之类的东西,我希望每个人都可以使用),并且希望用户可以在指定位置添加或删除行(我正在使用一种用户窗体以使其更易于使用)。我在复制,剪切和粘贴行以允许新的空白行时遇到问题。

我希望用户指定要在其上放置新行的行号(具有所有关联的公式和格式)。目前,我正在使用单元格“ C6”输入行号。我正在使用以前成功使用过的修改后的代码变体,它使我可以在电子表格的底部复制并粘贴新的空白行。我希望修改后的代码复制单元格“ C6”中指定的行和最后一个完整行之间范围内的所有行,然后偏移一行并粘贴例如如果第一行值为14,最后一行为50,则复制range(14:50),偏移到第15行并粘贴。

一旦我正确理解了这一点,我将其余代码复制/粘贴并清除到第14行中,以给我一个新的空白格式化行。我希望删除行的代码与此相反,但是稍后再讲。

此刻,我一直遇到一个我不明白的错误-我已尽我所能解决了这个问题,并进行了许多Google搜索,但无济于事!

该错误不断突出显示“ FirstRow”问题,但单元格中有一个数字-我很茫然:

Dim rActive As Range
Dim FirstRow As Integer
Dim LastRow As Integer

Set rActive = ActiveCell

Application.ScreenUpdating = False

FirstRow = Range(Range("C6").Value)

LastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row

With Range(FirstRow & ":" & LastRow)
.Copy

With Range(FirstRow).Offset(1, 0)
.PasteSpecial xlPasteAll

On Error Resume Next

End With

End With

rActive.Select

Application.CutCopyMode = False

Application.ScreenUpdating = True

我可以看到选择并复制了正确的范围,但是随后的偏移量存在问题。

2 个答案:

答案 0 :(得分:0)

您的变量类型混杂 FirstRow = Range(Range(“ C6”)。Value)将返回RANGE OBJECT(实际上是错误的,因为没有“ set”)。

FirstRow = Range(“ C6”)。值将返回一个INTEGER或STRING。

++++++++++++++++++++++++++++++++++++

我做过类似的事情,它不是最出色的代码,但也许它会给您一些想法。

Sub AddParticipant()

    Dim msgChoice As VbMsgBoxResult
    Dim NewName As String
    Dim TargetCell As Range

    'Set Up
    ThisWorkbook.Save

    If Range("LastParticipant").Value <> "" Then
        MsgBox "The roster is full. You cannot add anymore participants.", vbCritical
        Exit Sub
    End If

    'Get Name
    NewName = Application.InputBox( _
               Prompt:="Type the participant's name as you would like it to appear on 
                         this sheet.", _
               Title:="Participant's Name", _
               Type:=2)

        'Error Message
        If NewName = "" Then
            MsgBox ("You did not enter a name.")
            Exit Sub
        End If

    'Get Location (with Data Validation)
GetTargetCell:
    Set TargetCell = Application.InputBox _
           (Prompt:="Where would you like to put this person? (Select a cell in 
                 column A)", _
            Title:="Cell Select", _
            Type:=8)
    If TargetCell.Count > 1 Then
        MsgBox "Select a single cell in Column A"
        GoTo GetTargetCell
    End If

    If TargetCell.Column <> 1 Then
        MsgBox "Select a single cell in Column A"
        GoTo GetTargetCell
    End If

    If TargetCell.Offset(-1, 0) = "" Then
        MsgBox "You must pick a contiguous cell. No blank spaces allowed!"
        GoTo GetTargetCell
    End If


    If TargetCell <> "" Then

        'Do stuff to populate rows or shift data around

    Else
        'If they picked a blank cell, you can insert new data
        TargetCell.Value = NewName

    End If


End Sub

答案 1 :(得分:0)

谢谢!!我对“范围”太宽容了。现在的代码是:

将有效范围调整为 Dim FirstRow作为整数 昏暗LastRow为整数

设置rActive = ActiveCell

Application.ScreenUpdating = False

FirstRow = Range(“ C6”)。Value

LastRow = ActiveSheet.Cells(Rows.Count,“ A”)。End(xlUp).Row

带范围(FirstRow和“:”&LastRow) 。复制

具有.Offset(1,0) .PasteSpecial xlPasteAll

错误恢复下一个

结尾为

结尾为

rActive.Select

Application.CutCopyMode = False

Application.ScreenUpdating = True

它完美地工作!只需现在就做剩下的事情...