检索工作表中文本框的第二行

时间:2016-06-02 09:14:35

标签: excel vba

逗人, 我正在尝试检索工作表中文本框的第二行,

例如:

米卡拉尔夫
23.05

我想复制名称并在宏的其他部分使用它 文本框是使用插入文本框创建的 名称是TextBox 17 非常感谢你的帮助,

2 个答案:

答案 0 :(得分:1)

使用Split将文本框的所有行都放入数组中:

Dim lines() As String

'Split lines of the textbox into array and remove line breaks
lines = Split(Replace(Me.txtTest.Value, Chr(13), ""), Chr(10))

'print line 2
Debug.Print lines(1)

或者如果你真的需要第二行:

Debug.Print Split(Replace(Me.txtTest.Value, Chr(13), ""), Chr(10))(1)

在这里,您可以直接访问Split函数的第二个元素(类似于数组)

Me.txtTest替换为文本框的名称。

答案 1 :(得分:1)

您的TextBox是ActiveX控件还是Form控件:

从它的名字(" TextBox 17"里面有空格)我说它是一个Form控件

无论如何这里是两种可能性的代码

表单控件的解决方案

Function GetStringFromTextBox_Form(textBoxName As String, strngPos As Integer) As String    
    With ActiveSheet.Shapes(textBoxName).TextFrame.Characters
       GetStringFromTextBox_Form = Split(.Text, "")(strngPos - 1)
    End With    
End Function

使用如下

Sub main()
    Dim name As String        

    name = GetStringFromTextBox_Form("TextBox 17", 2) '<~~ use this if your TextBox is a Form Control        
    MsgBox name
End Sub

ActiveX控件解决方案

Function GetStringFromTextBox_ActiveX(textBoxName As String, strngPos As Integer) As String
    With ActiveSheet.OLEObjects(textBoxName).Object
        GetStringFromTextBox_ActiveX = Split(.Text, vbCrLf)(strngPos - 1)
    End With
End Function

使用如下

Sub main()
    Dim name As String

    name = GetStringFromTextBox_ActiveX("TextBox17", 2) '<~~ use this if your TextBox is an Active X Control        
    MsgBox name
End Sub