+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Macro excel non funziona correttamente

  1. #1
    dudaddy non è in linea Novello
    Post
    3

    Exclamation Macro excel non funziona correttamente

    Ciao a tutti
    sono nuovo del forum e sono un neofita del VBA e delle macro.
    Avrei bisogno del vostro aiuto per la seguente macro:


    codice:
    Sub AggiornaDati()
    '
    ' AggiornaDati Macro
    '
    
    '
    Dim SITO As String
    Dim lRiga As Long
    SITO = [LINK!A2]
    With Worksheets("CARTE")
         lRiga = .Range("A2").End(xlDown).Row
    End With
    For lng = 2 To lRiga
    With Worksheets("LINK")
        SITO = .Range("A" & lRiga).Value
    End With
    If Not IsEmpty(Range("CARTE!A" & lRiga).Value) Then
        With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;" & SITO, _
            Destination:=Range("CARTE!E2"))
            .Name = "import_prezzi"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = True
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .WebSelectionType = xlSpecifiedTables
            .WebFormatting = xlWebFormattingNone
            .WebTables = "2"
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = False
            .WebDisableRedirections = False
            .Refresh BackgroundQuery:=False
        End With
        Range("F3").Select
        Selection.Copy
        Range("C" & lRiga).Select
        ActiveSheet.Paste
        Range("G7").Select
        Application.CutCopyMode = False
        ActiveCell.FormulaR1C1 = ""
        Range("E2:F6").Select
        Selection.QueryTable.Delete
        Selection.ClearContents
        Range("E2").Select
        Columns("C:C").Select
        Selection.NumberFormat = "$ #,##0.00"
    Else
    End If
    Next
        Range("Tabella1[[#Headers],[EDIZIONE]]").Select
    End Sub



    Il mio problema è che non esamina correttamente le celle:

    TABELLA PRESENTE SUL FOGLIO "CARTE"

    A----------B-------C-----D
    EDIZIONE CARTA MKM RITIRO
    Zendikar Scalding Tarn
    Zendikar Lotus Cobra
    Ice Age Brainstorm
    Alpha Black Lotus € 18.800,00 € 15.040,00


    TABELLA PRESENTE SUL FOGLIO "LINK"

    A
    LINK
    https://it.magiccardmarket.eu/Produc.../Scalding+Tarn
    https://it.magiccardmarket.eu/Produc...ar/Lotus+Cobra
    https://it.magiccardmarket.eu/Produc...Age/Brainstorm
    https://it.magiccardmarket.eu/Produc...ha/Black+Lotus


    praticamente la macro dovrebbe controllare le cella della colonna A (partendo dalla cella A2) e fare: la cella A2 è vuota ? NO, allora vado sul foglio LINK prendo il link presente nella cella A2 ed eseguo questo pezzo di codice:

    codice:
    With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;" & SITO, _
            Destination:=Range("CARTE!E2"))
            .Name = "import_prezzi"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = True
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .WebSelectionType = xlSpecifiedTables
            .WebFormatting = xlWebFormattingNone
            .WebTables = "2"
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = False
            .WebDisableRedirections = False
            .Refresh BackgroundQuery:=False
        End With
        Range("F3").Select
        Selection.Copy
        Range("C" & lRiga).Select
        ActiveSheet.Paste
        Range("G7").Select
        Application.CutCopyMode = False
        ActiveCell.FormulaR1C1 = ""
        Range("E2:F6").Select
        Selection.QueryTable.Delete
        Selection.ClearContents
        Range("E2").Select
        Columns("C:C").Select
        Selection.NumberFormat = "$ #,##0.00"


    una volta finito questo pezzo di codice deve passare alla cella sotto, quindi: la cella A3 è vuota ? NO, allora vado sul foglio LINK prendo il link presente nella cella A3 ed eseguo il pezzo di codice precedente.

    e cosi avanti per tutte le celle fino alla PRIMA CELLA VUOTA della colonna A, a quel punto deve concludersi la macro.


    NOTA: il campo di destinazione del valore ottenuto è anche lui da incrementare: per la cella A2, il risultato finale sarà nella cella C2...per la cella A3 nella cella C3... ecc ecc



    Il mio problema è che il risultato finale mi viene riportato solo per l'ultima "riga" (vedi esempio tabella sopra), ma durante l'esecuzione sembra proprio che elabori SOLO l'ultima "riga" valorizzata ignorando le precedenti.


    Spero di essere stato chiaro e spero riusciate ad aiutarmi nel mio intento così velocizzereste il mio lavoro di venditore
    Grazie in anticipo a tutti,

    Daniele
    Ultima modifica di AntonioG; 27-05-2016 13:03  Motivo: Il codice tra tag CODE

  2. #2
    dudaddy non è in linea Novello
    Post
    3

    Grazie

    Grazie ad AntonioG per la modifica

  3. #3
    Marius44 non è in linea Scolaretto
    Luogo
    Catania
    Post
    323
    Ciao
    da un primo sguardo alla macro noto che queste righe di codice mi sembrano errate
    codice:
    With Worksheets("LINK")
        SITO = .Range("A" & lRiga).Value
    End With
    Prova a cambiare lRiga con lng altrimenti ovvio che si riferisce SOLO all'ultima riga.

    Fai sapere. Ciao,
    Mario

  4. #4
    dudaddy non è in linea Novello
    Post
    3
    Quote Originariamente inviato da Marius44 Visualizza il messaggio
    Ciao
    da un primo sguardo alla macro noto che queste righe di codice mi sembrano errate
    codice:
    With Worksheets("LINK")
        SITO = .Range("A" & lRiga).Value
    End With
    Prova a cambiare lRiga con lng altrimenti ovvio che si riferisce SOLO all'ultima riga.

    Fai sapere. Ciao,
    Mario

    Ciao,
    intanto grazie per la risposta!
    Ho provato ha modificare quello che mi hai detto, ma i valori per ogni riga ma li va a sostituire sempre e solo sull'ultima riga.
    Per farti capire:

    RISULTATO ATTUALE MA ERRATO

    A----------B-------C-----D
    EDIZIONE CARTA MKM RITIRO
    Zendikar Scalding Tarn
    Zendikar Lotus Cobra
    Ice Age Brainstorm
    Alpha Black Lotus € 18.800,00 € 15.040,00

    RISULTATO DESIDERATO

    A----------B-------C-----D
    EDIZIONE CARTA MKM RITIRO
    Zendikar Scalding Tarn € 18,00 € 15,00
    Zendikar Lotus Cobra € 50,00 € 2,00
    Ice Age Brainstorm € 800,00 € 40,00
    Alpha Black Lotus € 18.800,00 € 15.040,00



    I valori sono puramente inseriti a caso per far capire come dovrebbe essere il risultato!
    Non so più come uscirne

  5. #5
    Marius44 non è in linea Scolaretto
    Luogo
    Catania
    Post
    323
    Ciao
    prova a cambiare anche questa riga di codice
    codice:
    Range("C" & lRiga).Select
    con questa
    codice:
    Range("C" & lng).Select
    E' lo stesso errore di prima.
    Quando esegui un ciclo le celle devono fare riferimento al contatore altrimenti rimangono fisse: nell'esempio che hai postato la variabile lRiga è sempre l'ultima riga mentre la variabile-contatore lng si incrementa ad ogni giro.

    Se, come hai detto (ma ho i miei dubbi), sei un neofita di VBA incomincia con cose semplici. Non si può correre se non si sa camminare!

    Scusa la franchezza. Ciao,
    Mario

+ Rispondi al Thread

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi