Вид с сетки. getcellvalue — есть ли какие-либо ограничения в анализируемых строках

#vba

Вопрос:

У меня есть отчет в SAP. Макрос берет название документа из отчета (один из столбцов — например, 5), переходит к счету-фактуре и сохраняет его. Я использовал этот код, чтобы получить название документа

 Dim rows_sap As Integer
rows_sap = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell").RowCount - 2
 

Вышеизложенное проверяет, сколько строк содержится в отчете

 Dim myArray() As Variant
ReDim Preserve myArray(rows_sap - 1, 1)
 
Dim jj As Double
For jj = 0 To rows_sap - 1
Dim pdf_name As String
Set gridview = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")
pdf_name = gridview.getcellvalue(jj, "REFBN")
myArray(jj, 1) = pdf_name
'MsgBox (myArray(jj, 1))
Next jj
 

Приведенный выше код переносит имя документа в виртуальную таблицу.

Этот макрос работает хорошо, но не для отчета, в котором больше 67 строк. В строке 68 макрос выдает следующую ошибку

введите описание изображения здесь

Когда я использовал MsgBox для линии 68 , которую я получил

введите описание изображения здесь

Для 2 разных заказов у меня одно и то же 0000000069 название заказа, где в обоих случаях такого названия документа не было.

Также проверил последнюю строку из myArray . Она была пуста.

Возможно ли, чтобы это gridview.getcellvalue занимало только 67 строки? Кто-нибудь видел это?

Ответ №1:

Вы могли бы попробовать следующее:

 Dim rows_sap As Integer
rows_sap = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell").RowCount '- 2

Dim myArray() As Variant
ReDim Preserve myArray(rows_sap - 1, 1)

Dim jj As Double
Dim pdf_name As String
Set gridview = session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell/shellcont[1]/shell")
For jj = 0 To rows_sap - 1
 gridview.setCurrentCell jj, "REFBN" 
 pdf_name = gridview.getcellvalue(jj, "REFBN")
 myArray(jj, 1) = pdf_name
 'MsgBox (myArray(jj, 1))
Next jj
 

С уважением, сценарист

Ответ №2:

Спасибо за ваши ответы.

Проблема здесь заключалась в перемещении бара после 67-й линии. Этот код решил проблему

Dim jj Как Двойной Для jj = 0 Для rows_sap — 1 Dim pdf_name Как Строка, Если jj = 30, То Если rows_sap > 58, То session.findById(«wnd[0]/usr/cntlGRID1/shellcont/оболочка/shellcont[1]/оболочка»).firstVisibleRow = 58 Еще session.findById(«wnd[0]/usr/cntlGRID1/shellcont/оболочка/shellcont[1]/оболочка»).firstVisibleRow = rows_sap Конец, Если Конец, Если