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

目前我有一个用户定义的函数,它运行几个涉及matrix生成的例程。 要检查这些matrix已经正确生成,我想把它们放在工作表上。 用户定义的函数工作正常,我已经添加到下面的地方,我想找出数组中的内容:

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命令放在那里,以检查子被调用正确,它是工作,这是。 而且,它返回了我请求的特定位置的值,并且还说明了我正在查看的特定matrix的大小,所以数据似乎正在被正确读取 – 问题是随后从新的子文件中写入。

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

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

总结:

因为我正在使用一个用户定义的函数input工作表中的一个单元格,我不能将数据导出到任何地方,但该单元格。 但是,我可以在即时窗口中查看数组。

在MS Excel 2010中,可以在VBA编辑器(Alt + F11)中find立即窗口,然后点击查看 – >即时窗口(Ctrl + G)。

将我的数组导出到即时窗口我应该在我想要查看的数组之后将其input到我的代码中:

 Call WriteArrayToImmediateWindow(MyArray) 

“MyArray”是我的数组的名称,不pipe是什么。

然后这将调用“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: 如何在VBA中立即窗口中打印二维数组?

编辑:

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

要将数组导出到文本文件,您应该在要查看的数组之后将其input到代码中:

 Call WriteToFile(MyArray) 

其中“MyArray”又是您要查看的数组的名称。 WriteToFilemacros如下所示:

 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中快速查看输出数组,我不build议将下面的macros指定给一个button:

 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 

希望这对别人也有用!