【问题标题】:Copying active cell into first empty cell from selected range将活动单元格从选定范围复制到第一个空单元格
【发布时间】:2019-03-14 02:37:07
【问题描述】:

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

看不到应该改进的地方。退出循环时可能会出现一些错误。

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

【问题讨论】:

  • 我在里面看不到问题。
  • @SJR 的价值定位是错误的,正如 Vityata 在他的回答中所说的那样。还有myWorksheet 未定义。
  • @DarrenBartrup-Cook - 我可能很挑剔,但我喜欢 OP 拼出一个精确的问题。是的,我们通常可以解决它,但不明白为什么我们必须这样做。
  • @SJR 这很公平,毫无疑问应该是这样。这都是minimal reproducible example 的一部分。除非 OP 明确指出该数字一直出现在错误的位置,否则我们应该像您一样询问,并且 Do not see what should be Improvement 声明应该真正指向Code Review。所以,嗯,是的......你是对的。

标签: excel vba


【解决方案1】:

要在不循环的情况下做到这一点,您可以使用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

【讨论】:

  • SpecialCells 是另一个非循环选项。
【解决方案2】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 2021-01-11
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
相关资源
最近更新 更多