你能在其With块中引用一个对象吗?

Sha*_*son 1 excel vba excel-vba

在"With"块中,有没有办法引用块本身的主题?

例如,如果我想将文本从下面的单元格复制到单元格中,我可以说:

With MyRange    
    .cells(1).offset(1,0).copy .cells(1)
End With
Run Code Online (Sandbox Code Playgroud)

但我也可以这样做吗?

With MyRange.cells(1)   
    .offset(1,0).copy [???]
End With
Run Code Online (Sandbox Code Playgroud)

"[???]"将是一种简单的说法"MyRange.Cells(1)".

Dav*_*ens 5

.Cells会工作,因为Cells财产将返回范围本身.

With MyRange.cells(1)   
    .offset(1,0).copy .Cells
End With
Run Code Online (Sandbox Code Playgroud)

原因是:.Cells属性返回一个范围对象,您可以使用该.Cells范围对象,并进一步扩展到任何返回Range的属性,例如:

With Sheet1.ListObjects(1).ListColumns(1).DataBodyRange
    Debug.Print .Cells.Address  '#returns the address of entire "self" range in specified column's DataBodyRange
End With
Run Code Online (Sandbox Code Playgroud)

a的.DataBodyRange属性ListObject返回a Range.如此做ListColumns,HeaderRowRange等,其代表一个范围内的任何对象的任何属性返回一个范围.这些其他对象不是它们自己的类,而是另一个对象的属性,它返回一个Range.

这适用于单细胞或多细胞范围.当然,.Cells如果您需要操纵单个单元格,可以进行微调,例如:.Cells(1)等等.