Λοιπόν, χρησιμοποίησα το κόλπο που πρότεινες με το 'Record Macro'. Πραγματικά είναι πάρα πολύ χρήσιμο στην προκειμένη περίπτωση. Συγχαρητήρια ! Αν λοιπόν, κάποιος φτιάξει ένα Excel αρχείο και αρχίσιε να προσθέτει controls, προκύπτει ότι ισχύει το εξής:
1. Αν επιλέξει από το Toolbar 'Forms', τότε το το Record Macro μας δίνει τα arrays που μας ενδιαφέρουν όπως στο παράδειγμά σου (DropDowns κτλ.)
2. Αν όμως επιλέξει από το Toolbar 'Control ToolBox', τότε το το Record Macro μας δίνει:
Sub Macro1()
'
' Macro1 Macro
' Macro recorded 22/10/2007 by user
'
ActiveSheet.OLEObjects.Add(ClassType:="Forms.TextBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=277.5, Top:=125.25, Width:=132, Height:= _
18).Select
ActiveSheet.OLEObjects.Add(ClassType:="MSCAL.Calendar.7", Link:=False, _
DisplayAsIcon:=False, Left:=285, Top:=168, Width:=255.75, Height:= _
157.5).Select
ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _
DisplayAsIcon:=False, Left:=120, Top:=72.75, Width:=108.75, Height:= _
15.75).Select
End Sub
Τι κάνουμε σε αυτήν την περίπτωση; Προσπάθησα να κινηθώ ανάλογα με την περίπτωση 1:
Dim i As Integer
For i = 1 To xlSht.OLEObjects.count
MsgBox(xlSht.OLEObjects(i).Name)
Next
Τα ονόματα τα παίρνω. Το value όμως που με ενδιαφέρει......και μόλις τώρα το βρήκα !!!!!
Dim i As Integer
For i = 1 To xlSht.OLEObjects.count
MsgBox(xlSht.OLEObjects(i).object.Value)
Next
Δε χρησιμοποιούσα το .object και μετά έμπλεκε το πράγμα, έψαχνα να κάνω casting.... Ψάχνωντας πάντως ανακάλυψα πως για να βρεις το πραγματικό Type ενός System.__ComObject χρησιμοποιείς το εξής (όπου xlSht.OLEObjects(i) το System.__ComObject):
MsgBox(Microsoft.VisualBasic.Information.TypeName(xlSht.OLEObjects(i).object))
Το ανέφερα γιατί μπορεί να χρησιμέυσει σε κάποιον άλλον αναγνώστη.
Ευχαριστώ manosB πάρα πολύ. Η πατέντα με το Macro έλυσε στην ουσία το πρόβλημα !