Non capisco perche' le formule di riserva le copi un pezzo alla volta e non un rigo completo; idem per il Copia /Incolla-speciale/Valori...
Avevo fatto in questo modo perchè le celle nella riga di riepilogo non erano tutte adiacenti ed inoltre la matricola era scritta in una cella interna alla riga: copiando il rigo completo o mi si sovrascriveva il numero di matricola oppure mi dava l'errore
Impossibile eseguire il comando su una selezione multipla.
Comunque ora ho cambiato la disposizione delle celle in modo da copiare e incollare in una volta sola.
Poi, alcune celle devono diventare semplici "collegamenti" e altre sono invece "Somme"; giusto? In questo caso la cosa piu' semplice era avere formule che generavano stringhe in un caso che cominciavano con "#(" e nell' altro che cominciavano con "#Somma(";comunque mi dici in quali colonne bisogna mettere "=" e in quali "=SOMMA"?
Si, giusto. Ora ho modificato le stringhe come mi hai suggerito tu, facendo iniziare alcune formule con "#(" ed altre con "#SOMMA("
Ad ogni modo le colonne H, I, J, L e M sono collegamenti, le colonne N, P, Q e R sono Somme.
Per quanto riguarda l' errore, esso indica che la formula ottenuta con "=SOMMA" e' sintatticamente errata; ispeziona quindi la "cella attiva" al momento dell' errore (senza modificare la selezione) per capire in cosa consiste l' errore.
Questo ho provato a farlo ma non riesco a capire quale sia il problema...
Ti posto nuovamente la macro con le modifiche che ho (hai) fatto, che ora risulta molto più corta:
- Codice: Seleziona tutto
Sub Macro2()
'
' Macro2 Macro
' Macro registrata il 15/07/2009 da winxp
'
'
Sheets("tab").Select
Range("H4:R4").Select
Selection.Copy
Sheets("Tempi Gennaio").Select
Range("H8").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Replace What:="#", Replacement:="=", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
End Sub
Ho provato a registrare una seconda macro, senza cambiare formule ma solo effettuando la sostituzione di "#" con "=" una alla volta (nelle formule con SOMMA), ed in questo caso rilanciando la macro non dà errori, però ovviamente si allunga un po':
- Codice: Seleziona tutto
Sub Macro3()
'
' Macro3 Macro
' Macro registrata il 15/07/2009 da winxp
'
Sheets("tab").Select
Selection.Copy
Sheets("Tempi Gennaio").Select
Range("G31").Select
Selection.End(xlUp).Select ' <<<< In questo modo mi posiziono in fondo all'elenco delle matricole
' (quando ho registrato la macro era la riga 8), non so se ti può essere utile.
Range("H8").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
ActiveSheet.Paste
Application.CutCopyMode = False
Range("H8:M8").Select
Range("M8").Activate
Selection.Replace What:="#", Replacement:="=", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Range("N8").Select
ActiveCell.FormulaR1C1 = _
"=SUM('C:\Documents and Settings\amministratore\Desktop\area test\COMMESSE\[125.09.G.xls]Progressivo lavorazione'!R15C4:R20C4)"
Range("P8").Select
ActiveCell.FormulaR1C1 = _
"=SUM('C:\Documents and Settings\amministratore\Desktop\area test\COMMESSE\[125.09.G.xls]Progressivo lavorazione'!R21C4:R22C4)"
Range("Q8").Select
ActiveCell.FormulaR1C1 = _
"=SUM('C:\Documents and Settings\amministratore\Desktop\area test\COMMESSE\[125.09.G.xls]Progressivo lavorazione'!R6C4:R9C4,R13C4:R15C4,R21C4:R22C4)"
Range("R8").Select
ActiveCell.FormulaR1C1 = _
"=SUM('C:\Documents and Settings\amministratore\Desktop\area test\COMMESSE\[125.09.G.xls]Progressivo lavorazione'!R28C4:R29C4)"
Range("A8:T8").Select
' Il seguito è solo per comodità di visualizzazione, se crea problemi si può omettere.
With Selection.Font
.Name = "Arial"
.Size = 12
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
End With
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
Range("A9").Select
End Sub
Non voglio assolutamente metterti fretta, anzi di ringrazio tantissimo per il tempo che mi hai già dedicato e che mi dedicherai!
Ciao.
Fabio