2009-04-30 8 views

Respuesta

27

Puede utilizar las funciones de cadena de VBA (como @onedaywhen señala en los comentarios, no son realmente las funciones de VBA, pero sus equivalentes de las bibliotecas MS Jet. En lo que a las firmas de función van, son llamó y funcionan de la misma, a pesar de que la presencia actual de MS Access no es necesario para que estén disponibles):.

SELECT DISTINCT Left(LastName, 1) 
FROM Authors; 

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

punto Picky: los archivos DLL involucrados son (I belive) Expsrv.dll y vbajet32. dll, que la documentación de MS se refiere colectivamente como Jet Expression Services. Así que creo que podemos considerarlos como expresiones ACE/Jet nativas, en lugar de 'funciones VBA' en contexto. Tenga en cuenta que algunas expresiones funcionan de forma diferente en ACE/Jet que sus funciones equivalentes de VBA, p. IIF(): VBA siempre evalúa cláusulas verdaderas y falsas, mientras que ACE/Jet no lo hace. – onedaywhen

+0

@onedaywhen: Gracias por aclarar. No estaba seguro de escribir "funciones de VBA", pero no sabía qué escribir en su lugar. En el caso de las funciones de cadena mencionadas, obviamente son equivalentes. OTOH: creo que incluso puede usar funciones de VBA definidas por el usuario en una consulta de Access, pero esto puede ser específico de Access. – Tomalak

+2

Supongo que es por eso que Nz() está disponible en Access nativo, pero no cuando se ejecutan consultas desde Excel. – Knox

6

creo que hay MID() y tal vez LEFT() y derecha() en acceso.

+0

Los uso con LEN y obtengo la mayor parte de lo que necesito de los valores de cadena. – Bratch

2

no pude encontrar un módulo off-the-shelf que añadió esta función, por lo que escribió uno:

En Access, vaya a la cinta Database Tools, en el área de macro, haga clic en Visual Basic. En el área superior izquierda del proyecto, haga clic con el botón derecho en el nombre de su archivo y seleccione Insertar -> Módulo. En el módulo, pegue esto:

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 

Guarde el módulo como module1 (valor predeterminado). Ahora puede usar sentencias como:

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

He trabajado mucho con msaccess vba. creo que busca la función MID

ejemplo

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

le va a devolver el valor "tout"

+1

¡Bienvenido a StackOverflow! Su respuesta es correcta, pero probablemente no obtendrá ningún voto, ya que no proporciona ninguna información nueva que no se encuentre en la respuesta aceptada. – CoderDennis

Cuestiones relacionadas