在 MS Access VBA 中,我一直在嘗試在用戶按下按鈕時以編程方式將代碼插入到表單的富文本文本框控制元件中。這個想法是在用戶按下按鈕時用戶游標所在的位置放置一個標記——該標記將表示用戶輸入關于文本的評論的文本的開始。
但是,大概是因為富文本文本框嵌入了隱藏的格式代碼(例如,<div> 等),當我嘗試插入新文本時,使用 .SelStart 和 .SelLength 似乎無法讓我在文本框中找到正確的位置文本。它始終在文本框中比單擊按鈕時游標所在的位置更早地插入文本,但更早的字符數不一致。
盡管我進行了搜索,發現了一些將文本插入標準文本框的絕妙函式(例如,Lebans 的 InsertAtCursor 函式),但我也無法讓這些函式適用于富文本文本框——也就是說,它們與我自己撰寫的代碼;它在現有文本框文本中過早地插入新文本。
任何人都有以編程方式將新文本插入游標位置的富文本文本框的解決方案?
這是我的一次嘗試中的代碼(顯然,我可以使代碼更高效,但我只是想讓一些東西先作業)。它插入文本,但不在正確的位置,可能是由于富文本格式不會明顯出現在文本框中,但顯然會影響 .SelStart 位置值:
Dim intSelStart As Integer 'this is the starting location of the selection in the note at the time the comment was initially added
Dim strAddComment as String 'this is the string comment that I want to add--it is not the comment itself, it is a flag that will indicate the comment number
strAddComment = "|1`17|" 'the | characters delimit the comment flag; the first number is the comment number so 1 is the first comment, 2 is the second, etc.; the value after the ` is the length of the text selected in the textbox to which the comment applies, e.g., `17 means the comment applies to 17 selected characters
Forms!frmAppt_individual.SetFocus 'set the focus to the main form
Forms!frmAppt_individual.sub_C.SetFocus 'set the focus to the subform so we can get the .Sel property values of the text selected in the textbox on the subform
Forms!frmAppt_individual.sub_C.Form.Controls("Note").SetFocus 'set focus on the control which is required to get the .Sel property values
intSelStart = Forms!frmAppt_individual.sub_C.Form.Controls("Note").SelStart
'now try to insert the comment
Forms!frmAppt_individual.sub_C.Form.Controls("Note") = Left(Forms!frmAppt_individual.sub_C.Form.Controls("Note"), intSelStart) & strAddComment & Mid(Forms!frmAppt_individual.sub_C.Form.Controls("Note"), intSelStart 1)
uj5u.com熱心網友回復:
因此,我在下面發布了代碼,該代碼可以讓我使用 VBA 代碼將當前插入點的文本插入到富文本文本框中。該PlainText功能的使用似乎很有幫助。希望下面的代碼能幫助其他人嘗試做同樣的事情。
代碼說明:函式 fAddComment 包含在標準模塊中。當用戶單擊父表單 frmAppt 上的按鈕 btnAddComment 時呼叫 fAddComment。子表單 subNoteForm 包含名為 tbxNote 的富文本文本框。預計用戶的插入點位于富文本文本框中插入注釋參考的位置;用戶還可以選擇多個字符來指示注釋參考所適用的文本范圍。函式 fAddComment 將通過計算注釋中已有的任何現有評論參考來確定新評論參考的評論編號。該函式還將計算插入注釋參考時選擇的字符數,以便稍后其他函式可以定位注釋參考并選擇相關字符。該函式在插入點添加一個評論表情符號 (??),后跟評論參考號,然后是 ` 字符,然后是添加評論參考時選擇的字符數,以終止評論表情符號結尾。該函式回傳添加的注釋參考塊的字串。
Public Function fAddComment() As String
'this is used to add a new comment reference to the currently showing note
'it returns "" if there is no note
'it returns the string of the comment reference added to the note if a comment reference is successfully added
Dim strBubble As String 'the comment bubble emoji string
strBubble = ChrW(55357) & ChrW(56492) 'the comment bubble emoji
Dim strProgNote As String
Dim intMaxComment As Integer 'this is the maximum comment number found
Dim intSelStart As Integer 'this is the starting location of the selection in the note at the time the comment was initially added
Dim intSelLength As Integer 'this is the selection length in the note at the time the comment was initially added
Dim whr As Integer 'this locates the next comment emoji and the emoji after it
Dim intFoundValue As Integer 'this is the value of the found comment number
Dim strNew As String 'the new string that holds the comment number and length
Dim strSelectedText As String 'the text that is selected
Dim intPosBeforeInsert As Integer 'the position of the insertion point prior to inserting the new comment reference
'first, get the text of the progress note
strProgNote = PlainText(Forms!frmAppt.subNoteForm.Form.Controls("tbxNote"))
If Len(strProgNote) = 0 Then 'there's no note, so don't try to find comments
fAddComment = ""
Exit Function
End If
'get the selection length at the time the comment was initially added
Forms!frmAppt.SetFocus 'set the focus to the main form
Forms!frmAppt.subNoteForm.SetFocus 'set the focus to the subform so we can get the length of the text selected in the textbox on the subform
Forms!frmAppt.subNoteForm.Form.Controls("tbxNote").SetFocus 'set focus on the control which is required to get the SelLength property
intSelStart = Forms!frmAppt.subNoteForm.Form.Controls("tbxNote").SelStart
intSelLength = Forms!frmAppt.subNoteForm.Form.Controls("tbxNote").SelLength
strSelectedText = PlainText(Forms!frmAppt.subNoteForm.Form.Controls("tbxNote").SelText)
'now, find each comment emoji string and get the value
intMaxComment = 0 'default to no comments
whr = 1
Do Until whr = 0
whr = InStr(whr, strProgNote, strBubble)
If whr > 0 Then 'found a comment, check the number
intFoundValue = Val(Mid(strProgNote, whr 2)) 'the comment emoji consists of 2 characters, not just 1 character
If intFoundValue > intMaxComment Then intMaxComment = intFoundValue 'the new value is greater so make it the highest value now
whr = InStr(whr 2, strProgNote, strBubble) 2
End If
Loop
'return the next comment number and the length of the selected string in the note
strNew = strBubble & Trim(str(intMaxComment 1)) & "`" & Trim(str(intSelLength)) & strBubble
'insert the new comment reference into the note
intPosBeforeInsert = Forms!frmAppt.subNoteForm.Form.Controls("tbxNote").SelStart
Forms!frmAppt.subNoteForm.Form.Controls("tbxNote").SelLength = 0 'collapse selection
Forms!frmAppt.subNoteForm.Form.Controls("tbxNote").SelText = strNew 'insert the new comment text
'move the insertion point back to the original location and after the comment reference we just added
Forms!frmAppt.subNoteForm.Form.Controls("tbxNote").SelStart = intPosBeforeInsert Len(strNew)
fAddComment = strNew 'return the comment string we just added to the note
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/411703.html
標籤:
上一篇:回圈通過一個數字遞增的變數
下一篇:SVG影片虛線邊框路徑,如進度條
