#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
intblSAPMM61RTC_EZ
), и я могу предоставить список, если вы зададите отдельный вопрос (потому что я не знаю об этом никакой общедоступной или SAP-ссылки).