Macro e VBA

Anonimo
2015-09-13T06:12:56+00:00

Ciao a tutti,

Dovendo adattare un database fatto con access 2013 per access 2003 e non essendo in grado di convertire una macro in VBA chiedo se qualcuno può aiutarmi a fare questa conversione.

Le due macro in questione (tratte da un modello di access)  si attivano con doppio click su un campo e sono:

La prima macro:

IF   IsNull([Screen].[ActiveControl])     then

Arresta macro

End If


Apri Machera

Nome maschera: Dettagli

Visualizzazione: Maschera

Condizione WHERE:  =”[ID]=”& [Screen].[ActiveControl]  

Modalità Finestra: Dialogo


Su Errore

Vai a :  successivo


RieseguiQuery

Nome Controllo: [Screen].[ActiveControl].[Name]   

La seconda macro è:


Su Errore

Vai a :  successivo

IF   [Form].[Dirty]     then

EseguiComando

Comando: SalvaRecord

End If


If   [MacroError].[Number] <> 0    then

FinestraMessaggio

Messaggio: [MacroError].[Description]

Segnale acustico: si

ArrestaMacro

End If


Su Errore

Vai a :  errore


Apri Machera

Nome maschera: Dettagli

Visualizzazione: Maschera

Condizione WHERE:  ="[ID]=" & Nz([ID];0)

Modalità Finestra: Dialogo


IFNot IsNull([ID])   Then

ImpostaVarTemp

Nome: IDcorrente

Espressione: Nz(DMax("[ID]";[Form].[RecordSource]);0)

End If


RieseguiQuery


CercaRecord

Record: Primo

Condizione WHERE:   ="[ID]=" & [TempVars]![IDCorrente]

RimuoviVarTemp

Nome: IDCorrente

Grazie in anticipo per le eventuali risposte.

Sergio

Microsoft 365 e Office | Access | 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
2015-09-15T11:47:56+00:00

ciao Sergio,

Ciao Sandro,

Grazie della risposta.

prego.

Ho provato la prima routine e risolve il problema.

bene :-)

La seconda routine non risolve il mio problema.

meno bene,  immaginavo, visto la mia scarsa familiarità con le macro.

Il campo ID (link ipertestuale) presentava la macro che ho esposto.

Il suo scopo è di aprire il problema specifico riferito al numero di ID corrispondente, ovvero

Se ID = 1 e faccio doppioclick sul campo, apre la maschera relativa (dettagli problemi) e mostra il problema con codice 1.

Se ID = 2 e faccio doppioclick apre la maschera (dettagli problemi) e mostra il problema con codice 2.

mi sfugge ancora lo scopo del collegamento ipertestuale, ma su evento doppio click del controllo potresti provare con  :

DoCmd.OpenForm "[dettagli problemi]", acNormal, , wherecondition:="id=" & Me.ID

ovviamente personalizza il controllo id qualora si chiamasse diversamente.

Mi sembra però si ricalchi la conversione in VBA della macro precedente.

Spero di avere dato chiarimenti sufficienti al mio problema.

direi di si anche se ancora mi sfugge lo scopo del collegamento ipertestuale.

Se non risolvi provo a scaricare il template e investigare un po'... :-)

Facci sapere.

Ciao, Sandro.

La risposta è stata utile?

0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-09-15T11:16:10+00:00

    Ciao Cinzia,

    ero a conoscenza della possibilità di convertire le macro in VBA ma utilizzando un modello di access 2013, ho provato con diversi modelli, la risposta è sempre quella:

    Errore durante apertura della macro (macro incorporata) impossibile la conversione.

    Ho provato anche a dire di salvare nel formato access 2003  ma anche qui non  permette il salvataggio e dichiara l’impossibilità di salvare in un formato di una versione precedente

    Ho pensato che potesse dipendere dalle macro che ho evidenziato  sopra e che contengono delle istruzioni (se) non previste in access 2003. Solo una ipotesi.

    Comunque se riuscissi a convertire una macro in VBA forse e sottolineo forse, con le mie modeste conoscenza di VBA potrei modificare il database per far funzionare il tutto.

    Comunque grazie per la risposta.

    Sergio

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-09-15T11:15:14+00:00

    Ciao Sandro,

    Grazie della risposta.

    Ho provato la prima routine e risolve il problema.

    La seconda routine non risolve il mio problema.

    Ho provato a modificare la tua routine ma il massimo che ho ottenuto, giustamente, è di aprire sempre l’ultimo record salvato, come tu pensavi fosse il compito.

    "Mea culpa" che non ho dato dati sufficienti a capire cosa volevo ottenere dalla routine e che la macro svolge.

    Tutto parte dal modello “problemi” di access 2013, modificato ad hoc per le mie esigenze.

    Il campo ID (link ipertestuale) presentava la macro che ho esposto.

    Il suo scopo è di aprire il problema specifico riferito al numero di ID corrispondente, ovvero

    Se ID = 1 e faccio doppioclick sul campo, apre la maschera relativa (dettagli problemi) e mostra il problema con codice 1.

    Se ID = 2 e faccio doppioclick apre la maschera (dettagli problemi) e mostra il problema con codice 2.

    Spero di avere dato chiarimenti sufficienti al mio problema.

    Grazie ancora

    Sergio

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-09-14T11:55:00+00:00

    Ciao Sergio,

    in Access 2013 è disponibile la funzione "Converti Macro in Visual Basic" , se apri in modifica una macro qualsiasi, avrai la funzione nel Ribbon Progettazione.

    Se la Macro è associata a un pulsante in una maschera, la funzione non è abilitata, ma ti basterà "Copiarla" e Incollarla in una nuova Macro per avere la funzione di conversione.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-09-13T07:32:00+00:00

    ciao Sergio,

    buon giorno e buona domenica.

    la logica della macro spesso mi sfugge, ma dipende da me...

    allora la prima dovrebbe essere qualcosa del genere, non mi è chiaro il requery sul controllo, ma  prova così :

    On Error GoTo errorHandler

    If Len(Screen.ActiveControl & vbNullString) = 0 Then

        MsgBox "nessun valore nel controllo:" & Screen.ActiveControl.Name, vbCritical, "avviso"

        Exit Sub

    End If

    DoCmd.OpenForm "Dettagli", acNormal, , whereCondition:="id=" & Screen.ActiveControl, WindowMode:=acDialog

    ext_errorLoadAccountHandler:

        Exit Sub

    errorHandler:

        With Err

           MsgBox "ERR#" & .Number _

                & vbNewLine & .Description _

                , vbOKOnly

         End With

         Resume ext_errorLoadAccountHandler

    cambia magari il nome del controllo e del campo id con qualcosa di maggiormente significativo.

    la seconda...da come capisco salvi il record e apri la maschera dettagli sul record con id massimo...ma qui secondo me interpreto male e sono fuori strada:

    On Error GoTo errorHandler

    Dim maxR As Long

    If Me.Dirty Then Me.Dirty = False

    maxR = nz(DMax("id", "Dettagli"),0)

    DoCmd.OpenForm "Dettagli", acNormal, , whereCondition:="id=" & maxR, WindowMode:=acDialog

    ext_errorLoadAccountHandler:

        Exit Sub

    errorHandler:

        With Err

           beep

           MsgBox "ERR#" & .Number _

                & vbNewLine & .Description _

                , vbOKOnly

         End With

         Resume ext_errorLoadAccountHandler

    nel caso non ottenessi alcun risultato, magari spiegaci meglio cosa vuoi ottenere con le due macro.

    Facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento