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-欢迎!你可以考虑