Discussione chiusa
Visualizzazione dei risultati da 1 a 8 su 8

CreateObject con associazione anticipata a CommonDialog, non funziona

  1. #1
    L'avatar di spikexx84
    spikexx84 non  in linea Scribacchino
    Ciao a tutti

    Mi sono scontrato con un problema che non riesco a comprendere molto bene, ed questo: Io ho un un modulo di classe in cui per motivi vari devo poter disporre di una CommonDialog, allora ho fatto cos

       Dim obj As Object
       Set obj = CreateObject("MSComDlg.CommonDialog")
       obj.ShowOpen
    
    Ma, visto che obj nel mio caso non un oggetto qualsiasi, ma una CommonDialog volevo dichiarare il tipo in maniera corretta cos

       Dim obj As MSComDlg.CommonDialog
       Set obj = CreateObject("MSComDlg.CommonDialog")
       obj.ShowOpen
    
    Purtroppo per cos facendo alla CreateObject ricevo questo errore:
    Errore di run-time 13 tipo non corrispondente.

    Ho guardato su MSDN e ho letto che possibile utilizzare la CreateObject in questo modo: esempio preso da MSDN:

    Quote Originariamente inviato da MSDN;
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet As Excel.WorkSheet
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Add
    Set xlSheet = xlBook.Worksheets(1)
    Per MSDN dice anche

    Quote Originariamente inviato da MSDN;
    Quando si fa riferimento a un oggetto tramite una variabile che supporta l'associazione anticipata si ottengono prestazioni migliori, ma possibile impostare solo un riferimento alla classe specificata nelladichiarazione.
    Ora quello che io mi domando :

    Sono io che sbaglio qualcosa nello scrivere il codice?
    La CommonDialog non supporta l'associazione anticipata?
    C' qualche altro motivo che mi sfugge?

    Grazie anticipatamente a chiunque abbia tempo voglia e capacit per rispondermi

  2. #2
    Se scrivi

    Dim obj As MSComDlg.CommonDialog

    il compilatore deve sapere cosa e' MSComDlg.CommonDialog e lo sa solamente se inserisci un riferimento a tale ocx.
    ℹ️ Leggi di pi su AntonioG ...

  3. #3
    L'avatar di spikexx84
    spikexx84 non  in linea Scribacchino
    Hai ragione mi sono dimenticato di scriverlo ma ovviamente ho inserito il Componente Microsoft CommonDialogControl 6.0 ed ho deselezionato Rimuovi informazioni sui controlli ActiveX non utilizzati dalle propriet di progetto.
    Oltretutto se si f una prova in una form, al posto che in un modulo di classe e si scrive

    Dim obj As MSComDlg.CommonDialog
    Set obj = Controls.Add("MSComDlg.CommonDialog", "obj")
    obj.ShowOpen
    
    Tutto funziona alla perfezione, peccato che ovviamente in un modulo di classe dove a me serve utilizzare la CommonDialog un p difficile accedere alla Collection Controls (non che non ci abbia provato ma VB non sembra molto contento...)

    A meno che

    Quote Originariamente inviato da AntonioGiuliana Visualizza il messaggio
    il compilatore deve sapere cosa e' MSComDlg.CommonDialog e lo sa solamente se inserisci un riferimento a tale ocx.
    con riferimento tu intenda qualcosa di diverso da Progetto->Componenti->comdlg32.ocx, io ho cercato di metterlo anche nei riferimenti ma vb non sembra essere molto daccordo... sbagliando si impara no

    Grazie mille comunque della risposta

  4. #4
    Non

    Progetto->Componenti->comdlg32.ocx

    ma

    Progetto->Riferimenti>comdlg32.ocx
    ℹ️ Leggi di pi su AntonioG ...

  5. #5
    L'avatar di spikexx84
    spikexx84 non  in linea Scribacchino
    PERFETTO, problema risolto.

    Ci avevo provato anchio, ma visto che di default la finistra dei riferimenti non visualizza gli ocx avevo tentato di inserire cmdial32.dll e Vb mi rispondeva picche

    Invece cos funziona tutto alla perfezione, grazie mille ancora

  6. #6
    BrunoG non  in linea Novello
    Forse non ho capito, ma cosi facendo tutto funge:

    In un form:

    Option Explicit
    Dim x As Object
    Private Sub Form_Load()
    Dim obj As Object
    Set obj = CreateObject("MSComDlg.CommonDialog")
    obj.ShowOpen
    Set x = New Class1
    'codice:
    'Dim obj1 As MSComDlg.CommonDialog '<== errore se manca il riferimento al componente
    'Set obj1 = CreateObject("MSComDlg.CommonDialog")
    'obj1.ShowOpen
    End Sub

    Nel Modulo di classe:

    Option Explicit
    Dim obj As Object
    Private Sub Class_Initialize()
    Set obj = CreateObject("MSComDlg.CommonDialog")
    obj.ShowOpen 'Ma, visto che obj nel mio caso non un oggetto qualsiasi, ma una CommonDialog volevo dichiarare il tipo in maniera corretta cos
    End Sub
    Private Sub Class_Terminate()
    Set obj = Nothing
    End Sub

    Comunque la discussione e' vecchia, ma tanto per cominciare (nuovo iscritto).
    ciao

  7. #7
    Comunque la discussione e' vecchia, ma tanto per cominciare (nuovo iscritto).
    E ti andata bene che i partecipanti di questa discussione sono tutt'ora presenti e partecipanti al forum e leggeranno sicuramente, ma di norma meglio non riesumare discussioni troppo vecchie

  8. #8
    Quote Originariamente inviato da BrunoG Visualizza il messaggio
    tanto per cominciare
    Ed hai iniziato male.

    Se sei un nuovo iscritto non devi, per forza, inviare un messaggio rispondendo ad un thread vecchio (e concluso).

    Mi raccomando, da ora in poi, rispondi solamente a thread attivi.

    Questo viene chiuso.
    ℹ️ Leggi di pi su AntonioG ...

Discussione chiusa

Potrebbero interessarti anche ...

  1. [VB2010] - Uscita Sub Anticipata
    Da Jozzato nel forum Visual Basic .Net
    Risposte: 3
    Ultimo Post: 28-07-2014, 01:35
  2. Gestione Excel con createobject
    Da ludwig72 nel forum Visual Basic 6
    Risposte: 3
    Ultimo Post: 01-01-2010, 11:52
  3. [VB6] CreateObject() e nome classe
    Da IceCube_MD nel forum Visual Basic 6
    Risposte: 9
    Ultimo Post: 20-08-2007, 02:04
  4. CreateObject
    Da jackmoros nel forum Visual Basic .Net
    Risposte: 0
    Ultimo Post: 21-06-2006, 12:18
  5. [ASP]CreateObject e Stringa dell'interfaccia non valida
    Da daniele-puma nel forum ASP 3, ASP .Net
    Risposte: 4
    Ultimo Post: 14-06-2006, 23:32