2009-04-30 22 views

risposta

27

È possibile utilizzare le funzioni di stringa VBA (come @onedaywhen sottolinea nei commenti, in realtà non sono le funzioni VBA, ma i loro equivalenti dalle librerie MS Jet. Per quanto riguarda le firme di funzione vanno, sono chiamato e funzionano allo stesso, anche se l'attuale presenza di MS Access non è necessario per loro di essere disponibili):.

SELECT DISTINCT Left(LastName, 1) 
FROM Authors; 

SELECT DISTINCT Mid(LastName, 1, 1) 
FROM Authors; 
+3

punto Picky: le DLL sono coinvolti (I belive) Expsrv.dll e vbajet32. dll, la cui documentazione MS si riferisce collettivamente come Jet Expression Services. Quindi penso che possiamo considerarli espressioni native ACE/Jet, piuttosto che "funzioni VBA" nel contesto. Nota che alcune espressioni funzionano diversamente in ACE/Jet rispetto alle loro funzioni VBA equivalenti, ad es. IIF(): VBA valuta sempre entrambe le clausole true e false, mentre ACE/Jet no. – onedaywhen

+0

@onedaywhen: Grazie per il chiarimento. Ero riluttante a scrivere "funzioni VBA", ma non sapevo cosa scrivere invece. Nel caso delle funzioni di stringa menzionate sono ovviamente equivalenti. OTOH - Penso che sia possibile utilizzare anche funzioni VBA definite dall'utente in una query di Access, ma potrebbe essere specifico di Access. – Tomalak

+2

Immagino sia per questo che Nz() sia disponibile in Accesso nativo, ma non quando si eseguono query da Excel. – Knox

6

penso che ci sia MID() e forse LEFT() e RIGHT() in Access.

+0

Li uso con LEN e ottengo la maggior parte di ciò che mi serve dai valori stringa. – Bratch

2

non riuscivo a trovare un modulo di off-the-shelf che ha aggiunto questa funzione, così ho scritto uno:

In Access, andare al nastro Strumenti database, nella zona macro scattare in Visual Basic. Nell'area di progetto in alto a sinistra, fai clic con il pulsante destro sul nome del file e seleziona Inserisci -> Modulo. Nel modulo incolla questo:

Public Function Substring_Index(strWord As String, strDelim As String, intCount As Integer) As String 

Substring_Index = delims 

start = 0 
test = "" 

For i = 1 To intCount 
    oldstart = start + 1 
    start = InStr(oldstart, strWord, strDelim) 
    Substring_Index = Mid(strWord, oldstart, start - oldstart) 
Next i 

End Function 

Salvare il modulo come modulo1 (impostazione predefinita). È ora possibile utilizzare istruzioni come:

SELECT Substring_Index([fieldname],",",2) FROM table 
3

Ho lavorato molto con msaccess vba. Penso che si sta cercando per la funzione MID

esempio

dim myReturn as string 
    myreturn = mid("bonjour tout le monde",9,4) 

vi restituirà il valore "tout"

+1

Benvenuti in StackOverflow! La tua risposta è corretta, ma probabilmente non otterrà alcun voto poiché non fornisce alcuna nuova informazione che non sia già nella risposta accettata. – CoderDennis

Problemi correlati