PDA

View Full Version : [VBA Macro]


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