Vba 范围。调整大小清除范围
我正在尝试编写一个函数,它将填充一个范围,直到它与另一个范围的长度相同Vba 范围。调整大小清除范围,vba,excel,Vba,Excel,我正在尝试编写一个函数,它将填充一个范围,直到它与另一个范围的长度相同 Sub fill_down(ByRef drop_range As Range, ByRef same_length As Range) drop_range = drop_range.Resize same_length.Rows.Count With drop_range .FillDown Debug.Print .Resize(same_length.Rows.Coun
Sub fill_down(ByRef drop_range As Range, ByRef same_length As Range)
drop_range = drop_range.Resize same_length.Rows.Count
With drop_range
.FillDown
Debug.Print .Resize(same_length.Rows.Count).Address
End With
End Sub
Sub Run()
Dim wsa As Worksheet
Dim wsb As Worksheet
Dim fill As Range
Dim same_as As Range
Set wsa = ActiveWorkbook.Sheets("Sheet1")
Set wsb = ActiveWorkbook.Sheets("Sheet2")
Set fill = wsa.Range("C3")
Set same_as = wsb.Range("$K$14:$K$33")
Call fill_down(fill, same_as)
End Sub
这导致C3失去其公式,整个范围被清除。我做错了什么?下面的工作如何
Option Explicit
Sub Run()
Dim wsa As Worksheet
Dim wsb As Worksheet
Dim fill As Range
Dim same_as As Range
Set wsa = ActiveWorkbook.Sheets("Sheet1")
Set wsb = ActiveWorkbook.Sheets("Sheet2")
Set fill = wsa.Range("C3")
Set same_as = wsb.Range("$K$14:$K$33")
fill_down fill, same_as
End Sub
Sub fill_down(ByRef drop_range As Range, ByRef same_length As Range)
Set drop_range = drop_range.Resize(same_length.Rows.Count, 1)
With drop_range
.FillDown
Debug.Print .Resize(same_length.Rows.Count).Address
End With
End Sub
下面的方法有效吗
Option Explicit
Sub Run()
Dim wsa As Worksheet
Dim wsb As Worksheet
Dim fill As Range
Dim same_as As Range
Set wsa = ActiveWorkbook.Sheets("Sheet1")
Set wsb = ActiveWorkbook.Sheets("Sheet2")
Set fill = wsa.Range("C3")
Set same_as = wsb.Range("$K$14:$K$33")
fill_down fill, same_as
End Sub
Sub fill_down(ByRef drop_range As Range, ByRef same_length As Range)
Set drop_range = drop_range.Resize(same_length.Rows.Count, 1)
With drop_range
.FillDown
Debug.Print .Resize(same_length.Rows.Count).Address
End With
End Sub
drop\u range=drop\u range.Resize same\u length.Rows.Count
不正确应该是Set drop\u range=drop\u range.Resize(same\u length.Rows.Count)
(事实上,我认为它的编写方式应该是错误的)。或者只需将整个函数更改为drop\u range.Resize(相同的长度.行数.计数)。FillDown
它没有出错,这让我有一段时间不感兴趣!谢谢。drop\u range=drop\u range.Resize same\u length.Rows.Count
不正确应该是Set drop\u range=drop\u range.Resize(same\u length.Rows.Count)
(事实上,我认为它的编写方式应该是错误的)。或者只需将整个函数更改为drop\u range.Resize(相同的长度.行数.计数)。FillDown
它没有出错,这让我有一段时间不感兴趣!谢谢。Resize
上的第二个参数是,为了保持OP问题的精神,如果不是可选的,那么它应该是1
@JNevill为什么应该是1
?因为他们想在单元格C3上选择,并在相同长度范围内复制该单元格。没有提到列计数的变化。我是说。。这是一个很好的特性,它可以填充多个列,但我不认为这是OP的意图。也许我读得太多了。Resize
上的第二个参数是,为了保持OP问题的精神,如果它不是可选的,那么它应该是1
@JNevill为什么它应该是1
?因为他们想在单元格C3上进行选择,并在其相同长度范围内复制该单元格。没有提到列计数的变化。我是说。。这是一个很好的特性,它可以填充多个列,但我不认为这是OP的意图。也许我读得太多了。