Я создаю мини-базовый «почтовый клиент» с помощью VBA. пользователь имеет возможность вставить поле «Имя» # имя # одним нажатием кнопки в позиции курсора в текстовом поле с несколькими строками (которое является телом электронной почты). После того, как пользователь нажимает кнопку отправки, код заменяет поле # name # именем, связанным с соответствующим адресом, выбранным из списка.Вставка строки в позицию курсора помещает ее неправильно при использовании многострочного текстового поля
Вкладка и ввод включены для текстового поля. Проблема в том, что, когда пользователь нажимает клавишу ввода, это воспринимается функцией Len() как 3 символа? Например .:
Пользователь вводит:
В
C: |
Len() берет на себя длину шнура как 9 символов здесь. Так позволяет сказать, что пользователь хочет, чтобы вставить поле имени только после того, как «:» в позиции курсора, указанной выше, он помещается следующим образом:
B
«# название # C: |
(Без «) Курсор позиции перемещается правильно, хотя и остается после того, как„:“
Вот код, я использую (Есть большинство из них из другого источника):
'Insert String at cursor
Sub InsertAtCursor(ControlName As String, InsertString As String)
Dim Ctrl As Object 'Object ref var
Dim strPrior As String 'This var records the string before the cursor
Dim strAfter As String 'This var records the string after the cursor
Dim lngLen As Integer 'Saves the length (number of chars) currently in the text box
Dim iSelStart As Integer 'Saves the current cursor position in the text box
'Set Ctrl as ref to the MessageBody text box
Set Ctrl = AdOp.Controls(ControlName)
With Ctrl
If .Enabled And Not .Locked Then
lngLen = Len(.Text)
'SelStart can't cope with more than 32k characters.
If lngLen <= 32767& - Len(InsertString) Then
'Remember characters before cursor.
iSelStart = .SelStart
If iSelStart > 1 Then
'Saves all text left of cursor
strPrior = Left$(.Text, iSelStart)
End If
'Remember characters after selection.
If iSelStart + .SelLength < lngLen Then
strAfter = Mid$(.Text, iSelStart + .SelLength + 1)
End If
'Assign prior characters, new string, and later ones.
.Value = strPrior & InsertString & strAfter
'Put the cursor back where it was, after the new string.
.SelStart = iSelStart + Len(InsertString)
'Return True on success
'InsertAtCursor = True
End If
End If
End With
End Sub
Любая помощь здесь будет замечательной. Спасибо заранее.