gpt4 book ai didi

arrays - VBA函数调用VBA sub将数组打印到工作表

转载 作者:行者123 更新时间:2023-12-02 11:53:12 25 4
gpt4 key购买 nike

目前我有一个用户定义的函数,它运行多个涉及矩阵生成的例程。为了检查这些矩阵是否已正确生成,我想将它们放在工作表上。用户定义的函数工作正常,我已将以下内容添加到其中我想要找出数组中内容的位置:

Call CheckArray(TestArray)

上面的“TestArray”根据我想要查看的数组而有所不同。

“CheckArray”子例程如下:

Sub CheckArray(MyArray As Variant)
MatrixRows = UBound(MyArray, 1)
MatrixCols = UBound(MyArray, 2)

MsgBox MyArray(11, 2)
MsgBox "Matrix size = " & MatrixRows & " rows x " & MatrixCols & " columns"

ActiveWorkbook.Worksheets("Check array").[A1].Resize(MatrixRows, MatrixCols) = MyArray
End Sub

请注意,我在其中放置了两个 MsgBox 命令来检查子程序是否被正确调用以及它是否正在工作,确实如此。此外,它返回了我请求的特定位置的值,并且还说明了我正在查看的特定矩阵的大小,因此数据似乎确实被正确读取 - 问题在于随后从新子中写入该数据。

当我包含最后一行时,它不会将我的数组打印到工作表中,并且还会阻止用户定义的函数正常工作。有谁知道为什么这不起作用?

用户定义的函数是否可以调用打印到工作表的子函数?有办法解决这个问题吗?

最佳答案

总结一下:

由于我使用的是在工作表的单元格中输入的用户定义函数,因此我无法将数据导出到该单元格之外的任何位置。但是,我可以在立即窗口中查看数组。

在 MS Excel 2010 中,可以在 VBA 编辑器 (Alt+F11) 中找到立即窗口,然后单击“查看”->“立即窗口”(Ctrl+G)。

要将我的数组导出到立即窗口,我应该在我要查看的数组之后将其输入代码中:

Call WriteArrayToImmediateWindow(MyArray)

其中“MyArray”是我的数组的名称,无论它是什么。

然后,这将调用“WriteArrayToImmediateWindow”子函数,即:

Sub WriteArrayToImmediateWindow(arrSubA As Variant)

Dim rowString As String
Dim iSubA As Long
Dim jSubA As Long

rowString = ""

Debug.Print
Debug.Print "The array is: "
For iSubA = 1 To UBound(arrSubA, 1)
rowString = arrSubA(iSubA, 1)
For jSubA = 2 To UBound(arrSubA, 2)
rowString = rowString & "," & arrSubA(iSubA, jSubA)
Next jSubA
Debug.Print rowString
Next iSubA

End Sub

上述内容归功于 User3706920:How to print two dimensional array in Immediate window in VBA?

编辑:

我认为在立即窗口中查看数组并不总是有用,我需要在 Excel 中查看以逗号分隔的数据。如果您想执行相同的操作,请按照以下说明操作:

要将数组导出到文本文件,您应该在代码中在要查看的数组后面输入以下内容:

Call WriteToFile(MyArray)

其中“MyArray”也是您要查看的数组的名称。 'WriteToFile 宏如下:

Sub WriteToFile(arrSubA As Variant)
'To export array to a text file
'Setup
Dim FSO As Object
Dim ofs As Object
Dim Output As Variant
Dim rowString As String
Dim iSubA As Long
Dim jSubA As Long
rowString = ""

'Create file
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim oFile As Object
Set oFile = FSO.CreateTextFile("C:\Users\" & Environ$("username") & "\Desktop\Array.txt")
oFile.Close
For iSubA = 1 To UBound(arrSubA, 1)
rowString = arrSubA(iSubA, 1)
For jSubA = 2 To UBound(arrSubA, 2)
rowString = rowString & "," & arrSubA(iSubA, jSubA)
Next jSubA
If Len(Dir("C:\Users\" & Environ$("username") & "\Desktop\Array.txt")) > 0 Then
Set ofs = FSO.OpenTextFile("C:\Users\" & Environ$("username") & "\Desktop\Array.txt", 8, True)
End If
ofs.WriteLine rowString
ofs.Close
Next iSubA
End Sub

要在 Excel 中快速查看不带任何逗号的输出数组,我建议将以下宏分配给按钮:

Sub OpenArrayFile()
'To open array text file in Excel
Workbooks.OpenText Filename:="C:\Users\" & Environ$("username") & "\Desktop\Array.txt", Origin:= _
xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=True _
, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
End Sub

希望这对其他人也有用!

关于arrays - VBA函数调用VBA sub将数组打印到工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35750416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com