可见单元格的变量 i=i +1

variable i=i +1 for visible cells

我想问一下。我有一个完美运行的代码。当用户过滤 Excel 中的数据时,问题就来了。一些行将被隐藏。那么变量 i = i + 1 不起作用。 (有效但贯穿所有行) 基本上,我问的是如何仅为可见行设置变量? 谢谢你的帮助!

i = 2
Do
 'If Sheets("FORMAT").Cells(i, 7) Like "*IE-12-2007984*" Then
  'End If
  On Error GoTo Handler
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/ctxtI_VBUKR").Text = "1200"
session.findById("wnd[0]/usr/ctxtI_PSPID-LOW").Text = Sheets("Stavby").Cells(i, 7)
session.findById("wnd[0]/usr/ctxtP_VARI").Text = "AKTUALIZACE"
session.findById("wnd[0]/tbar[1]/btn[8]").press
Set myGrid = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")
Sheets("Stavby").Cells(i, 2).Value = myGrid.getcellvalue(0, "TXT04")
session.findById("wnd[0]/tbar[0]/btn[3]").press
Handler2:
session.findById("wnd[0]/usr/ctxtI_PSPID-LOW").Text = Sheets("Stavby").Cells(i, 7)

i = i + 1
If Sheets("Stavby").Cells(i, 7).Value = "" Then Exit Do
Loop
If Sheets("Stavby").Cells(i, 7).Value = "" Then

Set session = Nothing
Connection.CloseSession ("ses[0]")
Set Connection = Nothing
Set SAP = Nothing
MsgBox "HOTOVO"
Exit Sub
Handler:
 Resume Handler2
 End If
End Sub```

如果你写在“do”之后

   If Not ActiveSheet.rows(i).Hidden then
     goto endOfLoop
   EndIf

然后在“循环”之前的最后,我们把我们的目标,我们将循环的条件更改为 j 并将 j 的增量放在目标之后以避免无限循环。

EndOfLoop:
j = j + 1
loop

none 之间的代码将 运行 用于隐藏行。我们不会为隐藏行递增 i 因此 i 计算可见 rows.You 将需要在循环之前声明和初始化 Dim j as integer = 2,就在 i = 2 之后。
注意 强烈建议使用 Option Explicit 和正确声明的变量。 COMPLETE CODE REVISED

i = 2
Dim j As Integer                                                                    'LINE ADDED
j = 2                                                                   'LINE ADDED
Do
   If Not ActiveSheet.Rows(i).Hidden Then                                'LINE ADDED
     GoTo EndOfLoop                                                      'LINE ADDED
   End If                                                                'LINE ADDED
 'If Sheets("FORMAT").Cells(i, 7) Like "*IE-12-2007984*" Then
  'End If
  On Error GoTo Handler
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/ctxtI_VBUKR").Text = "1200"
session.findById("wnd[0]/usr/ctxtI_PSPID-LOW").Text = Sheets("Stavby").Cells(i, 7)
session.findById("wnd[0]/usr/ctxtP_VARI").Text = "AKTUALIZACE"
session.findById("wnd[0]/tbar[1]/btn[8]").press
Set myGrid = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")
Sheets("Stavby").Cells(i, 2).Value = myGrid.getcellvalue(0, "TXT04")
session.findById("wnd[0]/tbar[0]/btn[3]").press
Handler2:
session.findById("wnd[0]/usr/ctxtI_PSPID-LOW").Text = Sheets("Stavby").Cells(i, 7)

i = i + 1
If Sheets("Stavby").Cells(i, 7).Value = "" Then Exit Do
EndOfLoop:                                                                'LINE ADDED
j = j + 1                                                                 'LINE ADDED
Loop
If Sheets("Stavby").Cells(i, 7).Value = "" Then

Set session = Nothing
Connection.CloseSession ("ses[0]")
Set Connection = Nothing
Set SAP = Nothing
MsgBox "HOTOVO"
Exit Sub
Handler:
 Resume Handler2
 End If
End Sub

"the first empty rowSOME ROWS 这里只有几行。也许我问错了问题。所以我想从第一个可见行获取价值并继续下一个可见行。我试过你在这里写的。而且仍然不起作用。 这是我所做的,(我暂时没有修改循环) 我现在从第一个隐藏行获取值并继续 +1 行。

Dim i As Integer
i = 2
Do
If Sheet("Stavby").Rows(i).Hidden Then
     GoTo EndOfLoop
   End If
  On Error GoTo Handler
session.findById("wnd[0]").maximize
session.findById("wnd[0]/usr/ctxtI_VBUKR").Text = "1200"
session.findById("wnd[0]/usr/ctxtI_PSPID-LOW").Text = Sheets("Stavby").Cells(i, 7)
session.findById("wnd[0]/usr/ctxtP_VARI").Text = "AKTUALIZACE"
session.findById("wnd[0]/tbar[1]/btn[8]").press
Set myGrid = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")
Sheets("Stavby").Cells(i, 2).Value = myGrid.getcellvalue(0, "TXT04")
session.findById("wnd[0]/tbar[0]/btn[3]").press
Handler2:
session.findById("wnd[0]/usr/ctxtI_PSPID-LOW").Text = Sheets("Stavby").Cells(i, 7)
If Sheets("Stavby").Cells(i, 7).Value = "" Then Exit Do
EndOfLoop:
i = i + 1
Loop
If Sheets("Stavby").Cells(i, 7).Value = "" Then