Считывание количества символов в столбце объекта GuiTableControl

#vba #scripting #sap-gui

Вопрос:

Я пытаюсь прочитать количество символов в столбце «Данные элемента MRP» в tcode MD04 .

Приведенный ниже код дает мне 1, но я хочу, чтобы он давал 16 или должен давать 16 при условии, что мой код правильный…Если есть еще одна строка с еще одним заказом на покупку, она должна дать 32 и т. Д.

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

 j = 0

Do

  session.findById("wnd[0]/usr/subINCLUDE1XX:SAPMM61R:0750/tblSAPMM61RTC_EZ/txtMDEZ-EXTRA[5," amp; CStr(j) amp; "]").caretPosition = 0

  objSheet.Cells(i, 2) = Len(Cstr(j))

  Exit Do

  j =j   1

Loop
 

Ответ №1:

В настоящее время вы вычисляете длину целочисленной переменной j , которая содержит значение 0 , поэтому вы получаете 1 .

Элемент таблицы, который вы показываете, является GuiTableControl объектом. Вы найдете способ GetCell считывания содержимого ячейки, а затем сможете рассчитать длину ее значения.

 Set tableControl = session.findById("wnd[0]/usr/subINCLUDE1XX:SAPMM61R:0750/tblSAPMM61RTC_EZ")

MsgBox Len(tableControl.GetCell(1,5).Text)
 

(строка 1 = вторая строка; столбец 5 = шестой столбец)

Комментарии:

1. Спасибо тебе, Сандра! Могу я спросить, как вы это увидели GuiTableControl ?

2. Я пытаюсь сделать скрипт для получения товара. Первым шагом является получение номера продукта из входного файла Excel и доступ к MD04. Если есть 2 открытых PO, GR следует обрабатывать вручную, но если это только один PO, он должен скопировать его и перейти в MIGO для выполнения GR. Поэтому я попробовал If Len(tableControl.GetCell(2,5).Text) > 1 then objSheet.Cells(i, 2) = "To be handled manually" еще скопировать из строки 1 = вторая строка. Но сценарий останавливается, когда есть только строка 1 (один PO). Можно ли использовать такую строку If Len(tableControl.GetCell(Cstr(j),5).Text) > 16 then для чтения количества символов во всем

3. В основном, когда строка 2 = третья строка доступна, она должна перейти к следующему номеру продукта. Только когда строка 1 существует (строка 2 недоступна), она должна скопировать номер PO из строки 1 и перейти к выполнению MIGO GR.

4. Я предполагаю, что, возможно, лучше сделать какой-то подсчет строк. objSheet.Cells(i, 2) = session.findById("wnd[0]/usr/subINCLUDE1XX:SAPMM61R:0750/tblSAPMM61RTC_EZ").rowcount дает мне 47, если есть только один PO (строка 1 = вторая строка) , и 48, когда есть два PO (также в строке 2 = третья строка). Утверждение IF может быть основано на этом сейчас 🙂

5. Чтобы узнать, какой объект соответствует элементу (хороший кандидат на вопрос, представляющий интерес для любого), вы можете использовать визуальный инструмент, такой как инструмент чтения экрана SAP в примечании 1441550 — Сценарии графического интерфейса SAP: примеры приложений или отслеживание сценариев Стефана Шнелла . Или вы можете знать эквивалентности префикса идентификатора ( tbl in tblSAPMM61RTC_EZ ), и я могу предоставить список, если вы зададите отдельный вопрос (потому что я не знаю об этом никакой общедоступной или SAP-ссылки).