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:
- 5 x oggetti TextBox
- 5x oggetti Label
- 1 x oggetto CheckBox
- 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
