Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 范围。调整大小清除范围_Vba_Excel - Fatal编程技术网

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的意图。也许我读得太多了。