Risultati da 1 a 6 di 6

Discussione: Importazione dati da web



  1. #1

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    63
    Messaggi
    4871
    Versione Office
    2007 - 2013
    Utile ricevuti
    537
    Utile dati
    93

    Importazione dati da web

    Ciao a tutti.

    Premetto che non mi sono mai cimentato con il VBA nell'importazione di dati da web.

    Per rispondere ad un quesito posto su altro forum ho voluto (per curiosità ed approfondimento personale) cimentarmi.

    In pratica si tratta di importare da questo sito

    http://www.otia.ch/albo/Dettaglio_is...m?IDSocio=1731

    dati anagrafici e metterli su un foglio Excel e questo va fatto per varie pagine (quello che cambia è il numero finale della URL.

    Ho registrato (e poi lievemente modificato introducendo un ciclo For Each) la seguente macro

    Codice: 
    Sub Macro2()
    Dim ur As Long
    Dim cel As Range
    Dim rng As Range
    Set rng = Worksheets("Foglio2").Range("a1:a10")
    For Each cel In rng
    ur = Worksheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
        With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;http://www.otia.ch/albo/Dettaglio_iscritto.cfm?IDSocio=" & cel.Value, Destination _
            :=Worksheets("Foglio1").Range("a" & ur + 3))
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .WebSelectionType = xlAllTables
            .WebFormatting = xlWebFormattingNone
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = False
            .WebDisableRedirections = False
            .Refresh BackgroundQuery:=False
        End With
        Range("a1").Select
    Next cel
    End Sub
    Il problema è che, nonostante abbia indicato come destinazione la colonna A e quindi (essendo le tabelle da importare composte da due colonne, mi aspettavo di ritrovarmi poi con due colonne compilate la A e la B.

    Ma non succede così: i dati vengono incollati sparpagliati su varie colonne.

    Posso pensare che la cosa possa dipendere da "particolarità" non visibili della struttura delle tabelle html ma è solo un'ipotesi.

    Vorrei avere qualche consiglio su come procedere eventualmente modificando la macro ma non saprei come.

    Allego il file
    File Allegati File Allegati
    Alfredo

    "Non esistono cose facili o difficili; esistono cose che si sanno e cose che non si sanno"

    "Solo due cose sono infinite: l'universo e la stupidità umana; riguardo l'universo ho ancora dei dubbi" (Albert Einstein)

  2. #2

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    980
    Versione Office
    .
    Utile ricevuti
    322
    Utile dati
    0

    Re: Importazione dati da web

    Ciao,
    Citazione Originariamente Scritto da alfrimpa Visualizza Messaggio
    Il problema è che, nonostante abbia indicato come destinazione la colonna A e quindi (essendo le tabelle da importare composte da due colonne, mi aspettavo di ritrovarmi poi con due colonne compilate la A e la B.
    forse non ti sei accorto che, per ogni query, le righe compilate nella colonna B sono di più di quelle della colonna A, quindi ur devi calcolarla sulla colonna B (ur = ws.Cells(Rows.Count, 2).End(xlUp).Row)

    Poi secpndo me non è il caso di aggiungere una querytable per ogni pagina, meglio riciclare sempre la prima.
    Nel codice sotto do per scontato che non ci siano query già presenti a parte eventualmente quella nostra (che viene comunque eliminata):

    Codice: 
    Sub daWeb()
      Dim ur As Long
      Dim cel As Range
      Dim rng As Range
      Dim ws As Worksheet
      Dim oQueryTable As QueryTable
      
      Set rng = Worksheets("Foglio2").Range("a1:a10")
      Set ws = Worksheets("Foglio1")
    
      If ws.QueryTables.Count > 0 Then
        ws.QueryTables(1).Delete
      End If
      For Each cel In rng
        ur = ws.Cells(Rows.Count, 2).End(xlUp).Row
        Set oQueryTable = ws.QueryTables.Add(Connection:="URL;http://www.otia.ch/albo/Dettaglio_iscritto.cfm?IDSocio=" & cel.Value, Destination:=ws.Range("A" & ur + 3))
        With oQueryTable
          .Refresh BackgroundQuery:=False
          .PreserveFormatting = True
          .AdjustColumnWidth = False
          .Delete
        End With
        
      Next cel
      ws.Range("A:B").Columns.AutoFit
      Set ws = Nothing
      Set rng = Nothing
      Set oQueryTable = Nothing
    End Sub
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  3. #3

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    980
    Versione Office
    .
    Utile ricevuti
    322
    Utile dati
    0

    Re: Importazione dati da web

    errata-corrige (non che sia fondamentale):
    Codice: 
        With oQueryTable
          .PreserveFormatting = True
          .AdjustColumnWidth = False
          .Refresh BackgroundQuery:=False
          .Delete
        End With
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  4. #4

    L'avatar di alfrimpa
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Napoli
    Età
    63
    Messaggi
    4871
    Versione Office
    2007 - 2013
    Utile ricevuti
    537
    Utile dati
    93

    Re: Importazione dati da web

    Ciao Marco

    La prima macro è perfetta: con la correzione successiva invece dà Errore di run-time 1004 Impossibile eseguire l'operazione. Aggiormamento dei dati in esecuzione in background.
    Alfredo

    "Non esistono cose facili o difficili; esistono cose che si sanno e cose che non si sanno"

    "Solo due cose sono infinite: l'universo e la stupidità umana; riguardo l'universo ho ancora dei dubbi" (Albert Einstein)

  5. #5

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    980
    Versione Office
    .
    Utile ricevuti
    322
    Utile dati
    0

    Re: Importazione dati da web

    Mi spiace Alfredo, ma la seguente macro funziona perfettamente (Excel 2010 sia su XP che su W7), del resto le istruzioni
    Codice: 
          .PreserveFormatting = True
          .AdjustColumnWidth = False
          .Refresh BackgroundQuery:=False
    sono eseguite prima di avviare la query (che oltretutto non viene eseguita in background visto che l'istruzione è esplicitamente indicato BackgroundQuery:=False).


    Codice: 
    Sub daWeb()
      Dim ur As Long
      Dim cel As Range
      Dim rng As Range
      Dim ws As Worksheet
      Dim oQueryTable As QueryTable
      
      Set rng = Worksheets("Foglio2").Range("a1:a10")
      Set ws = Worksheets("Foglio1")
    
      If ws.QueryTables.Count > 0 Then
        ws.QueryTables(1).Delete
      End If
      For Each cel In rng
        Application.StatusBar = "sto importando i dati dell'ID " & cel.Value
        ur = ws.Cells(Rows.Count, 2).End(xlUp).Row
        Set oQueryTable = ws.QueryTables.Add(Connection:="URL;http://www.otia.ch/albo/Dettaglio_iscritto.cfm?IDSocio=" & cel.Value, Destination:=ws.Range("A" & ur + 3))
        With oQueryTable
          .PreserveFormatting = True
          .AdjustColumnWidth = False
          .Refresh BackgroundQuery:=False
          .Delete
        End With
        
      Next cel
      Application.StatusBar = False
      ws.Range("A:B").Columns.AutoFit
      Set ws = Nothing
      Set rng = Nothing
      Set oQueryTable = Nothing
      MsgBox "Finito!"
    End Sub
    Prova ad incollare il codice in un file nuovo (nel tuo ci potrebbero essere le querytable precedenti), se non va, secondo me, dovresti reinstallare Office, perché hai problemi con quasi tutti i codici che ti vengono proposti .....
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  6. I seguenti utenti hanno dato un "Like"


  7. #6
    L'avatar di patel
    Clicca e Apri
    Data Registrazione
    Mar 2016
    Località
    Livorno
    Età
    72
    Messaggi
    934
    Versione Office
    2010
    Utile ricevuti
    128
    Utile dati
    1

    Re: Importazione dati da web

    ammettiamo di doverne fare migliaia di queste importazioni, è possibile fare in modo che il loop attenda il completamento dell'importazione prima di effettuare il ciclo seguente ?

Discussioni Simili

  1. [Risolto] Problema importazione dati web
    Di FedeRichi nel forum Domande su Excel VBA e MACRO
    Risposte: 12
    Ultimo Messaggio: 03/05/17, 12:03
  2. Importazione dati da web (da più link)
    Di cocci nel forum Domande su Excel VBA e MACRO
    Risposte: 43
    Ultimo Messaggio: 18/07/16, 16:09
  3. Importazione dati da web con immagini
    Di ginKa nel forum Domande su Excel in generale
    Risposte: 0
    Ultimo Messaggio: 03/06/16, 12:15
  4. Importazione dati con condizione
    Di G.Bove nel forum Domande su Excel VBA e MACRO
    Risposte: 34
    Ultimo Messaggio: 09/05/16, 18:48
  5. Importazione dati
    Di Andrea_Ra nel forum Domande su Excel VBA e MACRO
    Risposte: 47
    Ultimo Messaggio: 05/11/15, 17:23

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •