在使用if语句时移动到下一个单元格

我很新,使用VBA。 这是我所做的:

Dim ADT As String Dim Speed As String Dim SpaceAvailable As Integer Dim MinSpaceNMT As Integer Dim UserADT As Integer Dim UserSpeed As Integer Sheet1.Activate Worksheets(1).Range("C9").Value = spnBridgeWidth.Value Worksheets(1).Range("C10").Value = spnVehLnWidth.Value Worksheets(1).Range("C12").Value = spnNoOfLn.Value Sheet1.Activate Worksheets(1).Range("G9").Value = spnBridgeWidth.Value Worksheets(1).Range("G10").Value = spnVehLnWidth.Value Worksheets(1).Range("G12").Value = spnNoOfLn.Value Sheet1.Activate Worksheets(1).Range("K9").Value = spnBridgeWidth.Value Worksheets(1).Range("K10").Value = spnVehLnWidth.Value Worksheets(1).Range("K12").Value = spnNoOfLn.Value Sheet1.Activate Worksheets(1).Range("O9").Value = spnBridgeWidth.Value Worksheets(1).Range("O10").Value = spnVehLnWidth.Value Worksheets(1).Range("O12").Value = spnNoOfLn.Value Sheet1.Activate Range("C4").Select ADT = ActiveCell.Value Speed = ActiveCell.Offset(1, 0).Value SpaceAvailable = ActiveCell.Offset(10, 0).Value MinSpaceNMT = ActiveCell.Offset(14, 0).Value UserADT = UserTool.txtADT.Value UserSpeed = UserTool.txtSpeed.Value If UserADT < ADT And UserSpeed < Speed Then If SpaceAvailable > MinSpaceNMT Then MsgBox "Safe passage can be within the bridge with Alt. 1" Else Sheet1.Activate Range("G4").Select ADT = ActiveCell.Value Speed = ActiveCell.Offset(1, 0).Value SpaceAvailable = ActiveCell.Offset(10, 0).Value MinSpaceNMT = ActiveCell.Offset(14, 0).Value UserADT = UserTool.txtADT.Value UserSpeed = UserTool.txtSpeed.Value If UserADT >= ADT And UserSpeed >= Speed Then If SpaceAvailable > MinSpaceNMT Then MsgBox "Safe passage can be within the bridge with Alt. 1.2" Else MsgBox "Safe passage can be outside the bridge" End If End If End If End If 

我正试图让程序移动到下一列,并检查是否满足“If语句”。 但是,在“Else”之后,它并没有做到这一点。 请帮帮我!

这可以充分地清理你的代码,为循环的结果添加一些逻辑。

Sub tble()Dim co As Long

  With Sheet1 .Range("C9, G9, K9, O9").Value = spnBridgeWidth.Value .Range("C10, G10, K10, O10").Value = spnVehLnWidth.Value .Range("C12, G12, K12, O12").Value = spnNoOfLn.Value UserADT = UserTool.txtADT.Value UserSpeed = UserTool.txtSpeed.Value For co = 0 To 12 Step 4 With .Range("C4").Offset(0, co) ADT = .Value Speed = .Offset(1, 0).Value 'could also be .Range("C5") SpaceAvailable = .Offset(10, 0).Value MinSpaceNMT = .Offset(14, 0).Value End With 'At this point I am unclear on why the logic changes 'from less than to greater than or equal 'If UserADT < ADT And UserSpeed < Speed Then ' If SpaceAvailable > MinSpaceNMT Then 'If UserADT >= ADT And UserSpeed >= Speed Then ' If SpaceAvailable > MinSpaceNMT Then ' MsgBox "Safe passage can be within the bridge with Alt. 1.2" ' Else ' MsgBox "Safe passage can be outside the bridge" 'When you have cycled through and met your conditions, use: Exit For 'and you will jump out of the loop Next co End With End Sub 

后面的部分通过C9,G9,K9,O9循环,每列加4。 你只需要检查每个过关的值,看看他们是否符合你的突破标准。

请参阅如何避免使用Excel中的selectVBAmacros来获取更多的方法来摆脱依靠select和activate来实现您的目标。

没有更多的信息,下面可以让你开始。 注意我删除了.Select和.Activate,因为这些不是必需的,它使代码更容易阅读:

 Sub test() Dim spnBridgeWidth, spnVenLnWidth, spnNoOfLn Dim startCell As Range, otherCell As Range Set startCell = Range("C4") Set otherCell = Range("G4") spnBridgeWidth = 10 spnVenLnWidth = 20 spnNoOfLn = 40 With Sheet1 .Range("C9").Value = spnBridgeWidth .Range("C10").Value = spnVehLnWidth .Range("C12").Value = spnNoOfLn .Range("G9").Value = spnBridgeWidth .Range("G10").Value = spnVehLnWidth .Range("G12").Value = spnNoOfLn Sheet1.Activate .Range("K9").Value = spnBridgeWidth .Range("K10").Value = spnVehLnWidth .Range("K12").Value = spnNoOfLn .Range("O9").Value = spnBridgeWidth .Range("O10").Value = spnVehLnWidth .Range("O12").Value = spnNoOfLn End With With startCell ADT = .Value Speed = .Offset(1, 0).Value SpaceAvailable = .Offset(10, 0).Value MinSpaceNMT = .Offset(14, 0).Value End With UserADT = UserTool.txtADT.Value UserSpeed = UserTool.txtSpeed.Value If UserADT < ADT And UserSpeed < Speed Then If SpaceAvailable > MinSpaceNMT Then MsgBox "Safe passage can be within the bridge with Alt. 1" Else ' Sheet1.Activate 'Range("G4").Select ADT = otherCell.Value Speed = otherCell.Offset(1, 0).Value SpaceAvailable = otherCell.Offset(10, 0).Value MinSpaceNMT = otherCell.Offset(14, 0).Value UserADT = UserTool.txtADT.Value UserSpeed = UserTool.txtSpeed.Value If UserADT >= ADT And UserSpeed >= Speed Then If SpaceAvailable > MinSpaceNMT Then MsgBox "Safe passage can be within the bridge with Alt. 1.2" Else MsgBox "Safe passage can be outside the bridge" End If End If End If End If End Sub 

编辑: – – Jeeped殴打我,看起来多一点“放在一起”:P