Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
Excel 将活动单元格从选定范围复制到第一个空单元格_Excel_Vba - Fatal编程技术网

Excel 将活动单元格从选定范围复制到第一个空单元格

Excel 将活动单元格从选定范围复制到第一个空单元格,excel,vba,Excel,Vba,情况是: 查找声明范围中的第一个空单元格。如果找到,则将值从活动单元格复制到“第一个找到的空单元格”并退出循环 不知道应该改进什么。可能是退出循环时出现了一些错误 Sub Copie() Dim myNamedRange As Range Set myNamedRange = myWorksheet.Range("L2:L11") For Each cell In myNamedRange If IsEmpty(cell) = True Then ActiveCell.V

情况是: 查找声明范围中的第一个空单元格。如果找到,则将值从活动单元格复制到“第一个找到的空单元格”并退出循环

不知道应该改进什么。可能是退出循环时出现了一些错误

Sub Copie()
Dim myNamedRange As Range
Set myNamedRange = myWorksheet.Range("L2:L11")
For Each cell In myNamedRange
    If IsEmpty(cell) = True Then
        ActiveCell.Value = cell.Value
        Exit For
    End If
Next cell
End Sub

ActiveCell.Value=cell.Value
应该是
cell.Value=ActiveCell.Value

左半部用右半部填写。看看这个小例子:

Sub TestMe()        
    Dim a As Long
    Dim b As Long
    a = 10
    b = 20
    a = b
    MsgBox a 'shows 20, because it accepted "b"
End Sub
因此,这应该是可行的:

Sub TestMe()

    Dim myNamedRange As Range
    Set myNamedRange = Worksheets(1).Range("L2:L11")
    Dim myCell As Range

    For Each myCell In myNamedRange
        If IsEmpty(myCell) Then
            myCell.Value = ActiveCell.Value
            Exit For
        End If
    Next myCell

End Sub

要做到这一点而不循环,您可以使用
FIND
,但如果使用较小的范围,就不会有任何明显的改进

Sub Copy()

    Dim myWorkSheet As Worksheet
    Dim myNamedRange As Range
    Dim FirstEmptyCell As Range

    Set myWorkSheet = ThisWorkbook.Worksheets("Sheet1")
    Set myNamedRange = myWorkSheet.Range("L2:L11")

    With myNamedRange
        Set FirstEmptyCell = .Find( _
            What:="", _
            After:=.Cells(.Rows.Count, .Columns.Count), _
            LookIn:=xlValues, _
            LookAt:=xlWhole, _
            SearchDirection:=xlNext, _
            SearchFormat:=False)
    End With

    If Not FirstEmptyCell Is Nothing Then
        FirstEmptyCell = ActiveCell
    Else
        MsgBox "No empty cells found.", vbOKOnly + vbInformation
    End If

End Sub

我看不出有什么问题。@SJR的价值定位是错误的,正如维蒂亚塔在回答中所说的。另外,
myWorksheet
未定义。@DarrenBartrup Cook-我可能很挑剔,但我希望OP能给出一个精确的问题。是的,我们通常可以解决这个问题,但不明白为什么我们必须这么做。@SJR这很公平,毫无疑问应该是这样的。这一切都是生活的一部分。除非OP明确指出该数字一直出现在错误的位置,否则我们应该像您一样询问,而“看不到应该改进什么”陈述应该真正指向。所以,嗯,是的。。。你说得对。
SpecialCells
是另一个非循环选项。@luk.monecki-欢迎!你可以考虑