excel - 将一行从一张纸复制到另一张纸的另一行
问题描述
我收到错误,我不明白为什么。
我有一个数组从数组中向下查找匹配项。当它匹配时,它会复制该行的使用范围并将其粘贴到另一页的最后一行下方。
Dim iCL As Integer, USCurRow As Integer, USlRow As Integer, USlCol As Integer, USlRow2 As Integer
Dim USCountryList(1 To 1) As String
Dim USCtry As String
USCountryList(1) = "Country1"
For iCL = 1 To UBound(USCountryList)
USCtry = USCountryList(iCL)
USlRow = Sheets("US Confirmed").Cells(Rows.Count, 1).End(xlUp).Row
USlCol = Sheets("US Confirmed").Cells(1, Columns.Count).End(xlToLeft).Column
USlRow2 = Sheets("World Confirmed").Cells(Rows.Count, 2).End(xlUp).Row
For USCurRow = 2 To USlRow
If Sheets("US Confirmed").Cells(USCurRow, 1) = USCtry Then
Sheets("World Confirmed").Range(Cells(USlRow2 + 1, 1), Cells(USlRow2 + 1, USlCol)) = _
Sheets("US Confirmed").Range(Cells(USCurRow, 1), Cells(USCurRow, USlCol))
End If
Next USCurRow
Next iCL
application-defined or object-defined error
我在复制部分不断收到一个。逐步检查变量的值似乎是有效的:将它们硬编码如下:
Sheets("World Confirmed").Range(Cells(268,1),cells(268,121))= _
Sheets("US Confirmed").Range(Cells(3, 1), Cells(3, 121))
产生同样application-defined or object-defined error
的错误。
我也尝试过range select. selection copy
range select selection paste
但仍然遇到错误
解决方案
我相信错误是由您不合格的Worksheet.Cells()
财产引起的。
如果您不熟悉对象限定,让我们从Microsoft 文档中摘录该Worksheet.Cells
属性:
句法
表达式.Cells
表达式表示 Worksheet 对象的变量。
...
在没有对象限定符的情况下使用此属性会返回一个 Range 对象,该对象表示活动工作表上的所有单元格
因此,在您的行
Sheets("World Confirmed").Range(Cells(USlRow2 + 1, 1), Cells(USlRow2 + 1, USlCol)) = _
Sheets("US Confirmed").Range(Cells(USCurRow, 1), Cells(USCurRow, USlCol))
中,该Range()
属性是合格的Sheets("World Confirmed")
,Sheets("US Confirmed")
但是Cells()
为您的范围定义开始和结束单元格的属性不是。
如果您将Cells()
属性限定为相关工作表,您的运行时错误将停止,但您可能会发现这些值不会Sheet1
按预期分配。
在每个范围上使用.Value
属性应该可以解决这个问题,如下所示:
For USCurRow = 2 To USlRow
If Sheets("US Confirmed").Cells(USCurRow, 1) = USCtry Then
Sheets("World Confirmed").Range(Sheets("World Confirmed").Cells(USlRow2 + 1, 1), Sheets("World Confirmed").Cells(USlRow2 + 1, USlCol)).Value = _
Sheets("US Confirmed").Range(Sheets("US Confirmed").Cells(USCurRow, 1), Sheets("US Confirmed").Cells(USCurRow, USlCol)).Value
End If
Next USCurRow
为了提高可读性和可维护性,我建议将您的工作表分配给如下变量:
Dim SourceSheet as Worksheet
Dim DestinationSheet as Worksheet
Set SourceSheet = Thisworkbook.Sheets("US Confirmed")
Set DestinationSheet = ThisWorkbook.Sheets("World Confirmed")
For USCurRow = 2 To USlRow
If Sheets("US Confirmed").Cells(USCurRow, 1) = USCtry Then
DestinationSheet.Range(DestinationSheet.Cells(USlRow2 + 1, 1), DestinationSheet.Cells(USlRow2 + 1, USlCol)).Value = _
SourceSheet.Range(SourceSheet.Cells(USCurRow, 1), SourceSheet.Cells(USCurRow, USlCol)).Value
End If
Next USCurRow
推荐阅读
- android - 我们什么时候应该刷新 android 设备令牌?
- javascript - 从 useEffect 和其他函数调用函数
- javascript - React Plus Django:在创建新的 Todo 项目时无法更新 django 后端
- css - 将侧边栏从左侧移动到右侧
- python - K 的 top terms 意味着聚类质心有重复的单词
- javascript - NavLink 呈现应有的效果,但不起作用
- javascript - 如何使用 MathJax.typeset() 解析动态加载的内容?
- csv - 在prolog中将列表元素写入csv
- c# - 在 App Owns Data 场景中创建报表时“此内容不可用”
- json - 如何在 Go 中处理嵌套的 JSON 数据