Errore 1004 - Add Type

di il
3 risposte

Errore 1004 - Add Type

Buongiorno a tutti,
dopo aver "scroccato" parecchia conoscenza dai post di questo sito mi trovo costretto a doverne aggiungere uno per un problema che ho visto essere abbastanza diffuso su Internet...
Premetto che non ho alcuna conoscenza di VBA ma nel corso degli ultimi mesi ho potuto fare una certa esperienza (specialmente grazie ai post riportati su questo sito) e sono arrivato al punto di dover creare un file excel, copiando i dati da un Access, che abbia parte dei campi formattati con la convalida dati (quindi selezione da un menu a tendina).
Prima di descrivere il problema, inquadro un attimo la situazione:
1. il codice che ho scritto, eseguito da una macro in Access, genera un file excel per ogni "Tecnico" presente all'interno di un tabella Access
2. ogni file excel si compone dei seguenti fogli (creati in automatico):
- foglio 1: contiene i dati grezzi. In alcune colonne sono presenti dei dati a cui va applicata la convalida dati. Ogni colonna da convalidare ha il suo preciso set di dati (diversi per ciascuna colonna)
- foglio 2..7: ogni foglio contiene nella prima colonna gli attributi da utilizzare per convalidare i dati delle colonne del foglio 1. La numerosità degli attributi è variabile (massimo 5/6) e sono tutti testo
3. ho scritto una macro che su click permette di esportare, con un ciclo, tutti questi file excel. Mi sono però impantanato (e non credo di essere l'unico a quanto si vede sul web) sull'impostazione della formattazione dei dati da convalidare (quelli con menù a tendina)...

Questo è il pezzo di codice che utilizzo per convalidare i dati delle colonne:

Dim oBook As Object
Dim oSheet As Object   'questo  è il primo foglio che contiene i dati grezzi da convalidare
Dim oSheetIrr As Object  ' questo è il secondo foglio che contiene il primo set di attributi, da applicare alla colonna I del primo foglio
Dim oRange As Object
Dim path As String   ' path contiene il percorso da dove prendere il file excel, parametrico in base al nome del "tecnico"
Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Open(path)
Set oSheet = oBook.Worksheets(1)
Set oSheetIrr = oBook.Worksheets(2)
Dim arr As Variant
arr = Array(oSheetIrr.Range("A2:A6"))  'questo array contiene i valori degli attributi da applicare sulla colonna I
Set oRange = oSheet.Range("I2:I10")
    With oRange.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=Join(arr, ",")
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
  oBook.Save
  oExcel.Quit

Il problema è il seguente:
1) se nell'istruzione ADD TYPE, nella formula, mette il riferimento al foglio contenente gli attributi mi viene restituito l'errore 1004 (che, investigando, non sono riuscito a risolvere in nessuna maniera proposta dal web)
2) ho trovato un utente su internet che propone di utilizzare un array (come nell'esempio), per definire nella formula di ADD TYPE i valori che può assumere. Ora utilizzando questo stratagemma mi viene restituito l'errore 13: "tipo non corrispondente", con riferimento alla riga dell'istruzione ADD TYPE


Vi chiedo, se esiste una soluzione a tutto ciò, di spiegarmela dettagliatamente in modo che possa implementarla senza rompervi ulteriormente le scatole.
Aggiungo che quanto ho creato fin ora è stato dettato da ragioni di tempistiche brevi, sicuramente esisteranno metodi più "economici" dal punto di vista di tempo e spazio utilizzati per modellizzare questa situazione ma al momento mi accontento di quello che ho e vorrei solo risolvere questo problema.
Probabilmente l'errore sta nel fatto che non ho ancora una conoscenza basica del VBA e mi sto perdendo qualcosa, ma sbagliando s'impara non è vero?

Grazie mille a tutti coloro che tenteranno di aiutarmi
Saluti

3 Risposte

  • Re: Errore 1004 - Add Type

    Dr Gonzo ha scritto:


    ...
    3. ho scritto una macro che su click permette di esportare, con un ciclo, tutti questi file excel.
    Macro, brutta parola! VBA? Bello!

    Dr Gonzo ha scritto:


    ...Il problema è il seguente:
    1) se nell'istruzione ADD TYPE, nella formula, mette il riferimento al foglio contenente gli attributi mi viene restituito l'errore 1004 (che, investigando, non sono riuscito a risolvere in nessuna maniera proposta dal web)
    Spiagazione del motivo dell'errore:

    Dr Gonzo ha scritto:


    ...
    2) ho trovato un utente su internet che propone di utilizzare un array (come nell'esempio), per definire nella formula di ADD TYPE i valori che può assumere. Ora utilizzando questo stratagemma mi viene restituito l'errore 13: "tipo non corrispondente", con riferimento alla riga dell'istruzione ADD TYPE
    Usi gli oggetti di Excel con il latebinding ma poi in quella riga scrivi costanti del modello ad oggetti di Excel che ti costringe ad avere il riferimento alla relativa libreria. Usa tutto in latebinding con i relativi valori.

    Dr Gonzo ha scritto:


    ...di spiegarmela dettagliatamente in modo che possa implementarla senza rompervi ulteriormente le scatole.
    ... da ragioni di tempistiche brevi, ... mi accontento di quello che ho e vorrei solo risolvere questo problema.
    Su questo sarà difficile "accontentarti" perché scritto così è contrario al regolamento.
  • Re: Errore 1004 - Add Type

    Philcattivocarattere ha scritto:


    Dr Gonzo ha scritto:


    ...
    Ciao Phil ti ringrazio per la risposta molto veloce, tuttavia non sono riuscito a cogliere la soluzione da te proposta...
    Se ho capito bene nell'articolo si parla di dati copiati in Excel (2003) come intere righe...Premesso che l'operazione di "copiaggio" va a buon fine (l'ho provata separatamente), non capisco come la soluzione (se si può chiamare così) proposta da Microsoft possa aiutarmi in questo caso. Anche perchè nel mio caso l'intervallo di attributi da selezionare è ben definito.
    Potresti essere più preciso?

    E per quanto riguarda il latebinding, potresti dirmi come trasformare l'istruzione dell'array in un oggetto? Ti ripeto che purtroppo non so niente di VBA..

    Grazie ancora per l'aiuto
  • Re: Errore 1004 - Add Type

    Dr Gonzo ha scritto:


    ...non capisco come la soluzione (se si può chiamare così) proposta da Microsoft possa aiutarmi in questo caso. Anche perchè nel mio caso l'intervallo di attributi da selezionare è ben definito.
    Potresti essere più preciso?
    Non ne ho la minima idea, mai usato Access per creare un file xls in quel modo! Cercando un po' di più sul web forse sono arrivato alle stesse pagine che avevi trovato tu (sarebbe utile riportarle), una in particolare:
    Use of Add Type and Formula1 in Data Validation VBA: Error 1004. Forse questa richiesta andrebbe postata in una sezione specifica per Excel e non di Access perché, da quanto ho capito, ha poco a che fare con Access di suo ma è specifico di Excel, anche se il tutto lo stai eseguendo da Access.
    E per quanto riguarda il latebinding, potresti dirmi come trasformare l'istruzione dell'array in un oggetto? Ti ripeto che purtroppo non so niente di VBA..
    Non è detto che sia tutto lì.
    xlValidateList, xlValidAlertStop e xlBetween
    sono tutte costanti del modello ad oggetti di Excel. Sostituisci a quelle "parole" il relativo valore. Per trovarlo digita ogni singola costante nella finestra immediata preceduta da un ? e premi invio.
    A questo punto puoi togliere dai Riferimenti la libreria di Excel (ammesso che non ci siano altri punti del codice in cui ne fai uso)
Devi accedere o registrarti per scrivere nel forum
3 risposte