skyzz0
18-11-2013, 18:50
Ciao,
chiedo il vostro aiuto per risolvere un problema che sto incontrando utilizzando il VBA di Excel.
Premetto che me la cavo abbastanza bene con Excel, ma ho iniziato utilizzato ad utilizzare il VBA pochi giorni fa (ed in questo il forum mi è stato di grandissimo aiuto!) quindi il livello dei codici che ho realizzato è molto molto scarso.
Ho creato un codice (che riporto qui di seguito) che mi copia il valore di alcune celle nel foglio "patrimonio" nel foglio "storico". Il codice (che sicuramente conterrà imprecisioni) fa il suo lavoro: il valore di due celle (una data ed il gg della settimana) sono copiate e incollate in tre celle del foglio di destinazione a cui vado ad affiancare altri valori presenti nel foglio patrimonio.
Sub storicizza()
'definisco variabili per individuare cella di partenza sul foglio patrimonio
data_rif_row = Worksheets("Patrimonio").Cells.Find(what:="data riferimento").Row
data_rif_col = Worksheets("Patrimonio").Cells.Find(what:="data riferimento").Column
'definisco variabili per individuare cella di partenza sul foglio storico
Worksheets("Storico").Activate
data_stor_row = Worksheets("storico").Cells.Find(what:="data riferimento").Row
data_stor_col = Worksheets("storico").Cells.Find(what:="data riferimento").Column
Worksheets("patrimonio").Activate
'copio data riferimento da foglio patrimonio a storico
Worksheets("Patrimonio").Range(Cells(data_rif_row, data_rif_col + 1), Cells(data_rif_row, data_rif_col + 2)).Copy
Worksheets("storico").Activate
Worksheets("storico").Range(Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(1, 0), Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(3, 1)).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
'copio tipologia e importo da da foglio patrimonio a storico
Worksheets("Patrimonio").Activate
Cells(data_rif_row, data_rif_col + 1).End(xlDown).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Copy
Worksheets("storico").Activate
Worksheets("storico").Range(Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(-2, 2), Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(0, 3)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
Ho cercato di migliorarlo inserendo una condizione di IF che mi avvisasse nel caso in cui la data che copio da "patrimonio" a "storico" sia già presente in lista. Ho provato ad inserire una condizione di IF che mi funziona correttamente quando la condizione è TRUE, ma che mi da errore quando la condizione è FALSE (Variabile oggetto o variabile del blocco With non impostata).
Sub storicizza()
'definisco variabili per individuare cella di partenza sul foglio patrimonio
data_rif_row = Worksheets("Patrimonio").Cells.Find(what:="data riferimento").Row
data_rif_col = Worksheets("Patrimonio").Cells.Find(what:="data riferimento").Column
'definisco data che storicizzerò
data_stor = Worksheets("Patrimonio").Cells(data_rif_row, data_rif_col + 1).Value
'definisco variabili per individuare cella di partenza sul foglio storico
Worksheets("Storico").Activate
data_stor_row = Worksheets("storico").Cells.Find(what:="data riferimento").Row
data_stor_col = Worksheets("storico").Cells.Find(what:="data riferimento").Column
If Worksheets("storico").Cells.Find(what:=data_stor).Select <> "" Then
MsgBox "Data già presente", 16, "Attenzione!!": Exit Sub '<--- se la riga è alterata, la macro si blocca altrimenti continua
Else: Range("a1").Select
'Worksheets("patrimonio").Activate
''copio data riferimento da foglio patrimonio a storico
'Worksheets("Patrimonio").Range(Cells(data_rif_row, data_rif_col + 1), Cells(data_rif_row, data_rif_col + 2)).Copy
'Worksheets("storico").Activate
' Worksheets("storico").Range(Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(1, 0), Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(3, 1)).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks _
' :=False, Transpose:=False
' Application.CutCopyMode = False
'
'copio tipologia e importo da da foglio patrimonio a storico
'Worksheets("Patrimonio").Activate
'Cells(data_rif_row, data_rif_col + 1).End(xlDown).Select
'Range(Selection, Selection.End(xlToRight)).Select
' Range(Selection, Selection.End(xlDown)).Copy
'Worksheets("storico").Activate
'Worksheets("storico").Range(Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(-2, 2), Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(0, 3)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Application.CutCopyMode = False
End If
End Sub
Chiedo umilmente il vostro aiuto!
Grazie mille,
Danilo
chiedo il vostro aiuto per risolvere un problema che sto incontrando utilizzando il VBA di Excel.
Premetto che me la cavo abbastanza bene con Excel, ma ho iniziato utilizzato ad utilizzare il VBA pochi giorni fa (ed in questo il forum mi è stato di grandissimo aiuto!) quindi il livello dei codici che ho realizzato è molto molto scarso.
Ho creato un codice (che riporto qui di seguito) che mi copia il valore di alcune celle nel foglio "patrimonio" nel foglio "storico". Il codice (che sicuramente conterrà imprecisioni) fa il suo lavoro: il valore di due celle (una data ed il gg della settimana) sono copiate e incollate in tre celle del foglio di destinazione a cui vado ad affiancare altri valori presenti nel foglio patrimonio.
Sub storicizza()
'definisco variabili per individuare cella di partenza sul foglio patrimonio
data_rif_row = Worksheets("Patrimonio").Cells.Find(what:="data riferimento").Row
data_rif_col = Worksheets("Patrimonio").Cells.Find(what:="data riferimento").Column
'definisco variabili per individuare cella di partenza sul foglio storico
Worksheets("Storico").Activate
data_stor_row = Worksheets("storico").Cells.Find(what:="data riferimento").Row
data_stor_col = Worksheets("storico").Cells.Find(what:="data riferimento").Column
Worksheets("patrimonio").Activate
'copio data riferimento da foglio patrimonio a storico
Worksheets("Patrimonio").Range(Cells(data_rif_row, data_rif_col + 1), Cells(data_rif_row, data_rif_col + 2)).Copy
Worksheets("storico").Activate
Worksheets("storico").Range(Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(1, 0), Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(3, 1)).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
'copio tipologia e importo da da foglio patrimonio a storico
Worksheets("Patrimonio").Activate
Cells(data_rif_row, data_rif_col + 1).End(xlDown).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Copy
Worksheets("storico").Activate
Worksheets("storico").Range(Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(-2, 2), Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(0, 3)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
Ho cercato di migliorarlo inserendo una condizione di IF che mi avvisasse nel caso in cui la data che copio da "patrimonio" a "storico" sia già presente in lista. Ho provato ad inserire una condizione di IF che mi funziona correttamente quando la condizione è TRUE, ma che mi da errore quando la condizione è FALSE (Variabile oggetto o variabile del blocco With non impostata).
Sub storicizza()
'definisco variabili per individuare cella di partenza sul foglio patrimonio
data_rif_row = Worksheets("Patrimonio").Cells.Find(what:="data riferimento").Row
data_rif_col = Worksheets("Patrimonio").Cells.Find(what:="data riferimento").Column
'definisco data che storicizzerò
data_stor = Worksheets("Patrimonio").Cells(data_rif_row, data_rif_col + 1).Value
'definisco variabili per individuare cella di partenza sul foglio storico
Worksheets("Storico").Activate
data_stor_row = Worksheets("storico").Cells.Find(what:="data riferimento").Row
data_stor_col = Worksheets("storico").Cells.Find(what:="data riferimento").Column
If Worksheets("storico").Cells.Find(what:=data_stor).Select <> "" Then
MsgBox "Data già presente", 16, "Attenzione!!": Exit Sub '<--- se la riga è alterata, la macro si blocca altrimenti continua
Else: Range("a1").Select
'Worksheets("patrimonio").Activate
''copio data riferimento da foglio patrimonio a storico
'Worksheets("Patrimonio").Range(Cells(data_rif_row, data_rif_col + 1), Cells(data_rif_row, data_rif_col + 2)).Copy
'Worksheets("storico").Activate
' Worksheets("storico").Range(Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(1, 0), Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(3, 1)).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks _
' :=False, Transpose:=False
' Application.CutCopyMode = False
'
'copio tipologia e importo da da foglio patrimonio a storico
'Worksheets("Patrimonio").Activate
'Cells(data_rif_row, data_rif_col + 1).End(xlDown).Select
'Range(Selection, Selection.End(xlToRight)).Select
' Range(Selection, Selection.End(xlDown)).Copy
'Worksheets("storico").Activate
'Worksheets("storico").Range(Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(-2, 2), Cells(data_stor_row + 1, data_stor_col).End(xlDown).Offset(0, 3)).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' Application.CutCopyMode = False
End If
End Sub
Chiedo umilmente il vostro aiuto!
Grazie mille,
Danilo