Copia e incolla solo valori e non formule tra due fogli dello stesso file (dati di un determinato range).

Anonimo
2016-09-08T07:34:24+00:00

Buongiorno a tutti, ho messo su, adattando alle mie esigenze il sottoelencato codice di Mauro Gamberini che mi permette di copiare dei dati  contenuti in un range definito dal foglio 1 al foglio 2.

Il problema è che se pur funzionante penso di aver creato un codice ridondante e disordinato, cioe:

se metto queste due righe il codice funziona : 

Sheets("Foglio2").Select

With Worksheets("Foglio2")

se lascio With Worksheets("Foglio2") il codice va in errore, è come se non trovasse il foglio 2 già selezionato.

Come ho imparato da voi seguendo il forum penso che nelle due righe in cui richiamo il Foglio2 ho pisticciato un po.

Mi aiutate a capire e a migliorare il codice in argomento.

Questo è il codice che utilizzo:

Public Sub CopiaeIncolla()

    Dim sh1 As Worksheet

    Dim sh2 As Worksheet

    Dim LRiga As Long

    LRiga = Sheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row

    Application.ScreenUpdating = False

     With ThisWorkbook

         Set sh1 = .Worksheets("Foglio1")

         Set sh2 = .Worksheets("Foglio2")

     End With

With sh1

      sh2.Cells.Clear

         .Range("C1:M" & LRiga).Copy _

          sh2.Range("A1").PasteSpecial xlPasteValues

         Application.CutCopyMode = False

      Sheets("Foglio2").Select

      With Worksheets("Foglio2")

        .Columns("A:A").NumberFormat = "m/d/yyyy"

        .Columns("A:K").Select

        .Columns("A:K").EntireColumn.AutoFit

        .Columns("C:C").NumberFormat = "€ #,##0.00"

         Cells.Select

          With Selection

              .HorizontalAlignment = xlCenter

              .VerticalAlignment = xlBottom

              .WrapText = False

              .Orientation = 0

              .AddIndent = False

              .IndentLevel = 0

              .ShrinkToFit = False

              .ReadingOrder = xlContext

              .MergeCells = False

          End With

     End With

End With

     Set sh2 = Nothing

     Set sh1 = Nothing

 End Sub

Ciao Nicola

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

Risposta accettata dall'autore della domanda

Anonimo
2016-09-08T08:34:19+00:00

Se (se) ho capito, prova:

Public Sub m()

Dim sh1 As Worksheet

    Dim sh2 As Worksheet

    Dim lRiga As Long

    Application.ScreenUpdating = False

    With ThisWorkbook

        Set sh1 = .Worksheets("Foglio1")

        Set sh2 = .Worksheets("Foglio2")

    End With

    With sh1

        sh2.Cells.Clear

        lRiga = .Range("A" & .Rows.Count).End(xlUp).Row

        .Range("C1:M" & lRiga).Copy

    End With

    With sh2

        .Range("A1").PasteSpecial

        .Columns("A:A").NumberFormat = "m/d/yyyy"

        .Columns("C:C").NumberFormat = "€ #,##0.00"

        With .Columns("A:K")

            .EntireColumn.AutoFit

        End With

        .Range("A1").Select

    End With

   With Application

        .ScreenUpdating = True

        .CutCopyMode = False

   End With

    Set sh1 = Nothing

    Set sh2 = Nothing

End Sub

Dove copio il contenuto di C1:M(n) del Foglio1 e lo incollo a partire da A1 del Foglio2.

La risposta è stata utile?

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2016-09-08T08:07:05+00:00

Ciao Nicola,

ho messo su, adattando alle mie esigenze il sottoelencato codice di Mauro Gamberini che mi permette di copiare dei dati  contenuti in un range definito dal foglio 1 al foglio 2.

Il problema è che se pur funzionante penso di aver creato un codice ridondante e disordinato, cioe:

se metto queste due righe il codice funziona : 

Sheets("Foglio1").Select

With Worksheets("Foglio1")

se lascio With Worksheets("Foglio1") il codice va in errore, è come se non trovasse il foglio 2 già selezionato.

Come ho imparato da voi seguendo il forum penso che nelle due righe in cui richiamo il Foglio2 ho pisticciato un po.

Mi aiutate a capire e a migliorare il codice in argomento.

