Do Until con array

di il
5 risposte

Do Until con array

Salve, non riesco a venirne a capo con questa semplice istruzione VBA:

Private Sub Sollecito_Pagamento_Click()

Dim iMsg As Integer
Dim programma As Object
Dim documento As Object
Dim datiForm As Recordset
Dim AnnoNP As String


Set datiForm = Mancati_Pagamenti.Form.RecordsetClone

AnnoNP = ""
datiForm.MoveFirst
Do Until datiForm.EOF
AnnoNP = AnnoNP & datiForm!Anno & " "
datiForm.MoveNext
Loop

iMsg = MsgBox("Preparazione Lettera Sollecito" & Chr(13) & Chr(10) & "IL DOCUMENTO VIENE SALVATO IN AUTOMATICO NELLA CARTELLA CONDIVISA 'Sollecito' DAL NOME: 'COGNOME NOME' Lettera Sollecito.docx", vbExclamation + vbYesNo, "Creazione Lettera Sollecito")
If iMsg = vbYes Then     'se clicco il pulsante Si

documento.Bookmarks("AnninonPagati").Select
programma.Selection.TypeText ("" & AnnoNP)

Mancati_Pagamenti.Form.RecordsetClone e una sottomaschera che preleva gli anni non pagati da query 

Estraggo i dati e li inserisce su word tramite bookmark senza problemi insieme ad altri dati (ANNONP :2022-2023-2024-2025).

Avrei necessità di creare AnnoNP[0]= 2022 ; AnnoN[1]= 2023 ; AnnoNP[2]= 2024 ; AnnoNP[3] = 2025

Non riesco a venirne a capo.

Grazie

