Do While Len(Range("A" & r).Formula) > 0 non funziona

22 views
Skip to first unread message

Marco Porzio

unread,
Nov 16, 2021, 6:53:06 AM11/16/21
to
ciao,
nel codice per caricare alcune righe Excel su SQL server uso lo scorrimento indicato in oggetto:
Do While Len(Range("A" & r).Formula) > 0
With rs
.AddNew
.Fields("DataOraInserimento") = Range("N" & r).Value
.Fields("Anno") = Range("O" & r).Value
.Fields("Mese") = Range("P" & r).Value
...
...
.Update
End With

r = r + 1

Loop
quando lancio il caricamento dati mi riempie la tabella su server con migliaia di righe vuote!

presumo che il problema sia dovuto al fatto che nella colonna A le celle non sono veramente vuote ma sono popolate da un collegamento ad un altro file

Cella A2 ='\\MioPercorso\[MioFile.xlsx]Tarature!$A2
Cella A3 ='\\MioPercorso\[MioFile.xlsx]Tarature!$A3
Cella A4 ='\\MioPercorso\[MioFile.xlsx]Tarature!$A4
...
...


in questo caso Excel ha 31 righe, se elimino le successive si ferma a 31 ma la tabella potrebbe essere più corta di 31 righe oppure più lunga oltre le 100 righe per cui volevo capire come intercettare effettivamente la fine
grazie
Marco




Bruno Campanini

unread,
Nov 16, 2021, 7:26:05 AM11/16/21
to
After serious thinking Marco Porzio wrote :
> ciao,
> nel codice per caricare alcune righe Excel su SQL server uso lo scorrimento
> indicato in oggetto: Do While Len(Range("A" & r).Formula) > 0

Len("A" & 12) > 0 è sufficiente.

Bruno

Marco Porzio

unread,
Nov 16, 2021, 7:34:58 AM11/16/21
to
Ciao,
più tardi lo provo... cosa significa quel 12?

Marco Porzio

unread,
Nov 16, 2021, 8:29:15 AM11/16/21
to
Il giorno martedì 16 novembre 2021 alle 13:26:05 UTC+1 Bruno Campanini ha scritto:
non funziona, mi carica anche le righe dove la cella in colonna A è = ""
ho messo così:

Do While Len("A" & 12) > 0

With rs
.AddNew
.Fields("DataOraInserimento") = Range("N" & r).Value
.Fields("Anno") = Range("O" & r).Value
.Fields("Mese") = Range("P" & r).Value
.Fields("CodProdotto") = Range("A" & r).Value

Marco Porzio

unread,
Nov 16, 2021, 9:58:08 AM11/16/21
to
per semplificare ho creato un test solo per vedere cosa succede:

Sub test()

Dim r As Long

r = 2

'Do While Len(Range("A" & r).Formula) > 0 'Così conta anche gli zeri
'Do While Len("A" & 12) > 0 'Così si blocca e popola migliaia di righe
'Do While Len(Range("A" & r).Value) > 0 'Così conta anche gli zeri
Do While Range("A" & r).Value = 0 'Così non fa nulla....

MsgBox (Range("A" & r).Row & vbNewLine & Range("A" & r).Value)
r = r + 1

Loop

End Sub

Bruno Campanini

unread,
Nov 16, 2021, 11:29:48 AM11/16/21
to
Marco Porzio presented the following explanation :
Questa funziona come vorresti:
(i dati sono in col A)
============================
Public Sub test6()
Dim R As Range, i

Set R = Range([Sheet4!A1], [Sheet4!A12])
For Each i In R
If i.Value > 0 Then
i(1, 2) = i ' in col. B
End If
Next

End Sub
============================

Il resto della procedura è tutto tuo.

Bruno

PS
Con campi che sono vuoti non puoi definire dinamicamente il range
che li deve contenere.

Marco Porzio

unread,
Nov 16, 2021, 12:10:04 PM11/16/21
to
Grazie, domani mattina lo provo e ti faccio sapere
Marco

Marco Porzio

