Excel e VBA: copiare valori da un foglio ad un altro

Anonimo
2017-02-05T14:15:44+00:00

Buon Giorno a tutti,

Ho un foglio di Excel dove in posizione G6 si trova, come risultato di una formula, una coordinata di una cella (p.e. B6).

Vorrei poter tramite VBA (non sono un esperto),

Selezionare un determinato intervallo presente nel foglio attuale (p.e. D11:D13)

Prelevare il valore di G6

Selezionare, in un secondo foglio, la cella corrispondente al valore di G6

Incollare la selezione in tale posizione.

Ringrazio per l’aiuto.

Sergio

Link file di esempio:

https://1drv.ms/x/s!Aj3IGrPU_k_Zhi92EDV6HUr1Qmek

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
    2017-02-05T15:49:56+00:00

    Ciao Sergio,

    Grazie

    Non potevo sperare di meglio

    Grazie a te, Sergio, per il cortese riscontro.

    Spero che il motivo per cui ti ho suggerito di aprire un nuovo foglio a sia ormai chiaro!

    Postscriptum:

    Tu hai gentilmente contrasegnato la mia risposta ma, in qualche modo sconosciuto, sono riuscito a annularla (:-

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-02-05T15:43:56+00:00

    Grazie

    Non potevo sperare di meglio

    Sergio

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-02-05T15:15:25+00:00

    Ciao Sergio,

    Avrei dovuto anche spiegare che, purtroppo, le caselle di controllo sul tuo foglio Foglio di iscrizione non sono nominati in modo ordinato. Ad esempio, la prima casella di controllo è stato nominato Casella di controllo  32. Pertanto, per facilitare il funzionamento del mio codice, nel codice sul modulo standard, ho incluso la procedura RinominaCaselleDiControllo per rinominare le caselle di controllo in modo ordinato, cominciando con Casella di controllo 1.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-02-05T14:41:18+00:00

    Ciao Sergio,

    Ho un foglio di Excel dove in posizione G6 si trova, come risultato di una formula, una coordinata di una cella (p.e. B6).

    Vorrei poter tramite VBA (non sono un esperto),

    Selezionare un determinato intervallo presente nel foglio attuale (p.e. D11:D13)

    Prelevare il valore di G6

    Selezionare, in un secondo foglio, la cella corrispondente al valore di G6

    Incollare la selezione in tale posizione.

    Link file di esempio:

    https://1drv.ms/x/s!Aj3IGrPU_k_Zhi92EDV6HUr1Qmek

    Forse la seguente soluzione ti piaccerebbe:

    • Fai clic dx sulla linguetta del foglio di interesse
    • Seleziona l'opzione Visualizza Codice dal **** menu contestuale risultante
    • Incolla il seguente codice:

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

    Option Explicit

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

    Private Sub Worksheet_Change(ByVal Target As Range)

        Dim destSH As Worksheet

        Dim srcRng As Range, destRng As Range, AddressRng As Range

        Dim oCheckBox As CheckBox

        Const sFoglio As String = "Foglio di iscrizione"           '<<=== Modifica

        Const sCellaCasellaRiepilogo As String = "C6"              '<<=== Modifica

        Const sCellaIndirizzo As String = "G6"                          '<<=== Modifica

        With Me

            Set srcRng = .Range(sCellaCasellaRiepilogo)

            Set AddressRng = .Range(sCellaIndirizzo)

        End With

        If Not Intersect(srcRng, Target) Is Nothing Then

            Set destSH = ThisWorkbook.Sheets(sFoglio)

            On Error Resume Next

            Set destRng = destSH.Range(AddressRng.Value)

            On Error GoTo 0

            If Not destRng Is Nothing Then

                Set destRng2 = destRng.Resize(1, 5)

                ArrDati = destRng2.Value

                Call DisplayUserform

            End If

        End If

    End Sub

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

    • Alt+IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice

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

    Option Explicit

    Public ArrDati As Variant

    Public destRng2 As Range

    Public bCheck As Boolean

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

    Public Sub DisplayUserform()

        UserForm1.Show vbModeless

    End Sub

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

    Public Sub RinominaCasselleDiControllo()

        Dim SH As Worksheet

        Dim oCheckBox As CheckBox

        Dim LRow As Long

        Set SH = ThisWorkbook.Sheets("Foglio di iscrizione")

        For Each oCheckBox In SH.CheckBoxes

            With oCheckBox

                .Name = "Casella di controllo " & .TopLeftCell.EntireRow.Cells(2).Value

            End With

        Next oCheckBox

    End Sub

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

    • Alt+IM per creare una Userform

    Sulla Userform, in qualsiasi posizione, inserisci:

    1. 5 x oggetti TextBox
    2. 5x  oggetti Label
    3. 1 x oggetto CheckBox
    4. 2 x oggetti CommandButton
    • F7 per aprire il modulo del codice della Userform
    • Nel nuovo modulo vuoto, incolla il seguente codice:

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

    Option Explicit

    Dim aSH As Worksheet

    Private Const sCheckBoxPrefisso As String = "Casella di controllo "

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

    Private Sub UserForm_Initialize()

        Dim arrTitoli As Variant

        Dim i As Long, j As Long

        Dim dHeight2 As Double

        Dim dLeft As Double, dLeft2 As Double

        Dim dWidth As Double

        Dim bFlag As Boolean

        Const dLabelWidth As Double = 80

        Const dHeight As Double = 18

        Const dLabelLeft As Double = 6

        Const dTextboxLeft As Double = 90

        Const dTextboxWidth = 118

        Const dGap As Double = 10

        Const sTitles As String = "N.:," _

            & "NOME GIOCATORE:," _

            & "NOME ARBITRO:," _

            & "TELEFONO:," _

            & "E-MAIL:," _

            & "DISPONIBILE (Volontario):"

        arrTitoli = Split(sTitles, ",")

        Set aSH = destRng2.Parent

        With Me

            .Height = 200

            .Width = 300

            .Caption = "AGGIORNA RECORD"

            For i = 1 To 5

                With .Controls("Label" & i)

                    .Height = dHeight

                    .Width = dLabelWidth

                    .Left = dLabelLeft

                    .Top = 10 + (dHeight + dGap) * (i - 1)

                    .Caption = arrTitoli(i - 1)

                End With

                With .Controls("TextBox" & i)

                    .Height = dHeight

                    .Width = dTextboxWidth

                    .Left = dTextboxLeft

                    .Top = 10 + (dHeight + dGap) * (i - 1)

                    .BackColor = &HC0FFFF

                    On Error Resume Next

                    .Text = ArrDati(1, i)

                    On Error GoTo 0

                End With

                On Error GoTo 0

            Next i

            With .TextBox5

                dHeight2 = .Top + .Height + dGap

                dLeft = .Left

                dLeft2 = dLeft + .Width + dGap

                dWidth = .Width

            End With

            With .CheckBox1

                .Top = dHeight2

                .Left = dLeft

                .Width = dWidth

                .Caption = arrTitoli(5)

                bFlag = aSH.CheckBoxes(sCheckBoxPrefisso _

                                      & destRng2.Row - 5).Value = 1

                .Value = bFlag

                .Enabled = True

            End With

            With Me.CommandButton1

                .Caption = "Aggiorna Record"

                .Top = Me.Height / 3

                .Height = dHeight + 5

                .Left = dLeft2

                .Width = 70

                .BackColor = vbGreen

            End With

            With Me.CommandButton2

                .Caption = "Esci!"

                .Top = Me.CheckBox1.Top

                .Height = dHeight + 5

                .Left = dLeft2 + 20

                .Width = 40

                .BackColor = vbRed

            End With

        End With

    End Sub

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

    Private Sub CommandButton2_Click()

        Unload Me

    End Sub

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

    Private Sub CommandButton1_Click()

        Dim i As Long

        With destRng2

            For i = 1 To 5

                destRng2.Cells(1, i).Value = Me.Controls("TextBox" & i).Value

            Next i

            .Parent.CheckBoxes(sCheckBoxPrefisso & .Row - 5).Value = _

            Me.CheckBox1.Value

        End With

    End Sub

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

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel
    • Salva il file con l’estensione xlsm

    Potresti scaricare il mio file di prova Sergio20170205.xlsm a:

    https://www.dropbox.com/s/1w34la2dqsio4dz/Sergio20170205.xlsm?dl=0

    Per vedere il funzionamento del codice,  modifica il valore della cella C6 sul secondo foglio ...

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento