Risultati da 1 a 17 di 17

Discussione: memorizzare variabile NON su cella



  1. #1
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    526
    Versione Office
    2010 - Win10
    Likes ricevuti
    64
    Likes dati
    17

    Question memorizzare variabile NON su cella

    mi chedevo se era possibile memorizzare variabili non su celle
    mi spiego meglio
    a fronte di elaborazioni che poi condizionano lo scoprire o nascondere righe o colonne
    ora tramite una 'casella di controllo' sul foglio (che memorizza se spuntata o no) so lo stato di una determinata zona
    oppure scrivo il valore (vero/falso) su una cella
    mi chiedo se posso memorizzare una variabile che poi rimane salvata in fase di salvataggio file
    se uso userform a meno di leggere la variabile da qualche parte, si apre come da progetto e non come è stata settata l'ultima volte
    :111:________:999:
    n°3 - Win10pro + Office 2010 ----- n°1 - Win7pro + Office 2010 ----- n°1 - WinXPpro + Office 2010

  2. #2
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3207
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155
    Ciao Tom
    credo :235: si possa fare coi Nomi Definiti.
    Mi spiego: ad un Nome Definito assegniamo un valore; in fase di salvataggio e chiusura assegniamo un altro valore. Quando riapriamo il file in Workbook_Open dobbiamo far leggere questo valore.
    Un esempio: all'apertura ho una UsesrForm posizionata Left=100 e Top=100. Dopo aver fatto il lavoro e, per esempio, spostato la UserForm in Left=150 e Top=200, decido di salvare e chiudere: ecco, prima di salvare devo far in modo di "cambiare" il valore del Nome Definito con il nuovo valore. Quindi salvo e chiudo. Al momento che riapro il file, leggendo i NUOVI dati in WorkBook_Open, mi posiziona la UserForm.

    Ci sto (nei momenti liberi da impegni) lavorando sopra. Se concludo, posto il tutto. Nel frattempo prova anche tu se ritieni la cosa fattibile.

    Ciao,
    Mario

  3. #3
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    526
    Versione Office
    2010 - Win10
    Likes ricevuti
    64
    Likes dati
    17
    Citazione Originariamente Scritto da Marius44 Visualizza Messaggio
    Ciao Tom
    credo :235: si possa fare coi Nomi Definiti.
    Mi spiego: ad un Nome Definito assegniamo un valore; in fase di salvataggio e chiusura assegniamo un altro valore. Quando riapriamo il file in Workbook_Open dobbiamo far leggere questo valore.
    Un esempio: all'apertura ho una UsesrForm posizionata Left=100 e Top=100. Dopo aver fatto il lavoro e, per esempio, spostato la UserForm in Left=150 e Top=200, decido di salvare e chiudere: ecco, prima di salvare devo far in modo di "cambiare" il valore del Nome Definito con il nuovo valore. Quindi salvo e chiudo. Al momento che riapro il file, leggendo i NUOVI dati in WorkBook_Open, mi posiziona la UserForm.

    Ci sto (nei momenti liberi da impegni) lavorando sopra. Se concludo, posto il tutto. Nel frattempo prova anche tu se ritieni la cosa fattibile.

    Ciao,
    Mario
    il problema è che "Gestione Nomi" sotto Tab Formule fa riferimento ad una cella, o gruppi!!!
    oppure ho capito male.... e "Nomi Definiti" sono un'altra cosa??
    n°3 - Win10pro + Office 2010 ----- n°1 - Win7pro + Office 2010 ----- n°1 - WinXPpro + Office 2010

  4. #4
    L'avatar di GiuseppeMN
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Mantova
    Messaggi
    864
    Versione Office
    2000 - 2013
    Likes ricevuti
    285
    Likes dati
    160
    @ zio_tom, scrive:
    "Gestione Nomi" sotto Tab Formule fa riferimento ad una cella, o gruppi!!!
    Perdonami, zio_tom, ma, per quanto ne posso sapere, questo concetto è riduttivo.

    Ad esempio, è possibile definire un Nome non come riferimento ad una Cella o ad un Range, ma, come Valore:



    A questo punto Top e Left possono essere utilizati come Valori.

    Voglio dire se in una Cella scrivi:
    Codice: 
     = Top
    il Valore reso sarà:
    - 150
    Analogamente, se in una Cella scrivi:
    Codice: 
     = Left
    il Valore reso sarà:
    - 300


    A disposizione.

    Buona serata.

    Giuseppe
    Windows XP Excel 2000 - Windows 10 Excel 2013

  5. #5
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    526
    Versione Office
    2010 - Win10
    Likes ricevuti
    64
    Likes dati
    17
    i valori gli ho in VBA e li uso in VBA
    ho provato anch'io la cosa ma non mi da risultati
    se chiamo Top o Left dal VBA appena apro il file mii risultano vuoti
    forse perchè in gestione nomi non si dichiara il formato della variabile
    e poi c'è quel riferito a: =100 che mi lascia qualche dubbio come pure ambito: Cartella di lavoro

    PS: io per costanti intendo quelle che si dichiarano tipo
    Public Const Pig As Double = 3.14159265358979 'pi greco
    n°3 - Win10pro + Office 2010 ----- n°1 - Win7pro + Office 2010 ----- n°1 - WinXPpro + Office 2010

  6. #6

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1011
    Versione Office
    .
    Likes ricevuti
    365
    Likes dati
    0
    Ciao,
    un esempio:
    nel tuo file vai in "Gestione nomi" e crea questi due nomi:
    • usrfrmTop ---> Riferito a :: = 0
    • usrfrmLeft ---> Riferito a :: = 0


    poi nel modulo di classe della tua userform metti questo codice:

    Codice: 
    Private Sub UserForm_Initialize()
      Me.StartUpPosition = 0
      Me.Top = [usrfrmTop]
      Me.Left = [usrfrmLeft]
    End Sub
    
    
    
    
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
      ThisWorkbook.Names("usrfrmTop").Value = Me.Top
      ThisWorkbook.Names("usrfrmLeft").Value = Me.Left
    End Sub
    Apri la userfrom, spostala e poi chiudila. Poi riaprila e vedrai che si posiziona dove l'avevi chiusa.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  7. I seguenti 2 utenti hanno dato un "Like" a scossa per questo post:


  8. #7
    L'avatar di GiuseppeMN
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Mantova
    Messaggi
    864
    Versione Office
    2000 - 2013
    Likes ricevuti
    285
    Likes dati
    160
    Credo che la risposta di Scossa (che saluto) rispecchi esattamente quanto volevo esprimere nella mia Risposta #4

    Contestualmente sono fermamente convinto che senza un Tuo File, senza dati sensibili ma completo di quanto vuoi ottenere, potremmo continuare con questa discussione all'infinito.
    Windows XP Excel 2000 - Windows 10 Excel 2013

  9. #8
    L'avatar di Marius44
    Clicca e Apri
    Data Registrazione
    Sep 2015
    Località
    Catania
    Età
    73
    Messaggi
    3207
    Versione Office
    Excel2010
    Likes ricevuti
    625
    Likes dati
    155
    Grande scossa!!!
    Ecco chi mi aveva dato l'idea per il mio suggerimento #2. Quando ho letto l'intervento di scossa sono andato di corsa a rivedere alcuni appunti (che conservo gelosamente) ed ecco il risultato come da allegato.
    Ovviamente il merito va tutto a scossa, io ho solo messo in opera i suoi suggerimenti.


    Prova e dimmi se non è quello che cercavi. Ciao a tutti,
    Mario

    PS per l'altro problema sto scartabellando i miei appunti.

  10. I seguenti utenti hanno dato un "Like"


  11. #9
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    526
    Versione Office
    2010 - Win10
    Likes ricevuti
    64
    Likes dati
    17
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ciao,
    un esempio:
    nel tuo file vai in "Gestione nomi" e crea questi due nomi:
    • usrfrmTop ---> Riferito a :: = 0
    • usrfrmLeft ---> Riferito a :: = 0


    poi nel modulo di classe della tua userform metti questo codice:

    Codice: 
    Private Sub UserForm_Initialize()
      Me.StartUpPosition = 0
      Me.Top = [usrfrmTop]
      Me.Left = [usrfrmLeft]
    End Sub
    
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
      ThisWorkbook.Names("usrfrmTop").Value = Me.Top
      ThisWorkbook.Names("usrfrmLeft").Value = Me.Left
    End Sub
    Apri la userfrom, spostala e poi chiudila. Poi riaprila e vedrai che si posiziona dove l'avevi chiusa.
    Grazie
    il discorso della posizione era un semplice esempio di Marius, della posizione a me non interessa
    il discorso è come usare "Gestione Nomi"

    a me interessava memorizzare lo stato (Vero/Falso)
    delle "Caselle di Controllo" ne ho una decina su di una UserForm

    avevo provato qualcosa di simile, condividendo le variabili, ma non funzionava
    provo con QueryClose
    ma le variabili di "Gestione Nomi" non serve dichiararle Public in VBA???
    la chiave penso sia
    ThisWorkbook.Names("xxx").Value
    che NON usavo

    :111: :999:
    n°3 - Win10pro + Office 2010 ----- n°1 - Win7pro + Office 2010 ----- n°1 - WinXPpro + Office 2010

  12. #10
    L'avatar di GiuseppeMN
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Mantova
    Messaggi
    864
    Versione Office
    2000 - 2013
    Likes ricevuti
    285
    Likes dati
    160
    Poi, prometto, non ti disturbo più e, passo la mano.

    UserForm con una decina di CheckBox.

    Esempio di CheckBox_01:
    Codice: 
    Private Sub CheckBox_01_Change()
        ActiveWorkbook.Names.Add Name:="ChB_01", RefersToR1C1:=CheckBox_01.Value
    End Sub
    Analogamente per tutti gli altri CheckBox

    Giuseppe
    Windows XP Excel 2000 - Windows 10 Excel 2013

  13. I seguenti utenti hanno dato un "Like"


  14. #11
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    526
    Versione Office
    2010 - Win10
    Likes ricevuti
    64
    Likes dati
    17
    posto il file Marius
    con un tentativo con 3 CheckBox
    ma sicuramente sbaglio qualcosa
    forse Gestione Nomi non accetta variabili Booleane
    n°3 - Win10pro + Office 2010 ----- n°1 - Win7pro + Office 2010 ----- n°1 - WinXPpro + Office 2010

  15. #12
    L'avatar di GiuseppeMN
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Mantova
    Messaggi
    864
    Versione Office
    2000 - 2013
    Likes ricevuti
    285
    Likes dati
    160
    Non mi permetto cero di accedere al File per Marius, ma:
    Solo per chi è interessato alla cosa:
    Codice: 
    Codice: 
    CheckBox_01.Value
    

    non rende una variabile Booleana?
    Windows XP Excel 2000 - Windows 10 Excel 2013

  16. #13
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    526
    Versione Office
    2010 - Win10
    Likes ricevuti
    64
    Likes dati
    17
    RISOLTO
    per assegnare i valore a "Gestioni Nomi" bisogna trasformare i boolean in integer CInt( , e viceversa CBool(
    e tutto funziona
    Codice: 
    Option Explicit
    Public nTop As Double
    Public nLeft As Double
    
    Public ChB01 As Integer
    Public ChB02 As Integer
    Public ChB03 As Integer
    Codice: 
    Private Sub UserForm_Initialize()
      nTop = [FormTop]
      nLeft = [FormLeft]
      Me.Top = nTop
      Me.Left = nLeft
      Cells(1, 8) = nTop: Cells(2, 8) = nLeft
      
      CheckBox1.Value = CBool([ChB_01])
      CheckBox2.Value = CBool([ChB_02])
      CheckBox3.Value = CBool([ChB_03])
      
      Cells(5, 8) = [ChB_01]: Cells(6, 8) = [ChB_02]: Cells(7, 8) = [ChB_03]
      
    End Sub
    
    Private Sub UserForm_Terminate()
      ThisWorkbook.Names("FormTop").RefersTo = "=" & Int(nTop)
      ThisWorkbook.Names("FormLeft").RefersTo = "=" & Int(nLeft)
      Cells(1, 9) = nTop
      Cells(2, 9) = nLeft
      
      ChB01 = CInt(CheckBox1.Value)
      ChB02 = CInt(CheckBox2.Value)
      ChB03 = CInt(CheckBox3.Value)
      
      ThisWorkbook.Names("ChB_01").RefersTo = "=" & ChB01
      ThisWorkbook.Names("ChB_02").RefersTo = "=" & ChB02
      ThisWorkbook.Names("ChB_03").RefersTo = "=" & ChB03
    
      Cells(5, 8) = [ChB_01]: Cells(6, 8) = [ChB_02]: Cells(7, 8) = [ChB_03]
    End Sub
    n°3 - Win10pro + Office 2010 ----- n°1 - Win7pro + Office 2010 ----- n°1 - WinXPpro + Office 2010

  17. #14

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1011
    Versione Office
    .
    Likes ricevuti
    365
    Likes dati
    0
    Citazione Originariamente Scritto da zio_tom Visualizza Messaggio
    RISOLTO
    per assegnare i valore a "Gestioni Nomi" bisogna trasformare i boolean in integer CInt( , e viceversa CBool(
    Non è assolutamente necessario.

    Prova il seguente codice (in un file nuovo). In pratica creo una matrice di valori boolean e li memorizzo in un name.
    Quindi anziché fare un name per ogni controllo puoi farti un array dei singoli valori e memorizzrlo in un solo name:

    Codice: 
    Sub prova()
      Dim aVar() As Variant
      Dim j As Long
      
    ' ------------------------ eseguire solo la prima volta ------------------------ '
      aVar = Array(True, False, False, True)
      ThisWorkbook.Names.Add Name:="Matrice", RefersTo:=aVar
      Erase aVar
    ' ------------------------------------------------------------------------------ '
    
      
      aVar = [matrice]            '<---- aVar ha indice con base 1
      
      Debug.Print UBound(aVar)
      For j = 1 To UBound(aVar)
        Debug.Print aVar(j)
        aVar(j) = Not aVar(j)     '<---- inverto il valore
        Debug.Print aVar(j)
      Next j
      ThisWorkbook.Names("Matrice").RefersTo = aVar   'memorizzo nel name i nuovi valori dell'array
      Erase aVar
    End Sub
    Puoi controllare i valori della matrice anche in una cella (seleziona le celle A2:D2, scrivi =Matrice e conferma con ctrl+maiusc+invio):

    A
    B
    C
    D
    1
    {=Matrice}
    2
    FALSO
    VERO
    VERO
    FALSO
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  18. #15
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    526
    Versione Office
    2010 - Win10
    Likes ricevuti
    64
    Likes dati
    17
    amo poco le matrici e se posso le evito, perdo di immediatezza
    è vero che ho una sola variabile, ma in ogni caso devo riempire la matrice
    e poi scandirla in fase di lettura per attribuire i valori
    quindi ne vedo pochi vantaggi
    didatticamente valido.... ho imparato qualcosa
    Grazie scossa :111:
    il mio cervello ha tecnologia RISC pochi tipi di istruzioni :188:
    :999:
    n°3 - Win10pro + Office 2010 ----- n°1 - Win7pro + Office 2010 ----- n°1 - WinXPpro + Office 2010

  19. #16

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1011
    Versione Office
    .
    Likes ricevuti
    365
    Likes dati
    0
    Citazione Originariamente Scritto da zio_tom Visualizza Messaggio
    amo poco le matrici e se posso le evito, perdo di immediatezza
    è vero che ho una sola variabile, ma in ogni caso devo riempire la matrice
    e poi scandirla in fase di lettura per attribuire i valori
    quindi ne vedo pochi vantaggi
    Ok, resta comunque valido il discorso che puoi memorizzare direttamente in un name un valore boolean.

    Ciao.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  20. #17
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    526
    Versione Office
    2010 - Win10
    Likes ricevuti
    64
    Likes dati
    17
    Citazione Originariamente Scritto da scossa Visualizza Messaggio
    Ok, resta comunque valido il discorso che puoi memorizzare direttamente in un name un valore boolean.
    Ciao.
    questo è fuori discussione.... anche oggi ho imparato qualcosa..... grazie :111:

    :999:
    n°3 - Win10pro + Office 2010 ----- n°1 - Win7pro + Office 2010 ----- n°1 - WinXPpro + Office 2010

Discussioni Simili

  1. Memorizzare in una variabile il valore contenuto nella cella di una tabella.
    Di alfrimpa nel forum Domande sul Microsoft Word
    Risposte: 8
    Ultimo Messaggio: 27/10/16, 16:20
  2. Sommare in una cella, memorizzare ed azzerare i campi d'appoggio...(con pulsante)
    Di LukaFranzoni nel forum Domande su Excel VBA e MACRO
    Risposte: 9
    Ultimo Messaggio: 27/10/16, 14:46
  3. [Risolto] Nome Foglio come variabile in una cella
    Di Edoardo91 nel forum Domande su Excel in generale
    Risposte: 2
    Ultimo Messaggio: 04/10/16, 23:00
  4. Macro per lanciare .bat con nome variabile inserito in una cella
    Di Gambry nel forum Domande su Excel VBA e MACRO
    Risposte: 10
    Ultimo Messaggio: 15/06/16, 22:06
  5. Ricavare da colonna una variabile e stamparla in una cella
    Di Bestpaul nel forum Domande su Excel in generale
    Risposte: 7
    Ultimo Messaggio: 06/12/15, 12:05

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •