我正在尝试拆分多行文本框并使用VBA将输出粘贴到MS Excel中的下一张工作表上,我在下面找到了一段代码并且它可以工作:
Dim Str As String, a
Dim cnt As Integer
Dim w()
Str = xmlRequestTextBox.Value
a = Chr(10)
cnt = UBound(Split(Str, a))
MsgBox (Str)
MsgBox (a)
MsgBox (cnt)
ReDim w(1 To cnt + 1, 1 To 1)
For i = 0 To cnt
w(i + 1, 1) = Split(Str, Chr(10))(i)
Next i
Sheet2.range("A1").Resize(i, 1) = w
Sheet2.Cells.Replace Chr(13), " "
现在我的问题是当我尝试修改它并将其更改为单维数组时,它只输出数组的第一个索引的值。为什么阵列必须是多维的?先谢谢你。
答案 0 :(得分:0)
对于多行文本,您需要使用Split()
函数返回的2d数组,其中第一个维度通常是指行(行),第二个索引是指这些行中的单个词。希望这可能有所帮助。
答案 1 :(得分:0)
使用拆分
的示例Option Explicit
Private Sub CommandButton1_Click()
Dim Str As String
Dim cnt As Integer
Dim w As Variant
Str = Me.xmlRequestTextBox.Value
w = Split(Str, Chr(10))
cnt = UBound(w)
MsgBox (Str)
MsgBox (Chr(10))
MsgBox (cnt)
' suppose the multi-line textbox value is:
' first line : 1 2 3
' second line: 4 5 6
' third line: 7 8 9
With ThisWorkbook.Sheets("split")
.Range("A1").Resize(cnt + 1) = w(1) ' writes "4 5 6" in A1:A3 (i.e. the 2nd element of w)
.Range("B1").Resize(cnt + 1) = Split(w(0), " ")(2) ' writes "3" in B1:B3 (i.e. the third element of the 1st element of w)
.Cells.Replace Chr(13), " "
End With
End Sub
我认为有一些UserForm有一个名为“xmlRequestTextBox”的多行文本框和一个名为“CommandButton1”的按钮,其click事件启动了你的那段代码
答案 2 :(得分:0)
要回答您的问题,数组不必须是多维的。但是,Excel假定一维数组将水平,即在单行中填充列。因此,如果您在电子表格中写入垂直范围(单列 >),它将采用第一个元素(列)并将其写入列中的每个单元格。例如,假设您有一个这样的数组:
MyArray = Array(1, 2, 3, 4, 5)
此代码会将MyArray的第一个元素写入 A列中的垂直范围:
Set MyRange = Range("A1").Resize(5, 1) ' Cells A1:A5
MyRange.Value = MyArray
结果:
A | B | C | D | E
+---+---+---+---+---+
1 | 1 | | | | |
2 | 1 | | | | |
3 | 1 | | | | |
4 | 1 | | | | |
5 | 1 | | | | |
如果您将数组写入单行中的水平范围,那么它将显示整个数组:
Set MyRange = Range("A1").Resize(1, 5) ' Cells A1:E1
MyRange.Value = MyArray
结果:
A | B | C | D | E
+---+---+---+---+---+
1 | 1 | 2 | 3 | 4 | 5 |
2 | | | | | |
3 | | | | | |
4 | | | | | |
5 | | | | | |
但是,我假设您确实希望将数组写入单列中的 vertical 范围。您可以通过在阵列上使用 Application.WorksheetFunction。 Transpose 方法来完成此操作。这会将数组的每个元素写入A列中的行:
Set MyRange = Range("A1").Resize(5, 1) ' Cells A1:A5
MyRange.Value = Application.Transpose(MyArray)
结果:
A | B | C | D | E
+---+---+---+---+---+
1 | 1 | | | | |
2 | 2 | | | | |
3 | 3 | | | | |
4 | 4 | | | | |
5 | 5 | | | | |
有关此内容的更多信息,请参阅VBA Arrays And Worksheet Ranges
上的Chip Pearson页面