SAP Jobsuche bei DV-Treff
Yusmi
  • Yusmi
  • SAP Forum - Neuling Thema Starter
vor ein Jahr
Hallo zusammen,

hier eine Zeile aus meinem VBA-Code, wo ich in der Tabellendarstellung in SAP Zeilen markiere und dann die Kalkulationsdateien abrufe, weil SAP immer nur 1000 Zeilen abrufen kann. Jetzt will ich in einer For- Schleife mit den Variablen m bis n die nächsten 1000 markieren. Jedoch erkennt VBA im Code m - n als Differenz und markiert immer wieder die ersten 1000 Zeilen.

Kann jemand helfen?

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectedRows = m - n

Die Syntax mit absoluten Zahlen funktioniert, also

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectedRows = "1-1000"

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectedRows = "1001-2000" etc...

Jedoch weiß ich nicht immer vorher, wie viele Zeilen die Tabelle hat, deswegen muss ich mit den Variablen arbeiten.

So sieht der Code in dem Abschnitt komplett aus.

Dim lRow, eZeile, i As Long

lRow = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").RowCount

Debug.Print lRow

eZeile = WorksheetFunction.RoundUp(lRow, -3) / 1000

Debug.Print eZeile

Dim m, n As String

m = 1

n = 1000

'Markieren und Kalkulationsdaten ziehen

For i = 1 To eZeile

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").selectedRows = m - n

session.findById("wnd[0]/tbar[1]/btn[36]").press

m = m + 1000

n = n + 1000

If n >= lRow Then

n = lRow

End If

Debug.Print i

Debug.Print m

Debug.Print n

Next i

CDevil
vor 8 Tage
Auch wenn ich lange nicht mehr in diesem Forum war und der Beitrag mittlerweile ein Jahr alt ist und Du ggf. schon eine Lösung gefunden hast, für die die später nochmal auf diesen Beitrag stoßen, an dieser Stelle die Lösung:

SAP lädt in der Regel nur die ersten N Tabelleneinträge, das müssen nicht immer 1000 sein, das können je nach Tabelle auch deutlich weniger sein, ausgehend von der ersten sichtbaren Zeile. In Deinem Fall besteht die Lösung also darin, die Tabelle zu scrollen, damit die nachfolgenden Zeilen nachgeladen werden.

Entweder oberste Zeile auslesen, eine Zeile scrollen, oberste Zeile auslesen, eine Zeile scrollen, etc. Scrollen wie folgt:

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").CurrentCellRow = intRow

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").SelectedRows = intRow

und intRow immer eins hochzählen oder

die erste sichtbare Zeile immer weiter nach unten unten schieben á la

session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").FirstVisibleRow = intRow

und intRow nach jedem Auslesen aller lesbaren Zeilen immer um z.B. 1000 hochsetzen