Excel VBA-在userform多行文本框中双击word

Excel VBA-在userform多行文本框中双击word,vba,excel,textbox,userform,Vba,Excel,Textbox,Userform,任务:我的目标是双击用户表单中的多行文本框提取突出显示的单词 已用属性:通过文本框属性.SelStart和.SelLength突出显示给定的字符串位置绝对没有问题,但反过来就不那么容易了:用户DblClick突出显示整个单词字符串,但是Excel不会在突出显示的文本的起始位置重置.SelStart值,正如我们可以假设的那样,.SelStart值保留在用户双击的位置 我的问题:是否有可能直接捕获应用程序设置的突出显示的文本起始位置 我的变通方法:我将演示一个非常简单的变通方法,只需检查以下内容和前

任务:我的目标是双击
用户表单中的多行
文本框
提取突出显示的单词

已用属性:通过
文本框
属性
.SelStart和
.SelLength
突出显示给定的字符串位置绝对没有问题,但反过来就不那么容易了:用户
DblClick
突出显示整个单词字符串,但是Excel不会在突出显示的文本的起始位置重置
.SelStart
值,正如我们可以假设的那样,
.SelStart
值保留在用户双击的位置

我的问题:是否有可能直接捕获应用程序设置的突出显示的文本起始位置

我的变通方法:我将演示一个非常简单的变通方法,只需检查以下内容和前面的内容,例如从右到左到实际点击位置的20个字母(当然,也可以使用regex并细化示例代码):


我认为这是一个时间问题。如果将一个标志变量和MouseUp事件与DblClick事件结合使用,则该方法似乎有效:

Private bCheck As Boolean

Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    bCheck = True
End Sub

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If bCheck Then
        bCheck = False
        MsgBox Me.TextBox1.SelStart & "; " & Me.TextBox1.SelLength
    End If
End Sub

您需要修复您的声明…必须为每个变量分配一个类型,否则默认情况下它将是一个变量。(即sTxt不是字符串,我不是整数)在For循环之前,无需将变量设置为For循环的开头。我感谢您的评论,但我认为我的Dim sTxt作为字符串,Dim i作为第2行和第3行的长度就足够了。在这些代码行之后我应该做什么?
Dim sTxt as String
是正确的,但这不是您所拥有的
Dim-sText,sSel-as-String
将sSel声明为字符串,将sText声明为变体。有关更多信息,请参阅。谢谢,我确实学到了一些东西。你好,这正是我想要的-谢谢。另外:要从多行文本框中提取突出显示的双击单词,请使用:
Trim(Mid(Replace(Me.TextBox1.Text,vbLf)”),Me.TextBox1.SelStart+1,Me.TextBox1.SelLength))
Option Explicit
Private bCheck As Boolean

' [1] assign True to boolean variable
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    bCheck = True       ' set marker to True
End Sub

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If bCheck Then
        bCheck = False  ' reset marker to False
      ' [2][3] extract the highlighted doubleclicked word from multi-line textbox 
        MsgBox Trim(Mid(Replace(Me.TextBox1.Text, vbLf, ""), Me.TextBox1.SelStart + 1, Me.TextBox1.SelLength))
    End If
End Sub
Private bCheck As Boolean

Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    bCheck = True
End Sub

Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If bCheck Then
        bCheck = False
        MsgBox Me.TextBox1.SelStart & "; " & Me.TextBox1.SelLength
    End If
End Sub