Buongiorno a tutti.
Tempo fa, con l'aiuto dell'amico Sandro Peruz ho completato la sottoriportata routineche mi permette di importare, in modo massivo, nel database, tutti i dati riportati nei vari file di Word ( che ho utilizzato come modulo per prenotazione al soggiorno estivo).
Mi ritrovo a ricevere i seguenti messaggi di errore (con il codice in blocco alla riga in giallo in una delle immagini allegate) quando in uno o più file di Word non sono compilati alcuni campi obbligatori e presenti anche nel DB.
Quello che desidero con il vostro aiuto è di poter essere avvisato ( con un MsgBox o altro metodo ) e conoscere quali campi sono vuoti e a che file di Word si riferiscono.
Ora cosi come è impostato il tutto devo risalire io, ed individuare manualmente sia i campi non compilati e il file di word interessato.
Si tenga conto che i file di word che ricevo sono migliaia e che una situazione del genere mi costringe ad un lungo e complicato lavoro manuale.
Spero di essere stato chiaro, sono qui per spiegare ulteriori dettagli e fornire chiarimenti.
Ciao Nicola.
al



il codice è questo:
Private Sub cmdImportWord_Click()
If Not isWordRunnning Then Exit Sub
On Error GoTo errHandler
Dim aFiles() As String
Dim f As String
Dim i As Long
Dim strSql As String
Dim j As Long
Dim lngParent As Long
f = cmdFileDialog()
If Len(f) = 0 Then
VBA.MsgBox "Nessun file selezionato!", vbCritical, "ESCO DALLA PROCEDURA"
Exit Sub
End If
Me.txtStarTime = Now()
aFiles = Split(f, ";")
For i = 0 To UBound(aFiles)
Set doc = AppWord.Documents.Open(aFiles(i))
With doc
strSql = "insert into tblFruitori (Cognome,Nome,Grado,Matricola,Nato,Il,Comando, Telefono, Cellulare, AltroTelefono, Posizione,ASGI, Mesi, ASTC, Mesi_1, Animali, Reddito, Luogo, Data, Firma) " & _
"values ('" & _
myReplace(.FormFields("txtCognome").result) & "','" & myReplace(.FormFields("txtNome").result) & "','" & .FormFields("txtGrado").result & "','" & _
.FormFields("txtMatricola").result & "','" & myReplace(.FormFields("txtNato").result) & "','" & .FormFields("txtIl").result & "','" & _
myReplace(.FormFields("txtComando").result) & "','" & .FormFields("txtTelefono").result & "','" & _
.FormFields("txtCellulare").result & "','" & .FormFields("txtAltroTelefono").result & "','" & _
.FormFields("txtPosizione").result & "','" & .FormFields("txtASGI").result & "','" & .FormFields("txtMesi").result & "','" & _
.FormFields("txtASTC").result & "','" & .FormFields("txtMesi1").result & "','" & .FormFields("txtAnimali").result & "','" & _
.FormFields("txtReddito").result & "','" & .FormFields("txtLuogo").result & "','" & .FormFields("txtdata").result & "','" & .FormFields("txtFirma").result & "')"
DBEngine(0)(0).Execute strSql, &H80
lngParent = DMax("ID_Fruitore", "tblFruitori")
Me.txtFile = doc.Name
Me.txtIndex = "indice array:" & i + 1
Me.txtIndex1 = i + 1
DBEngine.BeginTrans
For j = 1 To 6
If Len(.FormFields("txtCognome" & j).result) > 0 Then
strSql = "insert into tblFamiliari (ID_Parent,Cognome, LuogoNascita, Datanascita, RelazioneParentela, FiglioMinore, PostoLetto) values (" & _
lngParent & ",'" & myReplace(.FormFields("txtCognome" & j).result) & "','" & _
myReplace(.FormFields("txtLuogoNascita" & j).result) & "','" & .FormFields("txtDataNascita" & j).result & "', '" & _
.FormFields("txtRelazParentela" & j).result & "','" & _
.FormFields("txtFiglioMinore" & j).result & "','" & .FormFields("txtPostoLetto" & j).result & "')"
DBEngine(0)(0).Execute strSql, &H80
If j < 4 Then ' condiziona l'inserimento dei turni nei hai solo 3 non 6
strSql = "insert into tblTurno (ID_Parent,Turno,Categoria) values (" & _
lngParent & ",'" & myReplace(.FormFields("txtTurno" & j).result) & "','" & _
myReplace(.FormFields("txtCategoria" & j).result) & "')"
DBEngine(0)(0).Execute strSql, &H80
End If
If j < 5 Then ' condiziona l'inserimento degli anni precedente nei hai solo 5 non 6
strSql = "insert into tblAnniPrecedenti (ID_Parent,PrecedenteUtilizzo, Dal,Al) values (" & _
lngParent & ",'" & myReplace(.FormFields("txtPrecUtilizzo" & j).result) & "','" & _
myReplace(.FormFields("txtDal" & j).result) & "','" & _
myReplace(.FormFields("txtAl" & j).result) & "')"
DBEngine(0)(0).Execute strSql, &H80
End If
End If
Next
DBEngine.CommitTrans 1
End With
doc.Close
Next
Me.txtEndtime = Now()
'Me.Refresh <---- perchè ?
Me.Requery
With Me.RecordsetClone
.MoveLast
Me.Bookmark = .Bookmark
End With
Me.Dirty = False
'VBA.MsgBox "Importazione dati completata. " & GetTickCount() - lngStart & " millisecondi", vbInformation, "WORD IMPORT"
'doc.Close
Set doc = Nothing
AppWord.Quit
Set AppWord = Nothing
ExitHere:
Exit Sub
errHandler:
DBEngine.Rollback
With Err
MsgBox "ERR#" & .Number _
& vbNewLine & .Description _
, vbOKOnly Or vbCritical
End With
Resume ExitHere
End Sub