Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 根据单元格值将单元格范围向下复制指定次数_Excel_Vba_Excel 2016 - Fatal编程技术网

Excel 根据单元格值将单元格范围向下复制指定次数

Excel 根据单元格值将单元格范围向下复制指定次数,excel,vba,excel-2016,Excel,Vba,Excel 2016,我试图根据单元格值将一系列单元格向下复制指定次数,并从活动单元格的交点开始 我仔细研究了几页关于堆栈溢出的问题 包含用户表单信息的整个子系统 Private Sub OKButton_Click() Dim AppTab As String Dim DDate As Date Dim Rent As Long Dim ActiveCost As Long Dim Msg As String AppTab = Application.Value DDate = DispoDate.Value

我试图根据单元格值将一系列单元格向下复制指定次数,并从活动单元格的交点开始

我仔细研究了几页关于堆栈溢出的问题

包含用户表单信息的整个子系统

Private Sub OKButton_Click()

Dim AppTab As String
Dim DDate As Date
Dim Rent As Long
Dim ActiveCost As Long
Dim Msg As String

AppTab = Application.Value
DDate = DispoDate.Value
Rent = RentPymt.Value
ActiveCost = Cost.Value
Msg = "Asset disposal date:"

Sheets(AppTab).Select

Range("A6:N11").Select
Selection.copy
Range("A9").Select
Selection.End(xlToRight).Offset(-3, 1).Select
ActiveSheet.Paste

ActiveCell.Offset(-5, 0).Select
ActiveCell.Value = Msg
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = DDate
ActiveCell.Offset(8, 5).Select
ActiveCell.Value = ActiveCost
ActiveCell.Offset(1, -5).Activate

Dim DataEntry As Worksheet, DataSht As Worksheet
Dim ItemName As Range, ItemCount As Range
Dim NRow As Long, TargetCell As Range

With ThisWorkbook
    Set DataEntry = .ActiveSheet
    Set DataSht = .ActiveSheet
End With

With DataEntry
    Set ItemName = .Range("A11")
    Set ItemCount = .Range("H3")
End With

NCol = ActiveCell.Column

With DataSht
    NRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
    'Set TargetCell = .Range("A" & NRow) 'This works
    Set TargetCell = .Cells(NRow, NCol) 'Issue here
    TargetCell.Resize(ItemCount.Value, 1).Value = ItemName.Value
End With

Range(Selection, Selection.End(xlToRight)).Select
Selection.copy
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Paste

Unload Me
End Sub
得到

运行时1004:对象“\u工作表”的方法“范围”失败

我正在为资产组合制定摊销计划。处置时,我需要修改新资产成本/租金付款的摊销计划,并以两种不同的比率进行跟踪。由用户表单启动,用户在其中输入更新的资产信息

我可以运行最初的摊销计划代码,但我需要后续的部分处置是动态的,因为投资组合可能有数百项资产。(我们不要说这有多低效,因为客户总是对的,而我现在是通过复制和粘贴来实现的。)


我已经根据您到目前为止所描述的内容以及您的代码已经在做的事情做出了一些假设。请让我知道,如果你需要它的工作,或让我知道,我可以进一步协助

请参阅代码中的更多注释:

Private Sub-ok按钮\u Click()
将AppTab设置为字符串
以字符串的形式显示
Dim Rent作为字符串“从未使用过
将ActiveCost设置为字符串
作为字符串的Dim Msg
AppTab=Application.Value'这看起来不太正确,它将返回“Microsoft Excel”。。。那是你的名字吗?
DDate=DispoDate.Value
Rent=RentPymt.Value“这是从未使用过的
活动成本=成本。价值
Msg=“资产处置日期:”
将数据条目设置为工作表:Set-DataEntry=ThisWorkbook.Sheets(AppTab)'声明并设置要使用的工作表-根据需要进行更改
Dim rngCopy As Range:Set rngCopy=DataEntry.Range(“A6:N11”)'设置要复制的范围-这可以更动态地确定
Dim ItemCount As Long:ItemCount=DataEntry.Range(“H3”).Value“设置要复制的行数
使用rngCopy
.复制_
目的地:=.Offset(,.Columns.Count)将(“A6:N11”)复制到(“O6:AB11”)
.Offset(.Rows.Count-1)。调整大小(1,.Columns.Count)。复制_
目标:=.Offset(.Rows.Count、.Columns.Count).Resize(ItemCount、.Columns.Count)'将上一行复制到ItemCount中的行数
以
'使用ActiveCell不是一个好主意。。。最好使用固定范围,或建立一些规则来确定“活动”单元格(即:使用查找)。
Dim rngActCell As Range:Set rngActCell=DataEntry.Range(“P6”)’但如果您坚持使用ActiveCell,则使用:Set rngActCell=ActiveCell
"其他细节
使用rngActCell
.Offset(-5,0)。值=消息'P1
.Offset(-4,0)。值=DDate'P2
.Offset(4,5).值=ActiveCost'U10
以
卸下我
端接头

使用
.Cells(Nrow,NCol)
。还有,或许可以看看。它将把你的代码带到下一个级别。另请参见:这会让我更接近,但会将ItemValue向下复制2倍,直到我需要它为止。。。需要它复制59个单元格,复制118个单元格。我看不出它在哪里,因为NRow仍然被定义为71。同时也感谢关于选择/激活、试错和谷歌是我如何自学的建议@Sarah如果你解释一下你最终想用这段代码实现什么(截图会有帮助),我可能会帮上忙。我会大胆猜测,问题出在
选择中,也可能出在你与该选择的关系上。因为这是最终被复制(并随后粘贴)的内容。谢谢,这让我找到了一个可以继续工作的地方!我做了一些小的调整,因为P6并不总是目标,但它在其他方面帮助很大!我的代码还没有完成(这就是为什么有些东西看起来没有被使用的原因),但这阻碍了我。再次感谢!