【问题标题】:Set 'Do Until' Endpoint for Excel VBA Macro Loop为 Excel VBA 宏循环设置“直到”端点
【发布时间】:2016-04-09 07:21:16
【问题描述】:

我对 VBA 几乎一无所知,需要一些帮助!我记录了一个简单的宏,当在 B 列中找到某个值(“Choice”)时,它将插入一行并执行一些相对剪切/粘贴。我希望这个宏循环直到它到达数据集的末尾(请记住,宏的一部分会插入更多行)。我已经让它循环并做我想做的事,但我不知道如何让它停止而不是无限。搜索空白将无济于事,因为数据集中有多个空白。希望有一个有用的“直到”代码?如果您有解决方案,能否请您在回复中将其附加到我的宏中,以便我看到整个事情的外观?谢谢!!

Sub Macro6()
'
' Macro6 Macro
' Spacer
'
' Keyboard Shortcut: Ctrl+q
'
    Dim c As Range

   For Each c In Range("B1:B3000")
    Cells.Find(What:="choice", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
    ActiveCell.Rows("1:1").EntireRow.Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    ActiveCell.Offset(1, 0).Range("A1:B1").Select
    Selection.Cut
    ActiveCell.Offset(-1, 0).Range("A1").Select
    ActiveSheet.Paste
    ActiveCell.Offset(1, 0).Range("A1").Select
    Next
End Sub

【问题讨论】:

    标签: vba excel macros


    【解决方案1】:
    Sub Macro6()
    '
    ' Macro6 Macro
    ' Spacer
    '
    ' Keyboard Shortcut: Ctrl+q
    '
    Dim c As Range
    Dim lastRow As Long
    
    With ActiveSheet
    
        lastRow = .Cells(.Rows.count, "B").End(xlUp).Row
    
        For I = lastRow To 1 Step -1
    
            Debug.Print .Cells(I, 2).Value
            If InStr(1, .Cells(I, 2).Value, "choice") > 0 Then
    
                .Cells(I, 2).Rows("1:1").EntireRow.Select
                Selection.Insert Shift:=xlDown
                ActiveCell.Offset(1, 0).Range("A1:B1").Select
                Selection.Cut
                ActiveCell.Offset(-1, 0).Range("A1").Select
                ActiveSheet.Paste
                ActiveCell.Offset(1, 0).Range("A1").Select
    
            End If
    
        Next
    
    End With
    
    End Sub
    

    当我针对这个输入运行这段代码时......

    我得到这个输出...

    这是您要寻找的结果吗?如果不是,您能否更好地描述您需要的结果?

    【讨论】:

    • 嗯,那个似乎什么也没做。光标甚至不动。
    • 每当 B 列中出现“选择”时,在上方插入一行,然后将 A 列和 B 列中的值向上移动一行到新行中
    • move the values from columns A and B up one row into the new row 发生选择的行中的值?新行意味着刚刚插入的那一行?
    • 嗯,还是什么都没有。我没有收到错误消息,它只是没有做任何事情。同样,我对 VBA 一无所知,但只是想知道 - 如果我们不在其余代码中使用 Dim c,为什么我们将其称为 Range?感谢您的帮助!
    • 相关工作表是否处于活动状态? B列是否包含“选择”?是的,我们不需要c。忘记了XD
    猜你喜欢
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2017-06-09
    • 2014-06-13
    • 2018-01-16
    • 2014-12-06
    • 2014-03-07
    • 1970-01-01
    相关资源
    最近更新 更多