5 Risposte

  • Re: Do Until con array

    14/07/2025 - meopatacca ha scritto:

    Avrei necessità di creare AnnoNP[0]= 2022 ; AnnoN[1]= 2023 ; AnnoNP[2]= 2024 ; AnnoNP[3] = 2025

    che problema riscontri?

    "select Year(anno) as MyAnnoNP from tabella group by MyAnnoNP desc" ti da come risposta un array con gli anni

    opzione da a:

    "select Year(anno) as MyAnnoNP from tabella where Year(anno) > [datainiziale] and Year(anno) < [datafinale] group by MyAnnoNP desc" 

    Do Until datiForm.EOF

    AnnoNP = AnnoNP & datiForm!Anno & " "   // primo ciclo AnnoNP vale 2001 secondo ciclo  AnnoNP vale "2001 2002" ecc... dove hai specificato un array?

    datiForm.MoveNext 

    annoNP alla fine sarà SOLO "2001 2002 2003 2004 ... 200N" una stringa non è un array.

  • Re: Do Until con array

    Infatti sto cercando di capire come generare un'array dalla stringa AnnoNP 

    Faccio una pre query

    SELECT DISTINCT contatti.COGNOME, contatti.ID, contatti.NOME, pagamenti.Anno, contatti.DATA_ISCRIZIONE, Year([Data_iscrizione]) AS ISC_Anno, contatti.[E-MAIL], contatti.INDIRIZZO, contatti.CAP, contatti.CITTA, contatti.PROVINCIA
    FROM contatti, pagamenti
    WHERE (((contatti.id)=[Maschere]![Dettagli contatto]![ID]));
    

     la confronto con 

    SELECT MancatiPagamenti_pre.ID, MancatiPagamenti_pre.COGNOME, MancatiPagamenti_pre.NOME, MancatiPagamenti_pre.Anno, Year([Data_iscrizione]) AS ISC_Anno, MancatiPagamenti_pre.INDIRIZZO, MancatiPagamenti_pre.[E-MAIL], MancatiPagamenti_pre.CAP, MancatiPagamenti_pre.CITTA, MancatiPagamenti_pre.PROVINCIA
    FROM MancatiPagamenti_pre LEFT JOIN PAGAMENTI ON (MancatiPagamenti_pre.Anno = PAGAMENTI.anno) AND (MancatiPagamenti_pre.id = PAGAMENTI.id_Pagamenti)
    GROUP BY MancatiPagamenti_pre.ID, MancatiPagamenti_pre.COGNOME, MancatiPagamenti_pre.NOME, MancatiPagamenti_pre.Anno, MancatiPagamenti_pre.INDIRIZZO, MancatiPagamenti_pre.[E-MAIL], MancatiPagamenti_pre.CAP, MancatiPagamenti_pre.CITTA, MancatiPagamenti_pre.PROVINCIA, PAGAMENTI.id, MancatiPagamenti_pre.DATA_ISCRIZIONE
    HAVING (((MancatiPagamenti_pre.Anno) Between Year([Data_iscrizione]) And Year(Date())) AND ((PAGAMENTI.id) Is Null));
    

    affinchè tramite la query visualizzo in una sottomaschera gli anni non pagati 

    Esempio 

    ID	COGNOME	NOME	Anno	ISC_Anno
    1	ROSSI	ROBERTO	2022	2019
    1	ROSSI	ROBERTO	2023	2019
    1	ROSSI	ROBERTO	2024	2019
    1	ROSSI	ROBERTO	2025	2019

    Utilizzo i bookmark per esportare su word gli anni non pagati per sollecitarlo tramite:

    Set datiForm = Mancati_Pagamenti.Form.RecordsetClone
    AnnoNP = ""
    datiForm.MoveFirst
    Do Until datiForm.EOF
    AnnoNP = AnnoNP & datiForm!Anno & " "
    datiForm.MoveNext
    Loop

    Quello che vorrei fare e tirare fuori dalla stringa ANNONP gli anni non pagati ogni singolo anno [2022];[2023];[2024];[2025], mentre ora ho la stringa con tutti 

    Dopo mi creerò delle variabili per fare i conteggi in vba:

    2022= 1Euro

    2023= 1Euro

    2024= 1Euro

    2025= 1Euro

    La lettera contiene   " da un controllo effettuato non risultano ad oggi le dovute quote associative riferite all’anno/agli anni: [bookmark ANNONP]

    per un totale di:

    2022= 1Euro ;2023= 1Euro; 2024= 1Euro; 2025= 1Euro Totale da versare 4Euro.

    Questo passaggio mi manca e non riesco a capire da dove iniziare 

  • Re: Do Until con array

    14/07/2025 - meopatacca ha scritto:

    La lettera contiene   " da un controllo effettuato non risultano ad oggi le dovute quote associative riferite all’anno/agli anni: [bookmark ANNONP]

    per un totale di:

    2022= 1Euro ;2023= 1Euro; 2024= 1Euro; 2025= 1Euro Totale da versare 4Euro.

    In soldoni:

    Sollecito stringa // il testo che viene fuori per il sollecito

    Importoinsoluto decimal // ti restituisce il totale non sono sicuro sia decimal...

    Anniimporto string // ti elenca anno e importo man mano che li trova 

    Select year(campo data) as annomoroso, impoto from tabella where destinatario=[nominativo] and pagato=false Group by annomoroso

    Questa restituisce l'array

    Sollecito= " da un controllo effettuato non risultano ad oggi le dovute quote associative riferite all’anno/agli anni: "

    Importoinsoluto =0 // reset conteggio

    Query.firt

    Do Until query.EOF

    sollecito= sollecito &  queri.anno & " "

    Anniimporto= anniimporto & query.annomoroso

     importomoroso=importomoroso + query.importo

    Anniimporto=anniimporto & " " & query.annomoroso & " € " & query.importo &";"

    Queri.MoveNext

    Loop

    Sollecito= sollecito & " per un totale di € " & anniimporto // aggiungi il totale da pagare

    Attenzione.alle.conversiini data e numero in stringa.

    Io avrei optato per un report... Poi alleghi la.stampa.alla mail.

  • Re: Do Until con array

    Grazie del tuo aiuto, ma volendo potrei splittare la stringa?

    Dim LArray() As String
    LArray = Split(AnnoNP, "-")
    
    MsgBox LArray(0)
    MsgBox LArray(1)
  • Re: Do Until con array

    Se hai un Array, puoi ciclarlo...!

    Dim Items	As Variant
    Dim Item	As Variant
    Items= Split(AnnoNP, "-")
    For each Item in Items
    	Debug.print Item
    Next
    
Devi accedere o registrarti per scrivere nel forum
5 risposte