Questo è il codice che utilizzo:

Public Sub CopiaeIncolla()

    Dim sh1 As Worksheet

    Dim sh2 As Worksheet

    Dim LRiga As Long

    LRiga = Sheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row

    Application.ScreenUpdating = False

    

     With ThisWorkbook

         Set sh1 = .Worksheets("Foglio1")

         Set sh2 = .Worksheets("Foglio2")

     End With

      

With sh1

      sh2.Cells.Clear

         .Range("C1:M" & LRiga).Copy _

          sh2.Range("A1").PasteSpecial xlPasteValues

         Application.CutCopyMode = False

        

      Sheets("Foglio2").Select

      With Worksheets("Foglio2")

        .Columns("A:A").NumberFormat = "m/d/yyyy"

        .Columns("A:K").Select

        .Columns("A:K").EntireColumn.AutoFit

        .Columns("C:C").NumberFormat = "€ #,##0.00"

         Cells.Select

          With Selection

              .HorizontalAlignment = xlCenter

              .VerticalAlignment = xlBottom

              .WrapText = False

              .Orientation = 0

              .AddIndent = False

              .IndentLevel = 0

              .ShrinkToFit = False

              .ReadingOrder = xlContext

              .MergeCells = False

          End With

     End With

End With

     Set sh2 = Nothing

     Set sh1 = Nothing

 End Sub

Solitamente è nè necessario nè efficiciente fare delle selezioni di fofgli o di intervalli, Quindi prova il seguente adattamento del tuo codice:

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

Option Explicit

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

Public Sub CopiaeIncolla()

    Dim sh1 As Worksheet

    Dim sh2 As Worksheet

    Dim srcRng As Range, destRng As Range

    Dim LRiga As Long

    On Error GoTo XIT

    Application.ScreenUpdating = False

    With ThisWorkbook

        Set sh1 = .Worksheets("Foglio1")

        Set sh2 = .Worksheets("Foglio2")

    End With

    With sh1

        LRiga = .Range("A" & Rows.Count).End(xlUp).Row

        Set srcRng = .Range("C1:M" & LRiga)

    End With

    With sh2

        .Cells.Clear

        Set destRng = .Range("A1").Resize(LRiga, srcRng.Columns.Count)

    End With

    srcRng.Copy

    With destRng

        .PasteSpecial xlPasteValues

        .Columns("A:A").NumberFormat = "m/d/yyyy"

        .Columns("C:C").NumberFormat = "€ #,##0.00"

        .EntireColumn.AutoFit

        .HorizontalAlignment = xlCenter

        .VerticalAlignment = xlBottom

        .WrapText = False

        .Orientation = 0

        .AddIndent = False

        .IndentLevel = 0

        .ShrinkToFit = False

        .ReadingOrder = xlContext

        .MergeCells = False

    End With

XIT:

    With Application

        .CutCopyMode = False

        .ScreenUpdating = True

    End With

    Set sh2 = Nothing

    Set sh1 = Nothing

End Sub

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

Postscriptum:

Ho modificato il codice

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-09-08T09:20:15+00:00

    A me la riga indicata non da nessun errore. O meglio, non da errore se il foglio attivo è il Foglio2.

    Eliminala. o modificala così:

    ActiveSheet.Range("A1").Select

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-09-08T09:01:42+00:00

    Mauro, allego anche questa immagine per spiegare meglio il problema.

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-09-08T08:58:46+00:00

    Ciao Norman, ciao Mauro, grazie per il vostro puntuale, cortese e professionale intervento.

    Per Norman : il tuo codice seppur modificato va benissimo, i tuoi codici sono sempre da studiare e da approfondire (grazie anche per questo, mi spingi a fare ciò proprio spinto dalla voglia di imparare e capire  altre soluzioni al problema vds il termine REsizeche hai utilizzato, sei una fonte molto  importante di informazioni e soluzioni).

    Per Mauro: stesso sentimento di stima e apprezzamento riservato a Norman.

    Ti allego l'immagine che riporta la riga in cui il tuo codice va in blocco. 

    P.S. i  fogli li ho rinominati in base alla mia reale esigenza, quindi FOGLICASSA (dove sono contenuti i dati) e Foglio1 dove si incollano i dati copiati).

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento