Newsgroup: it.comp.appl.access
Titolo: errore di compilazione: previsto fine istruzione

ciao a tutti
 
non riesco a legare questa chiamata ad una sub
Call Email & (X) & _InvA(Me.Name)
 
grazie.


ho fatto un piccolo passo avanti
dim X as String
X = IIf(IsNull(IdCliente), IIf(IsNull(IdFornitore), "IdAgen", "IdFornitore"), "IdCliente")
X = Mid(X, 3)
X = "Email" & (X) & "_invA"
 
'Call EmailCliente_InvA(Me.Name)<-questa è come dovrebbe essere la chiamata 
Call X(Me.Name) <-questa è la costruzione
 
ma ho errore di compilazione: prevista sub, function o property
 


Toh   sei arrivato alle chiamate /dinamiche/
E quello chiama la funzione X
Sta roba se non ricordo male si fa con la Eval
https://msdn.microsoft.com/en-us/library/office/aa172212(v=office.11).aspx
 
-- 
ac (x=y-1)
Aborro il Killfile
(La violenza e' l'ultimo rifugio degli incapaci -Salvor Hardin-)


ciao Alessandro
ho fatto cosi
X = Eval(X(Me.Name))
call X
 
ma ho l'errore: prevista matrice


None : Metti tutto dentro X e poi   rc=Eval(X)



anche se faccio cosi, 
X = X(Me.Name)
Call Eval(X)
mi da: prevista matrice

Il 16/12/2016 11:24, Franco dellavalle ha scritto:
P.S.
 
X = "Email" & (X) & "_invA('" & Me.Name & "')"
rc=Eval(X)



grazie Alessandro
rc sta per Call?
perchè se è cosi,
mi dice: impossibile trovare il nome di funzione immesso nell'espresione


no rc sta per returncode
 
La funzione deve essere dichiarata pubblica
Evidentemente EmailCliente_InvA() non lo e'



rc
a me da variabile non definita
 
in piu' 
Public Sub EmailCliente_InvA(strFrm As String)


Lascia perdere la rc e' chiaro che se non la dichiari (Dim rc) ed hai
l'opzione che richiede la dichiarazione ti da errore
Scrivi solo la eval (visto che e' una Sub e non ritorna valori)
 
La funzione deve essere dichiarata Public in un modulo.
 
Guardati gli esempi che sono presenti nel link che ho citato



il problema è che  se faccio in questo modo
X = "Email" & (X) & "_invA(M_MiaForm)"
passa;
Mentre cosi no....
X = "Email" & (X) & "_invA('" & Me.Name & "')"
 
da come ho notato sono i due apici 'Me.Name'
che creano l'errore
 
 
 
 
 


ok
X = "Email" & (X) & "_invA(" & chr(34) & Me.Name & chr(34) & ")"



grazie Alessandro
ma ancora non mi trova il nome di funzione immessa
ho provato nella finestra immediata in tutti i modi
ma ancora nulla

 ma ancora nulla
 
Come già dice il messaggio di errore Eval aspetta una funzione -->
 
Public Function EmailCliente_InvA(strFrm As String)
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 


ciao Karl e grazie
 
io sono fermo a questo punto
X = IIf(IsNull(IdCliente), IIf(IsNull(IdFornitore), "IdAgen", "IdFornitore"), "IdCliente")
X = Mid(X, 3)
X = "Email" & (X) & "_invA('" & Me.Name & "')"
Call Eval(X)
come devo procedere? 
 
non dovrebbe trovarla lui la 
Public Sub EmailCliente_InvA(strFrm As String)
oppure
Public Sub EmailFornitore_InvA(strFrm As String)
ecc. ecc.
 


questa è una delle sub
 
Public Sub EmailCliente_InvA(strFrm As String)
 
Dim strSql As String
 
strSql = vbNullString
strSql = strSql & "SELECT "
strSql = strSql & "IdEmailCliente, "
strSql = strSql & "IdCliente, "
strSql = strSql & "EmailCliente As Email, "
Select Case strFrm
Case Is = "M_InvioLC"
strSql = strSql & "Invio_ListaCarico As InvioDoc, "
strSql = strSql & "InvA "
Case Is = "M_InvioLC1"
strSql = strSql & "Invio_ListaCarico1 As InvioDoc, "
strSql = strSql & "InvA1 As InvA "
Case Is = "M_InvioSollecitoChiusure"
strSql = strSql & "Invio_SollecitoChiusure As InvioDoc, "
strSql = strSql & "InvA2 As InvA "
Case Is = "M_InvioEtichetta"
strSql = strSql & "Invio_EtichettaCliente As InvioDoc, "
strSql = strSql & "InvA4 As InvA "
 
End Select
strSql = strSql & "FROM TbEmailClienti "
strSql = strSql & "WHERE IdCliente = cliCriterio() "
strSql = strSql & "ORDER BY EmailCliente"
 
DBEngine(0)(0).QueryDefs("Qry_Email").SQL = strSql
 
End Sub


ok ci sono riuscito
modificando Public Sub EmailCliente_InvA(strFrm As String) in Public Sub EmailCliente_InvA(strFrm As String) 
Eval "Email" & (X) & "_invA(" & Chr(34) & Me.Name & Chr(34) & ")"
 
ma va bene fare cosi'?
 


 
e come altro vuoi fare?


 modificando
 
     Public Sub EmailCliente_InvA(strFrm As String)
  in Public Sub EmailCliente_InvA(strFrm As String)
 
e qui dove sta la differenza?


Caro Cara... roba da aguzza la vista...
 
@ALEX


 
Probabilmente non ti serve la chiamata /dinamica/ ma questa e' un'altra 
storia.



chiedo scusa per l'errore, ho
modificando Public Sub EmailCliente_InvA(strFrm As String) in Public Function EmailCliente_InvA(strFrm As String) 


ora ho quest altra situazione...
Dim uvEmail As Variant
Dim X As String
Dim Y As Integer
 
X = IIf(IsNull(IdCliente), IIf(IsNull(IdFornitore), _
  "IdAgen", "IdFornitore"), "IdCliente")
X = Mid(X, 3, 2)
Y = IIf(IsNull(IdCliente), IIf(IsNull(IdFornitore), _
  [IdAgen], [IdFornitore]), [IdCliente]) 
uvEmail = Eval("UnisciValEmail" & (X) & "('" & Me.Name & "'," & Y & ")")
 
da richiamare: 
Public Function UnisciValEmailCl(strFrm As String, MioCampo As Long) As Variant()
dove MioCampo è l'Id
 
ma ho l'errore: 2425 impossibile trovare il nome di funzione immesso nell'espressione


 
Hai chiaro che di funzioni ne devi avere almeno tre?
Function UnisciValEmailCl
Function UnisciValEmailFo
Function UnisciValEmailAg



ciao Alessandro e grazie
 
si, certo.
 
da come ho notato è As Variant() nella function che crea il problema,
ma non so come modificarla per passare l'Arrey,
questa è quella funzionante (non dinamica) per "UnisciValEmailCl"
uvEmail = UnisciValEmailCl(Me.Name, IdCliente),
questa è quella dinamica non funzionante
uvEmail = Eval("UnisciValEmail" & (X) & "('" & Me.Name & "'," & Y & ")")
InvioA = uvEmail(0)
InvioCC = uvEmail(1)
 
questa è una delle function
 
___________inizio____________
 
Public Function UnisciValEmailCl(strFrm As String, MioCampo As Long) As Variant()
  Dim rst As DAO.Recordset
  Dim UnisciValEmailCl_A As String, UnisciValEmailCl_CC As String
  Dim strSql As String
  Dim valori() As Variant
 
  UnisciValEmailCl_A = ""
  UnisciValEmailCl_CC = ""
  strSql = vbNullString
  strSql = strSql & "SELECT "
  Select Case strFrm
    Case Is = "M_InvioLC"
    strSql = strSql & "IIf(Invio_ListaCarico <> 0 And InvA <> 0, EmailCliente, '') As EmailCliente_A, "
    strSql = strSql & "IIf(Invio_ListaCarico <> 0 And InvA = 0, EmailCliente, '') As EmailCliente_CC "
    Case Is = "M_InvioLC1"
    strSql = strSql & "IIf(Invio_ListaCarico1 <> 0 And InvA1 <> 0, EmailCliente, '') As EmailCliente_A, "
    strSql = strSql & "IIf(Invio_ListaCarico1 <> 0 And InvA1 = 0, EmailCliente, '') As EmailCliente_CC "
    Case Is = "M_InvioSC"
    strSql = strSql & "IIf(Invio_SollecitoChiusure <> 0 And InvA2 <> 0, EmailCliente, '') As EmailCliente_A, "
    strSql = strSql & "IIf(Invio_SollecitoChiusure <> 0 And InvA2 = 0, EmailCliente, '') As EmailCliente_CC "
    Case Is = "M_InvioEtichetta"
    strSql = strSql & "IIf(Invio_EtichettaCliente <> 0 And InvA4 <> 0, EmailCliente, '') As EmailCliente_A, "
    strSql = strSql & "IIf(Invio_EtichettaCliente <> 0 And InvA4 = 0, EmailCliente, '') As EmailCliente_CC "
 
  End Select
  strSql = strSql & "From TbEmailClienti "
  strSql = strSql & "WHERE IdCliente = " & MioCampo & " ORDER BY EmailCliente;"
  Set rst = CurrentDb().OpenRecordset(strSql)
 
  If rst.EOF Then GoTo Fine
  rst.MoveFirst
  Do Until rst.EOF
    UnisciValEmailCl_A = UnisciValEmailCl_A & rst!EmailCliente_A & ";"
    UnisciValEmailCl_CC = UnisciValEmailCl_CC & rst!EmailCliente_CC & ";"
    rst.MoveNext
  Loop
  UnisciValEmailCl_A = Left(UnisciValEmailCl_A, Len(UnisciValEmailCl_A) - 1)
  UnisciValEmailCl_CC = Left(UnisciValEmailCl_CC, Len(UnisciValEmailCl_CC) - 1)
 
Fine:
  valori = Array(UnisciValEmailCl_A, UnisciValEmailCl_CC)
  Set rst = Nothing
  Let UnisciValEmailCl = valori()
 End Function

 da come ho notato è As Variant() nella function che crea il problema,
 
Da cosa lo hai notato?
Se access comunica che /non/ trova il nome funzione quello e'.
Guarda che scrivere x=valori() significa richiamare la funzione valori.
 
UnisciValEmailCl = valori
forse e' meglio.


 Da cosa lo hai notato?
 
che se tolgo  As Variant()
me la trova la Function
altrimenti non la trova
 
 


con
UnisciValEmailCl = valori 
mi trova la function
ma alla fine 
ho l'errore:
13 - tipo non corrispondente


1) Non serve definire valori come array. Lo imposti con la funziona
array e ci pensa lui a fare le cose.
2) Verifica che valori sia correttamente impostato
3) La tua funzione se va per .EOF non so davvero cosa diavolo possa
impostare in /valori/
4) La funzione che non ti trovava era valori()



