Condividi tramite

Copia valore precedente

Anonimo
2019-03-04T15:55:35+00:00

Buonasera,

nel range E12:E4039 del foglio MASTER digito un valore, nell'esempio allegato:  ->. in E12 -> 23 poi vi sono varie celle vuote e a seguire vi è il n° 11 in E21.

Vorrei che quando digito un valore in questa colonna dopo una o più celle vuote, lo script prenda il numero precedente e lo scriva nelle caselle vuote.

In pratica in questo caso quando ho digitato 11 (in E21) il dato atteso è la compilazione con il numero 23 ( quello precedente) di tutte le celle vuote da E13:E20.

Evidenzio che vi sono delle macro già presenti nel modulo del foglio di lavoro MASTER:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Private Sub Worksheet_Change(ByVal Target As Range)

https://www.dropbox.com/s/s5s3vctrky3thrm/copia%20valore.xls?dl=0

Grazie per l'aiuto.

byEF

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

4 risposte

Ordina per: Più utili
  1. Anonimo
    2019-03-05T13:26:08+00:00

    Ciao Norman,

    una correzione:

    In pratica in questo caso quando ho digitato 11 (in E21) il dato atteso è la compilazione con il numero 23 ( quello precedente) di tutte le celle vuote da E13:E20.

    Lo script lavora al contrario ossia mi scrive il numero successivo e non quello precedente (in pratica scrive 11 e non il dato atteso ossia il 23). -> ho provato ad effettuare la correzione in autonomia ma purtroppo non sono riuscito ad identificare il punto dove intervenire.

    Mentre nel fare la prova mi sono reso conto che sarebbe importante che il numero fosse riportato se la cella adiacente (range D12:D4039) non è vuota.

    Riassumendo:

    Grazie se puoi.

    byEF

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-03-05T07:34:12+00:00

    Ciao By EF,

    Ciao Norman,

    di seguito quanto richiestomi:

    >>>>>>>>>>>>>>>>>>>>>>>>>>>

    Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Set rng = Me.Range("D12:D4039") If Not Intersect(Target, rng) Is Nothing And Target.Count = 1 Then     With Target         If .Offset(0, 7).Value = "" Then         '*** Vedi Testo             .Offset(0, 7).Value = Now             .Offset(0, 7).NumberFormat = "dd/mm/yyyy hh:mm:ss"         End If     End With End If Set rng = Nothing End Sub

    <<<<<<<<<<<<<<<<<<<<<<<<<<<

    Grazie per l'aiuto.

    Prova qualcosa del genere:

    '=========>>

    Option Explicit

    '--------->>

    Private Sub Worksheet_Change(ByVal Target As Range)

        Dim Rng As Range, Rng2 As Range

        Dim rArea As Range

        Dim vVal As Variant

        On Error GoTo XIT

        Application.EnableEvents = False

        Set Rng = Me.Range("D12:E4039")

        If Not Intersect(Target, Rng.Columns(1)) Is Nothing _

           And Target.Count = 1 Then

            With Target

                If .Offset(0, 7).Value = "" Then

                    .Offset(0, 7).Value = Now

                    .Offset(0, 7).NumberFormat = "dd/mm/yyyy hh:mm:ss"

                End If

            End With

        ElseIf Not Intersect(Target, Rng.Columns(2)) Is Nothing Then

            With Rng.Columns(2)

                On Error Resume Next

                Set Rng2 = .Resize(Target.Row - .Row). _

                           SpecialCells(xlCellTypeBlanks)

                On Error GoTo XIT

                If Not Rng2 Is Nothing Then

                    For Each rArea In Rng2.Areas

                        With rArea

                            vVal = .Cells(1).Offset(.Cells.Count).Value

                            If Not vVal = vbNullString Then

                                .Value = vVal

                            End If

                        End With

                    Next rArea

                End If

            End With

        End If

    XIT:

        Application.EnableEvents = True

    End Sub

    '<<=========

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-03-04T19:14:33+00:00

    Ciao Norman,

    di seguito quanto richiestomi:

    >>>>>>>>>>>>>>>>>>>>>>>>>>>

    Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Set rng = Me.Range("D12:D4039") If Not Intersect(Target, rng) Is Nothing And Target.Count = 1 Then     With Target         If .Offset(0, 7).Value = "" Then         '*** Vedi Testo             .Offset(0, 7).Value = Now             .Offset(0, 7).NumberFormat = "dd/mm/yyyy hh:mm:ss"         End If     End With End If Set rng = Nothing End Sub

    <<<<<<<<<<<<<<<<<<<<<<<<<<<

    Grazie per l'aiuto.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-03-04T17:53:56+00:00

    Ciao By EF**,**

    nel range E12:E4039 del foglio MASTER digito un valore, nell'esempio allegato:  ->. in E12 -> 23 poi vi sono varie celle vuote e a seguire vi è il n° 11 in E21.

    Vorrei che quando digito un valore in questa colonna dopo una o più celle vuote, lo script prenda il numero precedente e lo scriva nelle caselle vuote.

    In pratica in questo caso quando ho digitato 11 (in E21) il dato atteso è la compilazione con il numero 23 ( quello precedente) di tutte le celle vuote da E13:E20.

    Evidenzio che vi sono delle macro già presenti nel modulo del foglio di lavoro MASTER:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Private Sub Worksheet_Change(ByVal Target As Range)

    https://www.dropbox.com/s/s5s3vctrky3thrm/copia%20valore.xls?dl=0

    Se desideri che le celle vuote vengano compilate automaticamente, sarà necessario sfruttare l'evento Worksheet_Change del foglio. Poiché si può avere solo una procedura di Worksheet_Change, sarà necessario incorporare il codice esistente con il nuovo codice. Ti chiederei quindi di pubblicare il codice esistente.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento