chiudere foglio attivo

Anonimo
2017-02-18T09:44:50+00:00

Buona giornata.

Nella cartella Conteggi ho diversi fogli:

nel foglio Saldo viene  calcolato e registrato il saldo  in Range("O39").

dal foglio Conto devo aprire il foglio Saldo, leggere il valore di Range("O39") e scriverlo nel foglio Conto:

Range("B40")= Range ("O39").

Problema come aprire e chiudere il foglio Saldo stando nel foglio Conto.

Ho provato così:

  Worksheets("Saldo").Activate

  Range("B40") = Worksheets("Saldo").Range("O39")

 a questo punto dovrei uscire dal foglio Saldo e restare nel foglio Conto.

Non so proprio come fare.

Potete darmi una mano.

Grazie.

Ciao.

Nunzio.

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

5 risposte

Ordina per: Più utili
  1. Anonimo
    2017-02-18T16:52:52+00:00

    Ciao Nunzio,

    Grazie delle diverse soluzioni proposte

    Prego!

    ma, credo che debba precisare meglio la mia situazione.    

    Credo sia sempre consigliabile! :-))

    Nel foglio Saldo ottengo il risultato in Range("O39") solo se apro il foglio, altrimenti non mi calcola il saldo.

    Quindi il mio problema è:

    dal  foglio Conto devo aprire il foglio Saldo.

    Chiudere il foglio saldo e tornare o restare sul foglio Conto.

    Copiare il Range("O39") del foglio Saldo in Range("B40") del foglio Conto:

      With ThisWorkbook

            .Sheets("Conto").Range("B40").Value = _

                        .Sheets("Saldo").Range("O39").Value

        End With

     ++++++++++++++++++++++++++++++++++++

    Codice nel foglio Saldo per calcolare il saldo in colonna O

    Private Sub Worksheet_Activate()

      If Range("M42") > 0 Then Range("O42") = Range("M42") Else Range("O42") = Range("N42")

      If Range("M42") = "" And Range("N42") = "" Then Range("O42") = 0.001

      For d = 43 To Nr                                                                 ' Calcola Totale in col. O

        If Range("E" & d) = "" Then Exit For

        If Range("M" & d) <> "" Then Range("O" & d) = Range("O" & d - 1) + Range("M" & d)

        If Range("N" & d) <> "" Then Range("O" & d) = Range("O" & d - 1) - Range("N" & d)

        If Range("M" & d) <> "" And Range("N" & d) <> "" Then Range("O" & d) = Range("O" & d - 1) + Range("M" & d) -     Range("N" & d)

      Next

    End Sub

    Codice nel foglio Saldo per calcolare il saldo in colonna O

    Private Sub Worksheet_Activate()

      If Range("M42") > 0 Then Range("O42") = Range("M42") Else Range("O42") = Range("N42")

      If Range("M42") = "" And Range("N42") = "" Then Range("O42") = 0.001

      For d = 43 To Nr                                                                 ' Calcola Totale in col. O

        If Range("E" & d) = "" Then Exit For

        If Range("M" & d) <> "" Then Range("O" & d) = Range("O" & d - 1) + Range("M" & d)

        If Range("N" & d) <> "" Then Range("O" & d) = Range("O" & d - 1) - Range("N" & d)

        If Range("M" & d) <> "" And Range("N" & d) <> "" Then Range("O" & d) = Range("O" & d - 1) + Range("M" & d) -     Range("N" & d)

      Next

    End Sub

    La tua necessità di selezionare il foglio Saldo è dettata dal fatto che stai sfruttando l`evento Worksheet_Activate per aggiornare i valori del foglio Saldo. fatto non indicato in precedenza!  -;)

    Tuttavia, rimango immutabilmente del parere che la selezione del foglio sia utilmente evitabile. Vedo almeno due modi per risolvere il problema ma vorrei vedere il tuo file. Quindi, ti chiederei gentilmente di caricare il file problematico, dopo averlo depurato dei dati sensibili, su un servizio di condivisione di file, per esempio Microsoft OneDrive o DropBox, e di postare un link al file in una risposta qui.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2017-02-19T09:46:41+00:00

    Ciao Norman

    Grazie per la risposta che mi ha suggerito di risolvere il problema in questo modo che mi permette

    di calcolare il saldo da qualsiasi foglio:

    Private Sub CalcoloSaldo()

      Dim Nr1 As Long

      For d = 43 To 200     'Nr                                                                 ' Calcola Totale in col. O

        If Worksheets("Saldo").Range("E" & d) = "" Then Exit For

        If Worksheets("Saldo").Range("M" & d) <> "" Then Worksheets("Saldo").Range("O" & d) = Worksheets("Saldo").Range("O" & d - 1) + Worksheets("Saldo").Range("M" & d)

        If Worksheets("Saldo").Range("N" & d) <> "" Then Worksheets("Saldo").Range("O" & d) = Worksheets("Saldo").Range("O" & d - 1) - Worksheets("Saldo").Range("N" & d)

        If Worksheets("Saldo").Range("M" & d) <> "" And Worksheets("Saldo").Range("N" & d) <> "" Then

          Worksheets("Saldo").Range("O" & d) = Worksheets("Saldo").Range("O" & d - 1) + Worksheets("Saldo").Range("M" & d) - Worksheets("Saldo").Range("N" & d)

        End If

      Next

      Nr1 = Worksheets("Saldo").Range("O65536").End(xlUp).Row                                   ' prima riga vuota in colonna O

      Worksheets("Saldo").Range("O39") = Worksheets("Saldo").Range("O" & Nr1)

      Range("B40") = Worksheets("Saldo").Range("O39")                                           ' saldo in cassa

    End Sub

    Tante, tante  grazie per l'aiuto.

    Ciao.

    Nunzio.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-02-18T16:12:29+00:00

    Ciao Norman.

    Ho aggiunto le ultime due righe.

    Grazie delle diverse soluzioni proposte ma, credo che debba precisare meglio la mia situazione.

    Nel foglio Saldo ottengo il risultato in Range("O39") solo se apro il foglio, altrimenti non mi calcola il saldo.

    Quindi il mio problema è:

    dal  foglio Conto devo aprire il foglio Saldo.

    Chiudere il foglio saldo e tornare o restare sul foglio Conto.

    Copiare il Range("O39") del foglio Saldo in Range("B40") del foglio Conto:

      With ThisWorkbook

            .Sheets("Conto").Range("B40").Value = _

                        .Sheets("Saldo").Range("O39").Value

        End With

     ++++++++++++++++++++++++++++++++++++

    Codice nel foglio Saldo per calcolare il saldo in colonna O

    Private Sub Worksheet_Activate()

      If Range("M42") > 0 Then Range("O42") = Range("M42") Else Range("O42") = Range("N42")

      If Range("M42") = "" And Range("N42") = "" Then Range("O42") = 0.001

      For d = 43 To Nr                                                                 ' Calcola Totale in col. O

        If Range("E" & d) = "" Then Exit For

        If Range("M" & d) <> "" Then Range("O" & d) = Range("O" & d - 1) + Range("M" & d)

        If Range("N" & d) <> "" Then Range("O" & d) = Range("O" & d - 1) - Range("N" & d)

        If Range("M" & d) <> "" And Range("N" & d) <> "" Then Range("O" & d) = Range("O" & d - 1) + Range("M" & d) -     Range("N" & d)

      Next

      Nr1 = Range("O65536").End(xlUp).Row                                           ' prima riga vuota in colonna O

      Range("O39") = Range("O" & Nr1)                                                  ' saldo in cassa

    End Su

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-02-18T16:01:37+00:00

    Ciao Norman.

    Grazie delle diverse soluzioni proposte ma, credo che debba precisare meglio la mia situazione.

    Nel foglio Saldo ottengo il risultato in Range("O39") solo se apro il foglio, altrimenti non mi calcola il saldo.

    Quindi il mio problema è:

    dal  foglio Conto devo aprire il foglio Saldo.

    Chiudere il foglio saldo e tornare o restare sul foglio Conto.

    Copiare il Range("O39") del foglio Saldo in Range("B40") del foglio Conto:

      With ThisWorkbook

            .Sheets("Conto").Range("B40").Value = _

                        .Sheets("Saldo").Range("O39").Value

        End With

     ++++++++++++++++++++++++++++++++++++

    Codice nel foglio Saldo per calcolare il saldo in colonna O

    Private Sub Worksheet_Activate()

      If Range("M42") > 0 Then Range("O42") = Range("M42") Else Range("O42") = Range("N42")

      If Range("M42") = "" And Range("N42") = "" Then Range("O42") = 0.001

      For d = 43 To Nr                                                                 ' Calcola Totale in col. O

        If Range("E" & d) = "" Then Exit For

        If Range("M" & d) <> "" Then Range("O" & d) = Range("O" & d - 1) + Range("M" & d)

        If Range("N" & d) <> "" Then Range("O" & d) = Range("O" & d - 1) - Range("N" & d)

        If Range("M" & d) <> "" And Range("N" & d) <> "" Then Range("O" & d) = Range("O" & d - 1) + Range("M" & d) -     Range("N" & d)

      Next

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-02-18T14:30:38+00:00

    Ciao Nunzio,

    Buona giornata.

    Nella cartella Conteggi ho diversi fogli:

    nel foglio Saldo viene  calcolato e registrato il saldo  in Range("O39").

    dal foglio Conto devo aprire il foglio Saldo, leggere il valore di Range("O39") e scriverlo nel foglio Conto:

    Range("B40")= Range ("O39").

    Problema come aprire e chiudere il foglio Saldo stando nel foglio Conto.

    Ho provato così:

      Worksheets("Saldo").Activate

      Range("B40") = Worksheets("Saldo").Range("O39")

     a questo punto dovrei uscire dal foglio Saldo e restare nel foglio Conto.

    Non so proprio come fare.

    Potete darmi una mano.

    Credo che la soluzione di gran lunga migliore ed efficiente sia sempre di cercare di evitare la selezione dei fogli !   In VBA è raramente necessario selezionare gli oggetti di Excel e, normalmente, sarebbe molto più efficiente di non farlo.

    Nel tuo caso, non vedo alcun necessità di spostarsi dal foglio Conto e, quindi, vorrei proporre il semplice:

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

        With ThisWorkbook

            .Sheets("Conto").Range("B40").Value = _

                        .Sheets("Saldo").Range("O39").Value

        End With

        '<<---------

    Oppure, meglio, qualcosa del genere:

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

    Option Explicit

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

    Public Sub Tester()

        Dim WB As Workbook

        Dim srcSH As Worksheet, destSH As Worksheet

        Set WB = ThisWorkbook

        With WB

            Set srcSH = .Sheets("Saldo")

            Set destSH = .Sheets("Conto")

        End With

        destSH.Range("B40").Value = srcSH.Range("O39").Value

    End Sub

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

    Più verbosa ma, a mio avviso, preferibile e ancora più flessibile, sarebbe:

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

    Option Explicit

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

    Public Sub Tester2()

        Dim WB As Workbook

        Dim srcSH As Worksheet, destSH As Worksheet

        Dim srcRng As Range, destRng As Range

        Const sFoglioSorgente As String = "Saldo"

        Const sFoglioDestinazione  As String = "Conto"

        Const sSorgente As String = "O39"

        Const sDestinazione As String = "B40"

        Set WB = ThisWorkbook

        With WB

            Set srcSH = .Sheets(sFoglioSorgente)

            Set destSH = .Sheets(sFoglioDestinazione)

        End With

        Set srcRng = srcSH.Range(sSorgente)

        Set destRng = destSH.Range(sDestinazione)

        destRng.Value = srcRng.Value

    End Sub

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

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento