Condividi tramite

ScrollBar su UserForm

Anonimo
2019-08-01T16:26:43+00:00

Ciao a tutti

Non riesco a trovare il modo di programmare la ScrollBar nell'allegato che contiene un file e poche immagini.

Premessa:

ricerca di personale specializzato.

All'avvio della Uform vengono caricati solo i primi 5 record del foglio. Questo perchè le immagini potrebbero essere molte, quindi pensavo di mostrarne solo 5 per volta.

Se si applica un filtro (posto in basso) vengono mostrati tutti quelli che hanno quella determinata categoria.

Il mio problema è la gestione della ScrollBar posta in basso a sinistra

vorrei che, in dipendenza dal filtro applicato (tutti o categoria scelta) mi mostrasse solo quelli del filtro, sia che lo scroll si incrementi o che si decrementi.

Es: scelgo "Elettricista" mi mostra le foto dei primi 5 elettricisti e incrementando lo scroll i successivi. Preciso che non di tutti ci saranno le immagini ed allo scopo c'è un jpg=NoFoto. 

Spero di essermi spiegato.

Grazie a tutti

cari 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

  1. Anonimo
    2019-08-01T18:22:40+00:00

    Ciao Domenico,

    cercherò di farti capire a cosa sono giunto in modo che tu comprenda quanto scritto,

    il codice che avevi nel progetto era un po confusionale e questo ti limitava molto dal poter raggiungere il tuo obiettivo quindi ho cercato di utilizzare la "separazione dei concetti" per poter rendere tutto piu semplice e leggibile.

    Innanzitutto e' stata creato un Modulo di Classe per gli "Artisti" che comprende le loro proprietà, questo rende più facile utilizzare l'oggetto Artisti e capire cosa si sta cercando di fare all'interno del progetto VBA.

    Poi sono giunto alla soluzione cercando di capire cosa volevi raggiungere e questi sono i passaggi che mi sono passati per la mente quando ho riscritto un po quello che avevi fatto:

    Quando premo il pulsante cosa voglio che accada?

    R: Si apra la form

    E finqui ci eri arrivato anche tu

    Cosa deve succedere quando si apre la form?

    R: Si devono caricare i componenti e impostare le variabili

    per rendere tutto questo pulito ho suddiviso le varie funzioni e creato delle variabili globali che serviranno alla userform per funzionare, essendo un contenitore di "Artisti" ho creato la collezione di "Artisti" che essa conterra', pertanto quando apro la form voglio che:

    Si impostino le variabili

    Si setti la scrollbar

    Si popoli la userform con i primi 5 artisti della collezione

    Si posizioni la userform

    Cosa deve succedere quando si cambia il filtro?

    R: La collezione di artisti viene resettata e vengono inseriti solo quelli della categoria selezionata

    Si resetta la collezione

    Si resetta la scrollbar

    Si ripopola la userform con i primi 5 artisti della nuova collezione

    Cosa deve succedere quando si clicca sulla scrollbar?

    R: Si devono caricare gli artisti successivi nella collezione

    Si ripopola la userform con gli artisti a partire dal

    valore minimo di 5 * il valore della scrollbar

    ad un massimo di 5 * il valore della scrollbar + 5

    Ecco lo zip con l'esempio aggiornato

    [Link a sito di terze parti rimosso dal Moderatore]

    Puoi ben vedere che ora qualsiasi modifica da fare bisogna farla solo nella funzione giusta, quindi tutto viene più semplice, se per esempio alla form vuoi aggiungere le note relativa all'artista dovrai solo andare a modificare la funzione che la popola.

    Fammi sapere se non dovessi capire qualcosa sarò felice di aiutarti.

    Saluti,

    Daniele

    La risposta è stata utile?

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

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2019-08-03T14:49:20+00:00

    Ciao e grazie ancora

    ho già segnalato la tua prima risposta come utile, c'è un altro modo per segnalarla come definitiva?

    saluti

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-08-03T10:30:08+00:00

    Ciao Dodo,

    Mi fa piacere che ti sia stato utile, separare i concetti nella programmazione e' fondamentale se si vuole creare del codice riutilizzabile e facilmente gestibile, purtroppo VBA non permette di fare cose molto avanzate e con l'avanzare del progetto nonostante gli accorgimenti, ci si ritroverà ad avere un monoblocco procedurale immenso da dover gestire.

    D'altra parte però per piccoli progetti come il tuo può essere un grande aiuto sia per la semplicità del codice che per la velocità con cui si scrive.

    Veniamo a noi,

    la ToString() e' una funzione prettamente di Debug, e' presente in quasi tutti i linguaggi di programmazione e serve a stampare l'oggetto o la classe (in vba si chiamano modulo di classe) come stringa per visualizzarne le proprietà.

    In questo caso e' implementata in automatico perché ho sviluppato un modulo che mi crea le classi generando le proprietà di esse con un solo click, dato che scrivere tutti i get e i let a mano sarebbe una cosa tediosa, soprattutto quando ci sono parecchi moduli da creare. 

    Se vorresti visualizzare nella finestra immediata le proprietà che quella classe ha impostato per verificarne il corretto funzionamento ti basterà scrivere

    Debug.Print nomeDellaVariabileArtista.ToString

    Il modulo che crea le classi in automatico lo puoi trovare sul mio GitHub https://github.com/exSnake/VBALibrary

    Una volta risolti tutti i tuoi dubbi ti chiedo cortesemente di segnalare la prima risposta (quella accettata, non questa) come definitiva in modo da chiudere il topic. Se avessi altre richiese ne potrai aprire un altro.

    Saluti

    Daniele

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2019-08-03T07:11:23+00:00

    Ciao Daniele

    che dire, è perfetto.

    Ora integrerò il tuo codice con parte del mio (non l'avevo sottoposto tutto perchè non serviva allo scopo).

    Gestisco tramite moduli di classe un arraycollection per individuare quale delle 5  label venga cliccata al fine di riportare sulla destra l'immagine più grande ed una serie di altre notizie relative all'artista.

    Solo una cosa, mi sfugge l'utilizzo della Public Function ToString() As String

    Grazie ancora e cari saluti

    domenico

    La risposta è stata utile?

    0 commenti Nessun commento