unread,
Nov 17, 2021, 2:38:33 AM11/17/21
to
ciao
ho provato ma non funziona (errore 400)

> PS
> Con campi che sono vuoti non puoi definire dinamicamente il range che li deve contenere.

vuol dire che vale solo per i campi dove ho una formula o comunque dove ho un dato collegato ad un altro file?
le righe nel file Excel non sono sempre uguali, possono essere 30 come 100 o di più

io devo scorrere tutta la colonna A importando in tabella server la riga dove A non è vuoto.
si deve fermare quando la riga in colonna A trova 0 oppure ""

una di quelle sopra citate funzionerebbe ma non si ferma quando trova 0 o ""

in attesa di cortese risposta continuo a lavorare sul tuo codice
Marco

Marco Porzio

unread,
Nov 17, 2021, 2:45:06 AM11/17/21
to
rettifico... l'errore non ce l'ho più però non funziona lo stesso:

Dim R As Range, i

Set R = Range("A2:A35")
For Each i In R
If i.Value > 0 Then
i(1, 2) = i ' in col. B
End If
MsgBox (i)
Next


i dati che mi servono vanno da A2 a A30 poi il collegamento con l'altro file rende 0
impostando il range A2:A35, fino a 30 legge il valore della cella poi da 31 a 35 mi rende 0 che da un certo punto è corretto perchè il valore cella è = 0 però io non voglio che scorra anche queste righe
Marco

Ammammata

unread,
Nov 17, 2021, 5:02:49 AM11/17/21
to
Il giorno Wed 17 Nov 2021 08:38:32a, *Marco Porzio* ha inviato su
microsoft.public.it.office.excel il messaggio
news:4ae569d0-04e4-4868...@googlegroups.com. Vediamo
cosa ha scritto:

> io devo scorrere tutta la colonna A importando in tabella server la
> riga dove A non è vuoto. si deve fermare quando la riga in colonna A
> trova 0 oppure ""
>

se non si ferma con i valori 0 o "" prova con qualcosa di diverso da tutto
il resto, p.e. 314159265 messo in fondo alla colonna

--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........

Marco Porzio

unread,
Nov 17, 2021, 5:19:48 AM11/17/21
to
credo di aver risolto!
al posto di Do While..... metto solo do poi alla fine della routine Loop Until Range("A" & R).Value = ""

così facendo ha letto e caricato su server tutti i dati fino al primo campo in colonna A con valore = ""

R = 2

Do

With rs
.AddNew
.Fields("DataOraInserimento") = Range("P" & R).Value
.Fields("Anno") = Range("Q" & R).Value
.Fields("Mese") = Range("R" & R).Value
.Fields("PianoIspezione") = Range("A" & R).Value
.Fields("Caratteristica") = Range("B" & R).Value
...
...
.Update
End With

R = R + 1

Loop Until Range("A" & R).Value = ""

Bruno Campanini

unread,
Nov 17, 2021, 6:32:57 AM11/17/21
to
Marco Porzio submitted this idea :
Perché non l'hai detto subito chiaramente?
=================================
Public Sub test6()
Dim R As Range, i

Set R = Range([Sheet4!A1], [Sheet4!A1].End(xlDown))
For Each i In R
If i = 0 Or i = "" Then Exit Sub
If i.Value > 0 Then
i(1, 2) = i ' in col. B
End If
Next

End Sub
==================================

Sperando sia la volta buona!

Bruno
===================================

Marco Porzio

unread,
Nov 17, 2021, 6:37:05 AM11/17/21
to
scusami, a volte non è semplice spiegarsi bene...
in ogni caso dovrei aver risolto con il codice sottostante ma prendo anche il tuo che può essere sempre utile!

R = 2

Do

With rs
.AddNew
.Fields("DataOraInserimento") = Range("P" & R).Value
.Fields("Anno") = Range("Q" & R).Value
.Fields("Mese") = Range("R" & R).Value
.Fields("PianoIspezione") = Range("A" & R).Value
.Fields("Caratteristica") = Range("B" & R).Value
...
...
.Update
End With

Reply all
Reply to author
Forward
0 new messages