› Sviluppare funzionalita su Microsoft Office con VBA › Ricerca dati su foglio esterno e copia solo nuove righe
-
AutoreArticoli
-
Ciao
Excel 2016
Ho da un po' il problema che segue: Errore di run-time '1004' Metodo 'Range' dell'oggetto '_worksheet' non riuscito
In sostanza si tratta di una coppia di fogli che uso da un anno circa.
Nel primo: file origine D:\OneDrive\HHI tec2\letture hhi 2 - Cloud.xlsm eseguo letture dei vari contatori tramite smartphone o altro. Al momento sono alla riga 950
Nel secondo file: 22042 Letture Man + plc.xlsm esegui importazione dei dati e poi una serie di elaborazioni/calcoli/report. Al momento sono alla riga 1288.
L'esecuzione del codice mi si pianta alla prima riga
If intRiga_O_Inizio = 0 Or shtOrigine.Range("K" & intRiga_O_Fine) = vbNullString ThenApplication.ScreenUpdating = Truemsgbox "Non ci sono nuovi dati da importare", vbInformationExit SubEnd IfCome avrete capito non sono super esperto.
Grazie a chiunque mi potrà spiegare come mai ora si presenta il problema.
Allegati:
You must be logged in to view attached files.Secondo me l'istruzione cosi' com'e' scritta non va bene, la cella K0 non esiste.
Io la scriverei cosi':
If intRiga_O_Inizio = 0 Then Application.ScreenUpdating = True msgbox "Non ci sono nuovi dati da importare", vbInformation Exit Sub else if shtOrigine.Range("K" & intRiga_O_Fine) = vbNullString then Application.ScreenUpdating = True msgbox "Non ci sono nuovi dati da importare", vbInformation Exit Sub End IfCiao
Grazie del suggerimento ma non funziona.
Mi si interrompe con lo stesso errore alla riga "If shtOrigine.Range("K" & intRiga_O_Fine) = vbNullString Then"
If intRiga_O_Inizio = 0 ThenApplication.ScreenUpdating = Truemsgbox "Non ci sono nuovi dati da importare", vbInformationExit SubElseIf shtOrigine.Range("K" & intRiga_O_Fine) = vbNullString ThenApplication.ScreenUpdating = Truemsgbox "Non ci sono nuovi dati da importare", vbInformationExit SubEnd IfEnd IfSimulando il tuo scenario in quanto non posso adoperare il tuo file per mancanza di riferimenti, anche io con excel 2016, l'errore me lo da soltanto quando la variabile intRiga_O_Inizio o Fine e' = 0.
Prova con questa modifica:
If intRiga_O_Inizio = 0 or intRiga_O_Fine = 0 Then Application.ScreenUpdating = True msgbox "Non ci sono nuovi dati da importare", vbInformation Exit Sub else if shtOrigine.Range("K" & intRiga_O_Fine) = vbNullString then Application.ScreenUpdating = True msgbox "Non ci sono nuovi dati da importare", vbInformation Exit Sub End IfHo scoperto il problema.
Il mio codice funzionava, ma il problema era che il file origine era più corto del file destino, o meglio le righe del file origine erano un numero inferiore alle righe del file destino = la riga di partenza era superiore alla attuale e si incasinava.
Mi resta da capire come evitare questo ma ci lavorerò.
In sostanza il codice seguente non mi accodava i nuovi dati.
'********************************** ' COPIA DEI DATI '********************************** 'Inizia il ciclo leggi-scrivi k = 0 With rngO For i = intRiga_O_Inizio To intRiga_O_Fine k = k + 1 For j = 0 To intNumeroCampiDaCopiare - 1 If shtOrigine.Range(arrO(j) & i).Value <> vbNullString Then Set rngD = shtDestinazione.Range(arrD(j) & intRiga_D_Inizio + k) rngD.Value = shtOrigine.Range(arrO(j) & i).Value rngD.Font.ColorIndex = 1 End If Next jSarebbe bello capire perchè mi si fermasse qui (prima della parte di codice relativo alla copia fisica dei dati)
If intRiga_O_Inizio = 0 Or shtOrigine.Range("K" & intRiga_O_Fine) = vbNullString Then Application.ScreenUpdating = True msgbox "Non ci sono nuovi dati da importare", vbInformation Exit Sub End If '********************************** ' COPIA DEI DATI '********************************** 'Inizia il ciclo leggi-scrivi -
AutoreArticoli
