如何根据我是否选择了 Row3 中的单元格来跳过某些代码行?

How do I skip some lines of code based on whether I have selected a cell in Row3 or not?

我正在尝试创建一个电子表格,其中用户 select 任何单元格然后 运行 这个宏。如果该单元格不在第 3 行中,则 select 该单元格所在的整行,将该行剪切并插入第 3 行中。(这部分工作正常)如果 selected 单元格在行中3 然后我想跳过剪切和插入部分代码。这看起来应该很简单,但我收到错误:End if without block if, when I 运行 this macro。任何帮助将不胜感激。谢谢。

Dim Row As String

ActiveCell.EntireRow.Select

strRow = Selection


If Selection = Rows("3:3") Then GoTo SkipToHere
End If

Selection.Cut
    ActiveWindow.SmallScroll Down:=-84
    Rows("3:3").Select
    Selection.Insert Shift:=xlDown
    Range("A3").Select



SkipToHere:
Dim Row As String

If Activecell.Row = 3 Then GoTo SkipToHere
End If

ActiveCell.EntireRow.Select
Selection.Cut
ActiveWindow.SmallScroll Down:=-84
Rows("3:3").Select
Selection.Insert Shift:=xlDown
Range("A3").Select



SkipToHere:

在 VBA 中,您可以用多种方式编写 IF 语句:1. 全部在一行中,或 2. 使用 Else 组件,或 3. 使用 ElseIf ...等等

当您编写如下 IF 语句时:

If A=True Then B

没有 Else 组件,则 VBA 不需要 End IF 语句。当你像这样使用 IF 时需要它:

IF A=True Then
  Do this
Else
  Do Something else
End If

在此上下文中使用 GoTo 可能不是解决此问题的最佳方法。相反,我只是将您的第一部分包含在 If:

Dim strRow As String

ActiveCell.EntireRow.Select

strRow = Selection

If Selection.Row <> 3 Then

    Selection.Cut
    Rows("3:3").Insert Shift:=xlDown
    Range("A3").Select

End If

原则上,您也应该避免在不需要的地方使用 .Select。

Sub Horsten()

'选区和第三行没有共同点吗?

If Intersect(Selection, Rows(3)) Is Nothing Then

' 然后剪切和粘贴(但不改变选择)

    Selection.EntireRow.Cut
    Rows(3).Insert Shift:=xlDown

' 然后根据需要调整位置

    ActiveWindow.SmallScroll Up:=84
    Cells(3, 1).Select
End If

End Sub