#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 Конец, Если Конец, Если