Страницы: 1
RSS
Программно перебрать и распечатать в Debug.Print все свойства объёкта ChartObject
 
Вопрос в теме
 
а смысл? проще в watch window все посмотреть
 
Могу продолжить цитатой:  
Зачем учить географию - извозчик всюду довезёт...  
Зачем учить таблицу умножения - есть калькуляторы...  
Зачем...другими словами: разводить флуд если не можешь ответить
 
Нашёл. Кому интересно:  
Private Sub ListProps(comServer As Object)  
Dim IFaceInfo As TLI.InterfaceInfo  
Dim mem As TLI.MemberInfo  
Set IFaceInfo = TLI.InterfaceInfoFromObject(comServer)  
On Error Resume Next  
 For Each mem In IFaceInfo.Members  
   If mem.InvokeKind = INVOKE_PROPERTYGET Then  
     Debug.Print "Property " & mem.Name & " = " & _  
TLI.InvokeHook(comServer, mem.MemberId, INVOKE_PROPERTYGET)  
   End If  
 Next  
End Sub  
В референсах подкключить TLBINF32.DLL  
Пример работы:  
Set SH = ActiveSheet.ChartObjects.Add(100, 50, 200, 200)  
SH.Activate  
Application.Dialogs(xlDialogChartType).Show  
ListProps SH  
Debug.Print  
'Application.Dialogs(xlDialogChartOptionsDataLabelMultiple).Show ' формат подписей данных  
 
'Application.Dialogs(xlDialogChartOptionsDataTable).Show ' параметры таблиц данных  
Set s = ActiveChart.Legend  
ActiveChart.Legend.Select  
Application.Dialogs(xlDialogFormatLegend).Show 'формат легенды  
ListProps s  
Debug.Print  
ListProps ActiveChart.Legend.Format.Fill
 
Хорошо, что нашли, только зачем в двух темах размещать вопрос?
 
Сорри. Случайно получилось: на другом форуме дали ссылку конкретно в тему, а я не досмотрел, что это форум, на котором я открывал новую тему.  
Теперь не могу придумать как закрутить рекурсию таким образом как с FSO при просмотре всех вложенных подкаталогов.  
 
ListProps ActiveChart  
ListProps ActiveChart.Legend  
ListProps ActiveChart.Legend.Format  
ListProps ActiveChart.Legend.Format.Fill    
 
задавая в такой последовательности объекты я получаю свойства каждого.  
Как бы закрутить так, что если попадается не свойство, а объект, то рекурсивно вызывалась опять процедура. Что бы программно перебрать все свойства во всех подуровнях
 
{quote}{login=}{date=20.06.2012 01:55}{thema=}{post}а смысл? проще в watch window все посмотреть{/post}{/quote}  
вот как раз проще взять и рекурсией все вложенные объекты/сва-ва собрать и вывести их туда, куда нужно  
 
\пример с массивом массивов  
 
p.s.: как-то сложно получилось...  
 
Sub io()  
   Dim arr() As Variant  
   Dim col As Collection  
     
   arr = Array(1, _  
             Array(2, _  
                 Array(3, _  
                     Array(4) _  
                 ) _  
             ) _  
         )  
 
   Set col = ForIn(arr)  
   Stop  
End Sub  
 
 
Function ForIn(ByRef arr As Variant) As Collection  
   Dim elem As Variant  
   Static depth As Integer  
   Static col As New Collection  
     
   For Each elem In arr  
       If IsArray(elem) Then  
           depth = depth + 1  
           ForIn (elem)  
       Else  
           col.Add elem  
       End If  
   Next  
     
   depth = depth - 1  
     
   If depth = -1 Then  
       Set ForIn = col  
       Set col = Nothing  
       depth = 0  
   Else  
       Exit Function  
   End If  
End Function
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
\чуть проще  
 
Sub io()  
   Dim arr() As Variant  
   Dim col As New Collection  
     
   arr = Array(1, _  
             Array(2, _  
                 Array(3, _  
                     Array(4) _  
                 ) _  
             ) _  
         )  
 
   Call ForIn(arr, col)  
   Stop  
End Sub  
 
 
Sub ForIn(ByRef arr As Variant, ByRef col As Collection)  
   Dim elem As Variant  
     
   For Each elem In arr  
       If IsArray(elem) Then  
           Call ForIn(elem, col)  
           Exit Sub  
       Else  
           col.Add elem  
       End If  
   Next  
End Sub  
 
\оформил здесь  http://www.excelworld.ru/forum/2-1891-1#20837  
 
10017
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
nerv, спасибо за попытку помочь, но дело в том, что с рекурсией я знаком, но мне нужна не отвлечённая рекурсисия массива массивов, а именно как закрутить и вызвать процедуру с передачей ей нового параметра. Т.е    
ListProps ActiveChart выберет свойства ActiveChart  
Но потом перебрать все объёкты. Например ActiveChart.Legend и выбрать его свойства.  
А  глубже есть объект ActiveChart.Legend.Format.Fill надо выбрать и его свойства.  
И ещё может быть до 10 слоёв точек (а может и не быть)
 
Alex77755, если IsObject() копать глубже.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Я в этом направлении и пытаюсь, но пока не могу понять где получить объект, а не свойство.  
Dim IFaceInfo As TLI.InterfaceInfo  
Dim mem As TLI.MemberInfo  
В IFaceInfo его искать или в mem
Страницы: 1
Наверх