[VBA] check su nomi campi di xls esterno

di il
3 risposte

[VBA] check su nomi campi di xls esterno

Ciao a tutti,
spero mi possiate aiutare a risolvere questo. Ho provato diversi sistemi, ma troppo incasinati e a forza di girarci intorno mi sono incasinato...

Ho un'applicazione in Access che uso per incrociare dei dati.
Per farlo, importo delle tabelle xls che mi vengono fornite di volta in volta, ma spesso accade che chi me le fornisce sbagli ed ometta dei campi, oppure che nomini dei campi in modo leggermente differente dal solito.
L'aiuto di cui avrei bisogno sarebbe sapere come fare (e se è possibile) interrogare questa tabella xls prima di importare, e verificare che sia il numero ed i nomi dei campi corrispondano a quelli che mi aspetto.

Il codice che uso attualmente è questo:

Public Function impTable()
Dim f As Object
    Dim strFile As String
    Dim strFolder As String
    Dim varItem As Variant


    Set f = Application.FileDialog(3)
    f.AllowMultiSelect = False
    If f.Show Then
        For Each varItem In f.SelectedItems
            strFile = Dir(varItem)
            strFolder = Left(varItem, Len(varItem) - Len(strFile))
            
DoCmd.DeleteObject acTable, "CompareTable1"
' Import data from Excel using a static range
DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12, "CompareTable1", strFolder & strFile, True, "A1:Z1"
checkTable
Next
End If
    Set f = Nothing
End Function


Public Function checkTable()
Dim db As DAO.Database
Dim tbl1 As DAO.TableDef
Dim tbl2 As DAO.TableDef
Dim intLoop As Integer
Dim strMessage As String
  
  Set db = CurrentDb
  Set tbl1 = db.TableDefs("Table1")
  Set tbl2 = db.TableDefs("CompareTable1")
    
  If tbl1.Fields.Count = tbl2.Fields.Count Then
  MsgBox "ok"
   
  Else
    strMessage = tbl1.Name & " has " & tbl1.Fields.Count & " fields, while " & _
      tbl2.Name & " has " & tbl2.Fields.Count & " fields." & vbCrLf
  End If
  
  
  If tbl1.Fields.Count > tbl2.Fields.Count Then
  action1
  End If
  
  If tbl1.Fields.Count < tbl2.Fields.Count Then
  action2
  End If
  
  If tbl1.Fields.Count = tbl2.Fields.Count Then
  action3
      End If
  
  
  Set tbl2 = Nothing
  Set tbl1 = Nothing
  Set db = Nothing
End Function
In questo modo importo una tabella xls esterna e faccio la comparazione dei suoi campi con la mia Table1 (che è quella che contiene i campi giusti).
Quello che devo ottenere è una funzione che mi dica se la tabella xls esterna è identica alla mia Table1 come struttura (nome e numero di campi).
A seconda del risultato eseguo un'azione.
Credo sia un metodo piuttosto macchinoso e mi obbliga ad importare la tabella, mentre io vorrei qualcosa di piu snello che mi consenta di controllare i campi da fuori senza importare. In pratica prima di importare devo accedere al file Excel, leggere le intestazioni e confrontarle con le mie.
E' possibile?
Grazie

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte