我正在整理一个项目管理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
我可以看到选择并复制了正确的范围,但是随后的偏移量存在问题。
答案 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
它完美地工作!只需现在就做剩下的事情...