Come ottengi riga e colonna della cella selezionata (oggetto Selection in una Macro) ?

Anonimo
2011-04-12T11:08:21+00:00

Salve a tutti,

la mia domanda è talmente stupida che non riesco a trovare una risposta....

Vi descrivo cosa sto cercando di fare:

-Nel foglio 1 ci sono 10 righe compilate dalla colonna A alla colonna E (i numeri sono fittizi...è per spiegarmi meglio)

-Nel foglio 2 ci sono 5 celle (non contigue) dove copiare il contenuto dell'i-esima riga (Ai, Bi, Ci, Di, Ei)

-Ho capito che per fare questo automaticamente ho bisongo di una Macro

-Ne ho fatta una molto semplice (è la prima che faccio in vita mia...):

Sub Macro5()

'

' Macro5 Macro

'

'

    Selection.Copy

    Sheets("Foglio2").Select

    Range("D11").Select

    ActiveSheet.Paste

    Sheets("Foglio1").Select

    Range("B1").Select

    Application.CutCopyMode = False

    Selection.Copy

    Sheets("Foglio2").Select

    Range("F14").Select

    ActiveSheet.Paste

    Sheets("Foglio1").Select

    Range("C1").Select

    Application.CutCopyMode = False

    Selection.Copy

    Sheets("Foglio2").Select

    Range("H15").Select

    ActiveSheet.Paste

    Sheets("Foglio1").Select

    Range("D1").Select

    Application.CutCopyMode = False

    Selection.Copy

    Sheets("Foglio2").Select

    Range("G19").Select

    ActiveSheet.Paste

    Sheets("Foglio1").Select

    Range("E1").Select

    Application.CutCopyMode = False

    Selection.Copy

    Sheets("Foglio2").Select

    Range("D16").Select

    ActiveSheet.Paste

End Sub

-questa Macro copia il contenuto delle celle A1:E1 in altrettante celle del Foglio2.

-ho capito che 'Selection' è la cella selezionata.

Cosa non riesco a fare:

-io ho bisogno che la Macro capisca in quale riga (i-esima) si trova la cella 'Selection' e copiare nelle 5 celle del Foglio2 il contenuto delle celle Ai, Bi, Ci, Di, Ei

Fatto ciò il Foglio2 deve essere stampato.

Vi ringrazio anticipatamente

A presto

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
2011-04-12T16:48:30+00:00

Grazie Mauro,

sei stato rapidissimo; hai risolto il mio problema.

Giacchè ci siamo (scusami se ne approfitto) tornerei sull'esempio precedente per chiederei un'ultima consulenza:

-alcune delle celle del Foglio1 le compilo utilizzando dei menu a cascata utilizzando la funzionalità "Convalida dati"; altre celle in cui scrivo delle formule le blocco per impedire che qualcuno le cancelli.

Mettendo insieme queste due funzionalità, vorrei, innoltre, bloccare delle celle in funzione del valore di altre.

Faccio un esempio:

-La cella A1 la setto con la "Convalida dati" (Scelta1, Scelta2, Scelta3);

-Se A1=Scelta1 --> Blocco B1 e Sblocco C1

-Se A2=Scelta2 --> Sblocco B1 e Blocco C2.

è proprio questo che non riesco a fare: bloccare e sbloccare dinamicamente alcune celle lasciando sempre attiva la protezione del foglio.

Con questo finirei il mio lavoro

Ancora grazie

Buona serata

Per favore, un post, una domanda. Grazie. Vale per la prossima volta... ;-)

Ora mettiamo tu abbia protetto il tuo foglio escluso la cella A1 dove hai la convalida con a e b come valori. Se selezioni a, sblocchi B1, se selezioni b, blocchi B1. Questo il codice da inserire nel modulo di codice del foglio dove vuoi questa cosa:

Private Sub Worksheet_Change(ByVal Target As Range)

    With Target

        If .Address = "$A$1" Then

            Me.Unprotect Password:="tuaPassword"

            If .Value = "a" Then

                .Offset(0, 1).Locked = False

            ElseIf .Value = "b" Then

                .Offset(0, 1).Locked = True

            End If

            Me.Protect Password:="tuaPassword"

        End If

    End With

End Sub

Dovrebbe essere abbastanza intuitivo come modificarlo per esigenze diverse. Se non riesci, chiedi pure, siamo(quasi) sempre qui. Grazie per l'attenzione.

La risposta è stata utile?

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2011-04-12T12:08:40+00:00

Vi descrivo cosa sto cercando di fare:

-Nel foglio 1 ci sono 10 righe compilate dalla colonna A alla colonna E (i numeri sono fittizi...è per spiegarmi meglio)

-Nel foglio 2 ci sono 5 celle (non contigue) dove copiare il contenuto dell'i-esima riga (Ai, Bi, Ci, Di, Ei)

-Ho capito che per fare questo automaticamente ho bisongo di una Macro

-Ne ho fatta una molto semplice (è la prima che faccio in vita mia...):

<cut>

-questa Macro copia il contenuto delle celle A1:E1 in altrettante celle del Foglio2.

