不起作用
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
答案 0 :(得分:1)
您需要完全符合您的Range
和Cells
的资格-尝试其中一种
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
如果Sheet1
是ActiveSheet
,只有能工作-否则,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
,那么您将得到以下结果: