Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Comando VBA per macro - Prima riga vuota..

1,200 views
Skip to first unread message

Martino

unread,
Oct 19, 2004, 3:17:53 AM10/19/04
to
Quali oggetti devo utilizzare per:
copiare una serie di celle da un foglio,
aprire un altro file,
trovare la prima riga vuota
incollare i valori copiati dalla prima cella della prima riga vuota in
poi..
salvare il secondo file ...?

Grazie in anticipo..
In raltà quello che non riesco a fare e posizionarmi nella prima cella
vuota....alla fine dell'elenco...Saluti
MARTI

Rémi

unread,
Oct 19, 2004, 4:23:37 AM10/19/04
to
Ciao, guarda questo :

http://groups.google.it/groups?q=ottenere+informazione+sulla+fine+del+foglio&hl=it&lr=&selm=%23AWwu9ErEHA.3868%40TK2MSFTNGP15.phx.gbl&rnum=1

--
Alcuni esempi VBA Excel
http://remigueudelot.free.fr/

Spero di aver risposto bene alla tua domanda.
Rémi.

"Martino" <stefano...@libero.it> a écrit dans le message de
news:%2379fAva...@TK2MSFTNGP15.phx.gbl...

Maurizio Borrelli

unread,
Oct 19, 2004, 5:08:02 AM10/19/04
to
"Martino" ha scritto nel messaggio
news:#79fAvat...@TK2MSFTNGP15.phx.gbl...

Ciao, MARTI.

