You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA For Each循环如何切换到下一行而非同行下一个单元格?

问题解决方法

你的核心问题是当前循环遍历的是单个单元格,而非整行。要实现按行处理B3:D3、B4:D4这类整行数据,需要把循环对象改成行,而非单元格。

修改后的代码示例

Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim obj As Selenium.ChromeDriver

' 设置工作表(根据你的实际表名修改)
Set ws = ThisWorkbook.Worksheets("Sheet1")
' 获取最后一行有效数据(避免循环到空行)
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
' 限制最大行不超过32
If lastRow > 32 Then lastRow = 32

' 只启动一次浏览器,避免重复打开窗口
Set obj = New Selenium.ChromeDriver
obj.Start

For i = 3 To lastRow
    ' 检查当前行B列是否为空,为空则退出循环
    If ws.Cells(i, "B").Value = "" Then Exit For
    
    obj.Get "insert website here"
    
    ' 填充标题:取当前行B列的值
    obj.FindElementByName("Enter Title").SendKeys ws.Cells(i, "B").Value
    obj.FindElementByXPath("//button[@aria-describedby='cdk-describedby-message-6']").Click
    obj.FindElementByXPath("//img[@class='ng-star-inserted']").Click
    
    ' 填充员工/组:原代码用Offset(0,3)对应B列向右3列即E列,确认是否为目标列
    obj.FindElementByXPath("//input[@placeholder='Search for Employee/Group']").SendKeys ws.Cells(i, "E").Value
Next i

' 循环结束后关闭浏览器
obj.Quit
Set obj = Nothing

关键修改点

  • 将遍历单个单元格的循环改成按行循环For i = 3 To lastRow,确保每次处理一整行数据
  • 把浏览器启动/关闭移到循环外,避免重复打开窗口,提升运行效率
  • 修正原代码中SendKeys语句的语法错误(多余的闭合引号)
  • 用ws.Cells(i, "列标")直接定位单元格,比Offset更直观,减少出错概率

内容的提问来源于stack exchange,提问作者Goose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 10:33:16