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
相关产品推荐
相关产品推荐

