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

macro excel con vba per copiare incollare il valore cella con evento change

1,395 views
Skip to first unread message

zepp

unread,
May 15, 2008, 4:43:31 PM5/15/08
to
Ho un problema con excel c'è qualcuno che può aiutarmi??, altrimenti
fa lo stesso e vi ringrazio comunque.

Il mio quesito è molto semplice e forse per molti banale!!Sto cercando
di fare una macro che copi il valore di una cella attiva (es. A1) che
contiene una formula(A1=B1*B2) ogni volta che il valore A1 si
modifica(ossia si immettono nuovi dati nelle celle B1 o B2) e che
incolli poi il valore contenuto in A1 man mano in una colonna (es.
c1,c2,c3,c4,c5). Il ciclo parte solo se la prima riga della
colonna( cioè c1 è vuota). Credo sia necessario un evento
change che ad ogni variazione del valore in A1 lo copi e lo incolli
nella colonna C.

Uso excel ma non sono esperto di vba, ho provato ma non ci sono
riuscito!!
se per la copia volessi mettere un pulsante??si potrebbe fare??
Grazie a tutti!

Norman Jones

unread,
May 15, 2008, 5:48:24 PM5/15/08
to
Ciao Zepp

=============

=============

Nel modulo del foglio (vedi di sotto),
incolla la seguente routine:

========>>
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim srcRng As Range
Dim destRng As Range
Dim Rng As Range
Dim rCell As Range
Dim iRow As Long
Const myCell As String = "A1" '<<=== da CAMBIARE
Const destCol As String = "C:C" '<<=== da CAMBIARE

Set destRng = Me.Range(destCol)

On Error Resume Next
Set srcRng = Me.Range(myCell).Precedents
On Error GoTo 0

If Not srcRng Is Nothing Then
On Error Resume Next
Set Rng = Intersect(srcRng, Target)
On Error Resume Next

If Not Rng Is Nothing Then
If Not IsEmpty(destRng.Cells(1)) Then
On Error GoTo XIT
Application.EnableEvents = False
iRow = LastRow(Me, destRng)
Set rCell = destRng.Cells(iRow).Offset(1)
rCell.Value = Me.Range(myCell).Value
End If
End If
End If
XIT:
Application.EnableEvents = True
End Sub
'<<==========

Si tratta d una routine di evento Worksheet_Change.
Per utilizzarla, con il tasto destro del mouse fai click
sulla linguetta del foglio, scegli "Visualizza codice" e
nella finestra del codice incolla la routine.
Alt-F11 per tornare in Excel

In un modulo standar (vedi di sotto),
incolla la seguente funzione:

'=========>>
Option Explicit

Function LastRow(SH As Worksheet, _
Optional Rng As Range)


If Rng Is Nothing Then
Set Rng = SH.Cells
End If


On Error Resume Next
LastRow = Rng.Find(What:="*", _
After:=Rng.Cells(1), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
'<<=========

Ora, con le celle indicato da te, se il valore
delle celle B1 o B2, cambia, il nuovo valore
della cella A1 va aggiunta dopo l'ultima celle
popolato nella colonna C. Tuttavia, se la cella
C1 e' vuota, niente succede.

Quindi, per iniziare la populazione della colonna
C, devi inserire un valore qualunque in C1.

---
Regards.
Norman

grazie per la macro@discussions.microsoft.com Norman grazie per la macro

unread,
May 18, 2008, 8:24:02 AM5/18/08
to

"Norman Jones" wrote:

> Norman grazie mille per la macro!!! così com è funziona!!

ma ho dovuto cambiare le posizioni delle celle nel foglio di calcolo. Se
volessi che la populazione della colonna iniziasse da D10,D11;D12 e così via
e che la partisse solo se la prima cella D10 è vuota?? Ho provato a cambiare
le righe ma così facendo mi sa che ho stravolto il codice!!
Grazie Ciao


0 new messages