Vedi se il codice seguente puo` esserti di aiuto. Considera che in
questo esempio sia i dati di origine che quelli di destinazione hanno una
riga di intestazioni.

Prima dell'esecuzione della macro:

[Cartel1.xls]
| A | B | C |
--+-------+-------------+------------+
1|Campo1 |Campo2 |Campo3 |
2| 1|Pippo | € 123,45|
3| 2|Pluto | € 678,90|
4| 3|Paperino | € 12,34|
5| 4|Topolino | € 5.678,90|
6| 5|Gambadilegno | € 12.345,67|
_ ____________________________
\Foglio1/

[Cartel2.xls]
| A | B | C |
--+-------+-------+---------+
1|Campo1 |Campo2 |Campo3 |
2| 6|Qui | € 100,00|
3| 7|Quo | € 200,00|
4| 8|Qua | € 300,00|
_ ___________________
\Foglio1/

Dopo l'esecuzione della macro si ottiene:

[Cartel1.xls]
| A | B | C |
--+-------+-------------+------------+
1|Campo1 |Campo2 |Campo3 |
2| 1|Pippo | € 123,45|
3| 2|Pluto | € 678,90|
4| 3|Paperino | € 12,34|
5| 4|Topolino | € 5.678,90|
6| 5|Gambadilegno | € 12.345,67|
7| 6|Qui | € 100,00|
8| 7|Quo | € 200,00|
9| 8|Qua | € 300,00|
_ ____________________________
\Foglio1/

' [Cartel1.xls]
' Modulo1
'
Option Explicit

Public Sub Accoda()
Const c_strWorkbookSourceName As String = "Cartel2.xls"
Const c_strWorksheetSourceName As String = "Foglio1"
Const c_strWorksheetDestinationName As String = "Foglio1"

Dim objXlWbkSrc As Excel.Workbook
Dim objXlWshSrc As Excel.Worksheet
Dim objXlRngSrc As Excel.Range
Dim objXlWbkDst As Excel.Workbook
Dim objXlWshDst As Excel.Worksheet
Dim objXlRngDst As Excel.Range

Set objXlWbkSrc = Application.Workbooks _
.Item(c_strWorkbookSourceName)
Set objXlWshSrc = objXlWbkSrc.Worksheets _
.Item(c_strWorksheetSourceName)
With objXlWshSrc.UsedRange
Set objXlRngSrc = .Resize(.Rows.Count - 1).Offset(1)
End With
Debug.Print "'" _
& "[" & objXlWbkSrc.Name & "]" _
& objXlWshSrc.Name _
& "'" _
& "!" & objXlRngSrc.Address

Set objXlWbkDst = Application.ThisWorkbook
Set objXlWshDst = objXlWbkDst.Worksheets _
.Item(c_strWorksheetDestinationName)
With objXlWshDst.UsedRange
Set objXlRngDst = .Resize(1, 1).Offset(.Rows.Count)
End With
Debug.Print "'" _
& "[" & objXlWbkDst.Name & "]" _
& objXlWshDst.Name _
& "'" _
& "!" & objXlRngDst.Address

objXlRngSrc.Copy objXlRngDst

Set objXlRngDst = Nothing
Set objXlWshDst = Nothing
Set objXlWbkDst = Nothing
Set objXlRngSrc = Nothing
Set objXlWshSrc = Nothing
Set objXlWbkSrc = Nothing
End Sub

Output in finestra "Immediata":

'[Cartel2.xls]Foglio1'!$A$2:$C$4
'[Cartel1.xls]Foglio1'!$A$7

(Facci sapere se ed eventualmente come hai risolto. Grazie.)
--
Ciao :o)
Maurizio Borrelli, Microsoft MVP - Office Systems - Access
--------
?SPQR(C)
X
--------


Roberto Restelli

unread,
Oct 19, 2004, 5:22:45 AM10/19/04
to
Ciao Martino.

Martino ha scritto:


> In raltà quello che non riesco a fare e posizionarmi nella prima cella
> vuota....alla fine dell'elenco...

Ho visto che Rémi ti ha già dato una serie di indicazioni, ma io
personalmente ho qualche *antipatia* per il codice che effettua in
continuazione selezioni di celle quando queste non sono necessarie (sia per
questioni di performances, sia per agire nella maniera meno invasiva
possibile attraverso il codice), quindi ti propongo una ulteriore soluzione
per individuare la prima cella libera di un elenco. :-)

Ammettiamo che l'elenco sia presente sul Foglio2 nella Cartella attiva, a
partire dalla cella A1.
====
'...
'Definisco un oggetto di tipo Range che conterrà alla fine
' del processo il riferimento alla prima cella vuota nella
' colonna A.
Dim oRange As Range

With ActiveWorkbook.Sheets("Foglio2")
'Inzia a verificare se la prima cella è vuota.
'Se A1 è vuota, allora A1 è la 'prima cella vuota'.
If .Range("A1").Value = "" Then
Set oRange = .Range("A1")
'Inizia a verificare se la seconda cella è vuota.
' Se A2 è vuota, allora A2 è la 'prima cella vuota'.
ElseIf .Range("A2").Value = "" Then
Set oRange = .Range("A2")
Else
'Se nessuna delle prime due celle è vuota allora la proprietà
' ".End" è in grado di rilevare il riferimento all'ultima cella
' in basso (xlDown). La proprietà ".Offset" restituisce il
' riferimento alla prima cella sotto quella piena.
Set oRange = .Range("A1").End(xlDown).Offset(1, 0)
End If
End With
====

Ho aggiunto qualche commento nel codice (a dire la verità sono più i
commenti che non il codice) ;-)
Fondamentalmente verifico le prime due celle della potenziale area (perchè
costituirebbero una eccezione nell'applicazione del metodo successivo). Poi
utilizzo la proprietà ".End" a partire dalla prima cella piena per
individuare l'ultima cella piena. Una volta individuata questa utilizzo la
proprietà ".Offset" per recuperare il riferimento alla cella sottostante
all'ultima cella piena (quindi la prima cella vuota).
Alla fine otterrai l'oggetto "oRange" che conterrà il riferimento alla prima
cella vuota.

Questo metodo _non_ cambia la posizione della cella attiva nè varia la
selezione di qualsiasi altra cella.

Se hai dei dubbi, facci sapere.
Ciao
Roberto

--
Roberto Restelli
Microsoft MVP - Office Systems - Outlook


Enzo Samarelli

unread,
Oct 19, 2004, 12:01:00 PM10/19/04
to

"Martino" <stefano...@libero.it> ha scritto nel messaggio
news:%2379fAva...@TK2MSFTNGP15.phx.gbl...

> trovare la prima riga vuota

nel tuo caso, la prima riga vuota (non ancora usata) è semplicemente:
Selection.SpecialCells(xlCellTypeLastCell).row+1
enzo


genio41

unread,
Oct 19, 2004, 6:10:07 PM10/19/04
to
Scusatemi, se i due files sono sempre gli stessi,
con queste semplici righe di codice aggiungo tutte le righe che voglio,
a patto che abbia aperti i due files "CartellaDaCui" e "CartellaACui", e
che le celle del file ACui siano sempre piene.

I campi delle due cartelle saranno identici
e posti entrambi nella riga 3

Partendo dalla CartellaDaCui

Application.ScreenUpdating = False
Range("D4:F6").Select
Selection.Copy
Windows("CartellaACui.xls").Activate
Range("D2").Select (è necessario che la
cella D2 non sia
mai vuota
e che contenga una stringa

qualsiasi, per fare da start)
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveWorkbook.Save


Saluti
Pico

"Martino" <stefano...@libero.it> ha scritto nel messaggio
news:%2379fAva...@TK2MSFTNGP15.phx.gbl...

0 new messages