ciao Alessandro
forse non ho ben capito il tuo suggerimento...
 
Public Function UnisciValEmailCl(strFrm As String, MioCampo As Long)
qui ho tolto "As Variant"
Poi.........
 
Fine:
  UnisciValEmailCl = Array(UnisciValEmailCl_A, UnisciValEmailCl_CC)
  'valori = Arrey(UnisciValEmailCl_A, UnisciValEmailCl_CC)
  Set rst = Nothing
  Let UnisciValEmailCl = UnisciValEmailCl
 
ma non mi funziona


 
Perche' hai tolto la variabile di ritorno? Vabbe' che dovrebbe prenderla 
come default.
 
Io parlavo di Dim valori() as Variant
E' sufficiente dim valori o dim valori as variant.
 
Punto 3 e' ok (ho visto che inizializzi a /empty/ le due variabili.
...........
Fine:
     Set rst = Nothing
     UnisciValEmailCl = Array(UnisciValEmailCl_A, UnisciValEmailCl_CC)
End Function
 
 
Prova ad unire le due variabili con un carattere di riconoscimento 
(a&"!"&b per intenderci)
Poi ne puoi fare la split nella funzione chiamante.



_______________________________
 
 
Dim uvEmail As Variant
Dim InvioA As String, InvioCC As String
 
X = IIf(IsNull(IdCliente), IIf(IsNull(IdFornitore), _
  "IdAgen", "IdFornitore"), "IdCliente")
X = Mid(X, 3, 2)
Y = IIf(IsNull(IdCliente), IIf(IsNull(IdFornitore), _
      [IdAgen], [IdFornitore]), [IdCliente])  
uvEmail = Eval("UnisciValEmail" & (X) & "('" & Me.Name & "'," & Y & ")")
'a questo punto passa alla function
Public Function UnisciValEmailCl(strFrm As String, MioCampo As Long) As Variant
....
....
Fine:
  Set rst = Nothing
  UnisciValEmailCl = Array(UnisciValEmailCl_A & "|" & UnisciValEmailCl_CC)
End Function
 
'ma quando ritorna alla funzione chiamante 
salta direttamente alla gestione errori: 13 - tipo non corrispondente;
senza esguire..............
InvioA = Split(uvEmail, "|")(0)
InvioCC = Split(uvEmail, "|")(1)
 

   UnisciValEmailCl = Array(UnisciValEmailCl_A & "|" & UnisciValEmailCl_CC)
 
e dalli!
  UnisciValEmailCl = UnisciValEmailCl_A & "|" & UnisciValEmailCl_CC
 
la split si fa su una stringa! Se scrivi array(blabla) genera un array 
di 1 elemento.



grazie Alessandro
quello dell'Array è stato un errore di distrazione.
Cmq sei stato grande.................
Ora funziona!!!
;-)

 ;-)
 
Mica tanto!
Tre giorni ed otto camicie ;-)



grazie ancora Alessandro
cmq l'importante è il risultato