运行此代码行有错误。请评论

时间:2019-04-24 07:49:45

标签: excel vba

不起作用

Range("C5:C" & iTotalRows + 1).Value = src.Worksheets("Loan").Range(Cells(4, 2), Cells(12, 2)).Value

正在工作

Range("D5:D" & iTotalRows + 1).Value=src.Worksheets("Loan").Range("C4:C" & iTotalRows).Value

2 个答案:

答案 0 :(得分:1)

您需要完全符合您的RangeCells的资格-尝试其中一种

ActiveSheet.Range("C5:C" & iTotalRows + 1).Value = src.Worksheets("Loan").Range(src.Worksheets("Loan").Cells(4, 2), src.Worksheets("Loan").Cells(12, 2))
'Or
With src.Worksheets("Loan")
    ActiveSheet.Range("C5:C" & iTotalRows+1).Value = .Range(.Cells(4, 2), .Cells(iTotalRows, 2)).Value
End With

如果我们简化一下,您当前的代码实际上就是这样:

ActiveSheet.Range("B2:B3").Value = Sheet1.Range(ActiveSheet.Cells(1,1),ActiveSheet.Cells(2,1)).Value

如果Sheet1ActiveSheet,只有能工作-否则,Excel在工作表ActiveSheet.Cells(1,1)中找不到单元格Sheet1 < / p>

答案 1 :(得分:0)

了解如何创建和使用工作簿和工作表变量将使您免于麻烦。

您应始终明确参考工作簿和工作表,以使您想要使用的对象或集合属于您。

在这种情况下,您正在使用.cells集合。

如果您不指定此集合属于哪个工作表,Excel将尝试自行找出它,这可能导致不良行为甚至错误。错误实际上是一个好方案,因为它们很容易跟踪。

使用ActiveSheet引用也是一种不好的做法。

我会这样做:

Dim src As Workbook 'source workbook
Dim dest As Workbook 'destination workbook
Dim srcWs As Worksheet 'source worksheet
Dim destWs As Worksheet 'destination worksheet
Set src = Application.Workbooks("Name of the source Workbook")
Set dest = Application.Workbooks("Name of the destination Workbook")
Set srcWs = src.Worksheets("Loan") 'assign the worksheet named "Loan", which belongs to the source workbook, to the srcWs variable
Set destWs = dest.Worksheets("Name of the destination Worksheet")

destWs.Range("C5:C" & iTotalRows + 1).Value = srcWs.Range(srcWs.Cells(4, 2), srcwsCells(12, 2)).Value

引用代码所在的工作簿的一种非常有用的方法是ThisWorkbook

这样,您只需使用相应的引用后跟一个点即可访问工作簿/工作表属性和对象,然后VBE的Intellisence将帮助您找到所需的内容。

最后,我不确定您要实现的目标是什么,但是您应该记住以下几点:

destWs.Range("C5:C" & iTotalRows + 1).Value = srcWs.Range(srcWs.Cells(4, 2), srcwsCells(12, 2)).Value

只会在iTotalRows + 1允许的范围内,从源范围到目标范围分配尽可能多的值。因此,例如,如果iTotalRows=9,那么您将得到以下结果:

enter image description here