Sviluppare funzionalita su Microsoft Office con VBA Ricerca dati su foglio esterno e copia solo nuove righe

Login Registrati
Stai vedendo 5 articoli - dal 1 a 5 (di 5 totali)
  • Autore
    Articoli
  • #31679 Score: 0 | Risposta

    danros
    Partecipante

      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 Then
      Application.ScreenUpdating = True
      msgbox "Non ci sono nuovi dati da importare", vbInformation
      Exit Sub
      End If

      Come 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.
      #31682 Score: 0 | Risposta

      Aldo Ercolini
      Partecipante
        19 pts

        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 If
        #31683 Score: 0 | Risposta

        danros
        Partecipante

          Ciao

          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 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 If
          End If

          #31684 Score: 0 | Risposta

          Aldo Ercolini
          Partecipante
            19 pts

            Simulando 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 If
            #31691 Score: 0 | Risposta

            danros
            Partecipante

              Ho 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 j
              

              Sarebbe 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
                  
              

               

            Login Registrati
            Stai vedendo 5 articoli - dal 1 a 5 (di 5 totali)
            Rispondi a: Ricerca dati su foglio esterno e copia solo nuove righe
            Gli allegati sono permessi solo ad utenti REGISTRATI
            Le tue informazioni: