Grazie in anticipo..
In raltà quello che non riesco a fare e posizionarmi nella prima cella
vuota....alla fine dell'elenco...Saluti
MARTI
--
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...
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
--------
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
> trovare la prima riga vuota
nel tuo caso, la prima riga vuota (non ancora usata) è semplicemente:
Selection.SpecialCells(xlCellTypeLastCell).row+1
enzo
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...