Newsgroup: it.comp.appl.access
Titolo: Come conoscere TIPO oggetto dal suo nome?

Ho una listbox riempita col nome di form, report, moduli, ecc..
Cliccando su una riga della listbox vorrei visualizzare il contenuto 
dell'oggetto, il codice della form, del modulo, ecc..
Per la visualizzazione pensavo di esportare il contenuto dell'oggetto 
via SaveAsText e poi caricarlo al volo in una textbox
Sulla SaveAsText bisogna pero' dare il tipo di oggetto che si sta salvando
La domanda e': come fare (senza ciclare fra tutti gli oggetti presenti 
nel file mdb) per riconoscere il tipo di oggetto avendo solamente il suo 
nome?
Ciao e grazie
 
 
 

La ListBox con cosa la Popoli...?
Immagino con una Tabella... aggiungi un campo ObjectType
 
Ti basta ciclare le Varie Collection, come vedi in questi esempi, e riempire la Tabella anche con il Type:
http://www.consultdmw.com/access-VBA-list-objects.html
 
 
Fai attenzione che il SaveAsText esporta TUTTO il codice dell'oggetto anche quello per la Formattazione ed i controlli entrocontenuti.
Se vuoi esportare solo il Modulo puoi usare una cosa simile:
 
Public Sub ExportFormModule(ByVal strFormName As String, _
                           ByVal strTargetDir As String)
 
    Dim lngFile As Long
    lngFile = FreeFile()
    Open strTargetDir & "\" & strFormName & ".bas" For Append As lngFile
 
    DoCmd.OpenForm strFormName, acDesign
 
    With Forms(strFormName).Module
        Print #lngFile, .Lines(1, .CountOfLines)
    End With
 
    DoCmd.Close acForm, strFormName
    Close lngFile
 
End Sub
 
Ciao
@Alex


La popolo col nome dell'oggetto
No, non scrivo in tabella, aggiungo direttamente sulla listbox
Ho parzialmente risolto aggiungendo in lista un prefisso+nome_oggetto
Il prefisso mi permette di distinguere tra i vari tipi di oggetti
Il problema contingente non c'e' in realta', ma visto che mi era 
capitato il problema e non sono riuscito a risolverlo in modo elegante 
ho pensato di chiedere, sperando esistesse una qualche istruzione simile 
alla 'Typeof Is' anche per questa evenienza
Molto interessante invece l'apertura form in acDesign e la lettura delle 
righe Forms(nome_form).Module.Lines non conoscevo
Ciao


Allora definisci la ListBox con più colonne... la popoli con ADDITEM dividendo i valori di Colonna con [;] e passando il Type in una Colonna magari Nascosta.
 
Ad esempio io uso questoin caso debba assegnare un Oggetto in EarlyBinding:
 
    Private WithEvents mF  As Access.Form
    Private WithEvents mR  As Access.Report    
 
    ActFrmRptType = Application.CurrentObjectType
 
    If ActFrmRptType = acForm Then
        Set mf=Application.CodeContextObject
    ElseIf ActFrmRptType = acReport Then
        Set mR=Application.CodeContextObject
    End If
 
Ovviamente se fosse LateBinding non servirebbe... ma non potrei ereditare gli Eventi...
 
Per il resto vedi tu...
 
@Alex

 Ciao e grazie
 
Poiché i nomi degli oggetti sono unici solo nell'ambito di ciascun
ObjectType (Table, Form, Report, etc), Access non ha alcuna funzione
che ne deduca il tipo.
 
Prova così:
========================================
Private Sub Command1_Click()
Dim SQL As String, OT(1 To 8, 1 To 2)
Dim i As Integer, RS As Recordset
 
OT(1, 1) = 1:       OT(1, 2) = "Local Table"
OT(2, 1) = 4:       OT(2, 2) = "ODBC Linked Table"
OT(3, 1) = 6:       OT(3, 2) = "Linked Table"
OT(4, 1) = 5:       OT(4, 2) = "Query"
OT(5, 1) = -32768:  OT(5, 2) = "Form"
OT(6, 1) = -32764:  OT(6, 2) = "Report"
OT(7, 1) = -32766:  OT(7, 2) = "Macro"
OT(8, 1) = -32761:  OT(8, 2) = "Module"
 
For i = 1 To 8
 SQL = "SELECT MsysObjects.Name, MsysObjects.Type FROM MsysObjects "
 SQL = SQL & "WHERE MsysObjects.Name Not Like '~' And MsysObjects.Name 
"
 SQL = SQL & "Not Like 'MSys*' AND MsysObjects.Type=" & OT(i, 1)
 
    Set RS = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
    Do Until RS.EOF
        If RS![Name] = "bc" Then
            MsgBox OT(i, 2)
            Exit Sub
        End If
        RS.MoveNext
    Loop
Next
 
End Sub
=====================================
 
Bruno


Si, credo il problema posto non sia risolvibile
Nel senso che potrei avere una form dal nome pippo ed una query dal nome 
pippo, bastava pensare a questo per capire che non sia possibile dal 
nome oggetto capire di cosa stiamo parlando (senza ciclare dentro ad 
ogni categoria di oggetti)