Condividi tramite

nome combobox selezionata su foglio

Anonimo
2017-08-16T17:49:39+00:00

Ciao a tutti

tramite le seguenti istruzioni:

Private Sub ComboBox1_Click()

xx = ComboBox1.TopLeftCell.Address

ottengo l'indirizzo di riferimento della combobox1 (ActiveX) posta sul mio foglio di lavoro.

Vorrei sapere se (senza ricorrere alle classi) è possibile ottenere tale indirizzo senza indicare il nome della combobox, per esempio:

me.activecontrol.topleftcell.address

che naturalmente non funziona.

Grazie in anticipo

saluti

domenico

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
2017-08-18T02:26:41+00:00

Ciao Domenico,

Comunque, non capisco la tua riluttanza ad abbracciare le classi con entusiasmo! A mio modesto parere, l'uso di classi aumenta drasticamente il potere e l'utilità di VBA.

Tanto per aiutare altri che avessero la stessa esigenza, ma che non avessero la tua aversione alle classe, e per dimostrare quanto è facile ottenere i risultati voluti, vorrei suggerire qualcosa del genere:

  • Alt+F11 per aprire l'editor di VBA
  • Alt+ICper inserire un nuovo modulo di classe
  • Nel nuovo modulo vuoto, incolla il seguente codice:

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

Option Explicit

Public WithEvents ComboBoxGroup As MSForms.ComboBox

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

Option Explicit

Public WithEvents ComboBoxGroup As MSForms.ComboBox

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

Private Sub ComboBoxGroup_Change()

    Call ReturnNameAndAddress

End Sub

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

Private Sub ReturnNameAndAddress()

    With ComboBoxGroup

        Call MsgBox( _

             Prompt:="Nome della ComboBox: " _

                     & .Name _

                     & vbNewLine & vbNewLine _

                     & "Indirizzo della ComboBox: " & ": " _

                     & .TopLeftCell.Address(0, 0, , 1), _

             Buttons:=vbInformation, _

             Title:="NOME E INDIRIZZO")

    End With

End Sub

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

  • Premi F4 per aprire la finestra proprietà del modulo classe
  • Sostituisci il valore della proprietà  Name dal valore default (tipicamente qualcosa del genere Class1) a clsComboBoxes
  • Alt+IMper inserire un nuovo modulo di codice standard
  • Nel nuovo modulo vuoto, incolla il seguente codice:

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

Option Explicit

Dim ComboBoxes() As New clsComboBoxes

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

Public Sub Tester()

    Dim WB As Workbook

    Dim SH As Worksheet

    Dim Rng As Range

    Dim oOleObj As OLEObject

    Dim oComboBox As MSForms.ComboBox

    Dim iCtr As Long

    Const sFoglio As String = "Foglio1"                '<<=== Modifica

    Set WB = ThisWorkbook

    Set SH = WB.Sheets(sFoglio)

    For Each oOleObj In SH.OLEObjects

        With oOleObj

            If TypeName(.Object) = "ComboBox" Then

                iCtr = iCtr + 1

                ReDim Preserve ComboBoxes(iCtr)

                Set oComboBox = .Object

                Set ComboBoxes(iCtr).ComboBoxGroup = oComboBox

            End If

        End With

    Next oOleObj

End Sub

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

  • Ctrl+R per accedere alla finestra Project Explorer ('Gestione progetti')
  • Fai doppio clic sul modulo ThisWorkbook (Questa_cartella_di_Lavoro) del file e incolla il seguente codice:

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

Option Explicit

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

Private Sub Workbook_Open()

    Call Tester

End Sub

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

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

Supponiamo che sul foglio  di interesse si trovino più oggetti Combox del tipo ActiveX.  Modificando il valore di qualsiasi delle ComboBox, si incontrerebbe un messaggio del genere:

Ai fini di questa dimostrazione, ho sfruttato l'evento ComboBoxGroup_Change per restituire le informazioni richieste. Tuttavia, è possibile utilizzare qualsiasi altro evento adatto, Ad esempio, per utilizzare uno o più degli eventi Click, DropButtonClick, o MouseDown, nel modulo classe, sostituisci la procedura dell'evento ComboBoxGroup_Change con una o più delle procedure evento successive:

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

Private Sub ComboBoxGroup_Click()

    Call ReturnNameAndAddress

End Sub

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

Private Sub ComboBoxGroup_DropButtonClick()

Call ReturnNameAndAddress

End Sub

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

Private Sub ComboBoxGroup_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

Call ReturnNameAndAddress

End Sub

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

Si può  scaricare il mio file di prova  Domenico20170818.xlsm

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-08-19T07:23:08+00:00

    Per analogia, un autista che lo ritenga opportuno potrebbe forse cambiare l'olio; il fatto che non comprende nulla sul servosterzo non dovrebbe impedirgli di godere dei suoi benefici. :-)

    Sei un grande Norman!

    cari saluti

    domenico

    La risposta è stata utile?

    0 commenti Nessun commento