#excel #vba #sendkeys
Вопрос:
Я унаследовал набор макросов Excel, которые берут информацию из электронной таблицы и используют клавиши отправки для вставки информации в наше программное обеспечение AP. Я отлаживал различные проблемы, в основном связанные со временем нажатия клавиш и последовательностью их ввода. Одна из проблем, для решения которой мне не удалось найти полное решение, заключается в преобразовании символов, таких как % и (), в формат, пригодный для вставки, для передачи в наше программное обеспечение AP. Я нашел в Интернете различные статьи, в которых объясняется использование функции CHR() или регулярного выражения. Я не смог внедрить ни один из этих ответов в свое приложение. Эти символы обычно влияют только на нашу строку описания.Текущий способ вставки описания проходит через следующие разделы.
Это фиксирует информацию о том, где находится информация описания, и выполняет очень простую очистку.
JEDescription = (Trim$(Range(cellDescription).Value))
JEDescription = Application.Substitute(JEDescription, "(", " ")
JEDescription = Application.Substitute(JEDescription, ")", " ")
Это передается в наше «описание записи», которое определяет, какое из наших описаний используется, оно может быть либо построчным описанием, либо общим описанием для пакета.
Private Sub write_Description(arrDetailJE() As DetailJE, i As Integer)
If TF_JE_Line_Description = True Then
SendKeys arrDetailJE(i).JE_Line_Description, True
Sleep lngSleep
Else
SendKeys JEDescription, True
Sleep lngSleep
End If
End Sub
Мне нужен способ передать специальные значения, самое главное % и ( ) во внешнюю программу с помощью клавиш отправки. Я нашел UDF, который работает в теории, но не смог реализовать его в моем текущем макросе.
Function CleanTrim(ByVal S As String, Optional ConvertNonBreakingSpace As Boolean = True) As String
Dim X As Long, CodesToClean As Variant
CodesToClean = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, _
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 127, 129, 141, 143, 144, 157)
If ConvertNonBreakingSpace Then S = Replace(S, Chr(160), " ")
For X = LBound(CodesToClean) To UBound(CodesToClean)
If InStr(S, Chr(CodesToClean(X))) Then S = Replace(S, Chr(CodesToClean(X)), "")
Next
' ""amp; added to preserve leading 0's in text fields
CleanTrim = ""amp;WorksheetFunction.Trim(S)
End Function
Что-то подобное, позволяющее макросу обнаруживать ключи, которые прерывали бы отправку ключей, и передавать их, является желаемым результатом.
Комментарии:
1. Почему бы вам не поместить свою информацию в разделочную доску с помощью VBA и не использовать клавиши отправки только для вставки (Ctrl V) в программное обеспечение AP? Таким образом, у вас нет никаких проблем со специальными символами?