Я работаю с действительно сложными данными. Из-за этого я написал эту действительно приятную функцию для печати данных в области отладки - окно imediate, которое вы можете получить с помощью Ctrl + G на VBA, внутри Excel. Мне нужна аналогичная функция для печати этих общих данных (содержащих номера, строки, словари и массивы) на листе.Легкий универсальный печатный словарь для Excel с использованием VBA
'call using: Call PrintDict(data)
' Where data can be a number, a string, a dictionary or an Array,
' with any of these inside.
Sub PrintDict(ByVal dicttoprint As Variant, Optional indent As Integer = 0, Optional wasdict As Boolean = False)
Dim i As Long
Dim j As Long
Dim indentStr As String
indentStr = ""
i = 0
Do While i < indent
indentStr = indentStr + " "
i = i + 1
Loop
Dim key
If (TypeName(dicttoprint) = "Dictionary") Then
If (wasdict = True) Then
Debug.Print vbNewLine;
End If
For Each key In dicttoprint.Keys:
Debug.Print indentStr & key & " ";
Call PrintDict(dicttoprint.Item(key), indent + 2, True)
Next
ElseIf (TypeName(dicttoprint) = "Variant()") Then
If (wasdict = True) Then
Debug.Print vbNewLine;
End If
For j = LBound(dicttoprint) To UBound(dicttoprint)
Call PrintDict(dicttoprint(j), indent + 2)
Next j
Else
Debug.Print indentStr & dicttoprint & " "
End If
End Sub
Edit1: Хорошо, думал о том, у меня есть идея, но не может решить некоторые угловые случаи ...
Пример ожидается выход ниже:
key1:____|__________|__________|__________|_________|
_________|key1.1:___|_numvalue_|__________|_________|
_________|__________|_numvalue_|__________|_________|
_________|__________|_arr1Indx1|_numvalue_|_________|
_________|__________|_arr1Indx2|_numvalue_|_________|
_________|__________|_arr1Indx3|_numvalue_|_________|
_________|key1.2:___|_numvalue_|__________|_________|
_________|__________|_numvalue_|__________|_________|
key2:____|_numvalue_|__________|__________|_________|
key3:____|__________|__________|__________|_________|
_________|_arr2Indx1|keyA.1:___|_numvalue_|_________|
_________|__________|keyA.2:___|_strvalue_|_________|
_________|_arr2Indx2|_numvalue_|__________|_________|
Ok, Думаю, теперь этот результат решает некоторые угловые случаи. Любые идеи о том, как его реализовать?
Я думаю, что функция может передавать параметры X, Y, которые являются необязательными и возвращать последний Y. При работе с текстом курсор естественно опускается, я не знаю, как это сделать через рекурсию на листе.
Edit 2:
Ok, это псевдокод идея - это почти VBA, но я не знаю, как сделать эту работу ...
Function PrintToWS(ByVal data As Variant, _
Optional rowi As Integer = 0, _
Optional coli As Integer = 0) As Integer
If (TypeName(data) = "Dictionary") Then
For Each key In data.Keys:
Cells(rowi, coli).Value = key
coli = coli + PrintToWS(data.Item(key), rowi+1, coli)
Next
ElseIf (TypeName(data) = "Variant()") Then
For j = LBound(data) To UBound(data)
coli = coli + PrintToWS(data(j), rowi+1, coli)
Next j
Else
Cells(rowi, coli).Value = data
coli = coli + 1
End If
PrintToWS = coli
End Function
Это часть проблемы, я не привык работать с рабочими листами, я понятия не имею, какой результат будет лучше. – Elric
Прохладный, я разделяю код, получаю downvote, WTFH? – Elric
Я проигнорировал, потому что неясно, какой результат вы искали. Поскольку вы теперь поделились, я удалил DV. – Chrismas007