我在工作表中嵌入了一个 ActiveX 多行 TextBox1。它包含一些值(以换行符/回车符分隔),我试图将它们放入多个单元格中(在本例中为 A1:A5,但具体需要多少取决于用户在 TextBox1 中输入的行数),但到目前为止,我只能将它们放入一个单元格中(在本例中为 A1)。我尝试在 TextBox1 的属性中将 LinkedCell 设置为多个范围,但这不起作用。
What I've got: TextBox1
|
A
------------------------------
1 a |a |
b |b |
c |c |
d |d |
e |e |
------------------------------
------------------------------------------------------------------
What I'm trying to get:
TextBox1
|
A
-------------------------------
1 a |a |
2 b |b |
3 c |c |
4 d |d |
5 e |e |
--------------------------------
-----------------------------------------------------------
有没有办法将 TextBox1 中以换行符/回车符分隔的值/字符串输出到多个单元格?谢谢!
这是我最近尝试过的宏:
Sub TextBoxToRow()
Dim Arr As Variant
Arr = Split(ActiveSheet.TextBox1.Text, vbLf)
Range("B2").Resize(, UBound(Arr) + 1) = Arr
End Sub
其中值是从文本框中获取的,并使用回车符作为分隔符。但是不行
我认为问题在于当我将字符串输入文本框时宏可能根本没有启动(这就是我说“不行”的意思......只是什么都没有发生)。
答案1
这里的关键是使用文本框的更改事件,因此无论何时更改任何内容,宏都会运行。
插入它的最简单方法是转到包含文本框的工作表的代码模块,打开左上角的下拉菜单并选择文本框的名称,它会自动插入更改事件的子项。
我还需要稍微修改一下你的代码才能工作:
Private Sub TextBox1_Change()
Dim Arr As Variant
Dim i As Long
Dim Target As Range
Arr = Split(ActiveSheet.TextBox1.Text, vbLf)
Set Target = Range("B2")
For i = LBound(Arr) To UBound(Arr)
Target.Value = Arr(i)
Set Target = Target.Offset(1, 0)
Next i
End Sub
如果您不希望每次更改都反映出来,只要您离开文本框,那么您可以使用 LostFocus 事件而不是 Change。