可见单元格的变量 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
我想问一下。我有一个完美运行的代码。当用户过滤 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