-ho capito che 'Selection' è la cella selezionata.

Cosa non riesco a fare:

-io ho bisogno che la Macro capisca in quale riga (i-esima) si trova la cella 'Selection' e copiare nelle 5 celle del Foglio2 il contenuto delle celle Ai, Bi, Ci, Di, Ei

Fatto ciò il Foglio2 deve essere stampato.

Vi ringrazio anticipatamente

A presto

Se(se) ho capito quello che vuoi:

Public Sub m()

    Dim sh1 As Worksheet

    Dim sh2 As Worksheet

    Dim lRiga As Long

    With ThisWorkbook

        Set sh1 = .Worksheets("Foglio1")

        Set sh2 = .Worksheets("Foglio2")

    End With

    With sh1

        If ActiveSheet.Name = .Name Then

            If Selection.Rows.Count = 1 Then

                lRiga = Selection.Row

                sh2.Range("D11").Value = _

                    .Range("A" & lRiga).Value

                sh2.Range("F14").Value = _

                    .Range("B" & lRiga).Value

                sh2.Range("H15").Value = _

                    .Range("C" & lRiga).Value

                sh2.Range("G19").Value = _

                    .Range("D" & lRiga).Value

                sh2.Range("E16").Value = _

                    .Range("E" & lRiga).Value

            End If

        End If

    End With

    sh2.PrintOut

    Set sh1 = Nothing

    Set sh2 = Nothing

End Sub

Due spiegazioni. Foglio1 è dove hai i dati, Foglio2 dove vuoi vengano riportati. Cambia i nomi dei fogli con i tuoi. indipendentemente dal mio codice, per recuperare la posizione di una cella selezionata:

Public Sub m_1()

    With Selection

        MsgBox "Indirizzo: " & .Address & vbNewLine _

            & "Riga: " & .Row & vbNewLine _

            & "Colonna: " & .Column

    End With

End Sub

I riferimenti di riga e colonna in caso di selezione di più celle, si riferiscono alla cella in alto a sx.

La risposta è stata utile?

0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2011-04-15T10:13:42+00:00

    Niente da fare,

    non riesco a farlo funzionare.

    Se metto il tuo blocco di codice

    Private Sub Worksheet_Change(ByVal Target As Range)

        With Target

            If .Address = "$A$1" Then

                Me.Unprotect Password:="tuaPassword"

                If .Value = "a" Then

                    .Offset(0, 1).Locked = False

                ElseIf .Value = "b" Then

                    .Offset(0, 1).Locked = True

                End If

                Me.Protect Password:="tuaPassword"

            End If

        End With

    End Sub

    in una Cartella di lavoro nuova funziona perfettamente.

    Se provo a mettere il blocco di codice modificato secondo le mie esigenze nel mio foligo di lavoro

    Private Sub Worksheet_Change(ByVal Target As Range)

        With Target

            If .Address = "$F$5" Then

                Me.Unprotect Password:=""

                If .Value = "INTERVENTO" Then

                    .Offset(5, 7).Locked = True

                Else

                    .Offset(5, 7).Locked = False

                End If

                Me.Protect Password:=""

            End If

        End With

    End Sub

    non funziona; ho provato con il folgio già protetto e non, a mettere la password di protezione e non, ma niente da fare, non da segni di vita.

    Ho salvato il file .xlsm e ancora niente. Dal mio blocco si capisce (o almeno è quello che vorrei fare) che se nella cella F5 c'è scritto "INTERVENTO" la cella G5 ( .Offset(5, 7) ) deve essere bloccata; risultato: la cella è semrep bloccata se il foglio è protetto ed è sempre accessibile viceversa.

    Dov'è il mio errore?

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2011-04-12T18:01:11+00:00

    Grazie a te Mauro per la disponibilità e la cortesia, adesso tocca a me .... :)

    Buona serata

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2011-04-12T15:17:59+00:00

    Grazie Mauro,

    sei stato rapidissimo; hai risolto il mio problema.

    Giacchè ci siamo (scusami se ne approfitto) tornerei sull'esempio precedente per chiederei un'ultima consulenza:

    -alcune delle celle del Foglio1 le compilo utilizzando dei menu a cascata utilizzando la funzionalità "Convalida dati"; altre celle in cui scrivo delle formule le blocco per impedire che qualcuno le cancelli.

    Mettendo insieme queste due funzionalità, vorrei, innoltre, bloccare delle celle in funzione del valore di altre.

    Faccio un esempio:

    -La cella A1 la setto con la "Convalida dati" (Scelta1, Scelta2, Scelta3);

    -Se A1=Scelta1 --> Blocco B1 e Sblocco C1

    -Se A2=Scelta2 --> Sblocco B1 e Blocco C2.

    è proprio questo che non riesco a fare: bloccare e sbloccare dinamicamente alcune celle lasciando sempre attiva la protezione del foglio.

    Con questo finirei il mio lavoro

    Ancora grazie

    Buona serata

    La risposta è stata utile?

    0 commenti Nessun commento