Está en la página 1de 21

29/10/2015

nitecAccessCdigo3

Tabla Consulta Formulario Informe Macro Cdigo ActiveX Temasgenerales Volveraseleccin

<<<
Modulocompletoparaenviarmails
Nmerosromanos
Reproducirsonidos
FuncinparacalculardiferenciaentreFechas/Horas
Funcinparacalculardiferenciaentrefechas
Cdigosparabotones
FuncinparaguardartodaslasconsultasdenuestraMDBenmodoSQLenunficherodetexto
Crearregistrosdeprueba
Ponermaysculaslaprimeraletrayminsculaselresto

Funcinobtenersemana
Bloquear/Desbloqueartodosloscontrolesenbajorrelieve
Corregirhipervnculodecorreoelectrnico
Correoobtienelacadenadelhipervnculo
FuncinobtenerlaletradelNIF
Contadorpersonalizado
Verimgenessinguardarlasenunabasededatos

Modulocompletoparaenviarmails
CdigoBasicOptionExplicit
OptionCompareDatabase
'EnrealidadnorecuerdodondeencontrlaversinoriginaldeestaMDB.
'Estabaen16bits,demodoquelaadapta32bits(MAPI32),
'hetraducidoloscomentarios,depuradoalgunfallo,
'yaadidoalgunacosa(BCC).
'
TypeMAPIMessage
ReservedAsLong
SubjectAsString
NoteTextAsString
MessageTypeAsString
DateReceivedAsString
ConversationIDAsString
FlagsAsLong
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

1/21

29/10/2015

nitecAccessCdigo3

RecipCountAsLong
FileCountAsLong
EndType
TypeMapiRecip
ReservedAsLong
RecipClassAsLong
NameAsString
AddressAsString
EIDSizeAsLong
EntryIDAsString
EndType
TypeMapiFile
ReservedAsLong
FlagsAsLong
PositionAsLong
PathNameAsString
FileNameAsString
FileTypeAsString
EndType
DeclareFunctionMAPISendMailLib"MAPI32.DLL"Alias"BMAPISendMail"_
(ByValSession&,ByValUIParam&,MessageAsMAPIMessage,_
Recipient()AsMapiRecip,File()AsMapiFile,ByValFlags&,_
ByValReserved&)AsLong
GlobalConstSUCCESS_SUCCESS=0
GlobalConstMAPI_TO=1
GlobalConstMAPI_CC=2
GlobalConstMAPI_BCC=3
GlobalConstMAPI_LOGON_UI=&H1
'*************************************************************
'FUNCION:CountTokens
'
'PROPOSITO:
'Calcularlacantidaddeitemsquehayenunstring,delimitadospor
'undeterminadoseparador.Utilparadimensionarunamatrizpara
'almacenarindividualmentelositems,antesdellamaraParseTokens.
'
'PARAMETROS:
'sSource:Lalistadeitemsdelimitados
'sDelim:ElseparadorutilizadoensSourceparadelimitarlositems
'
'RETORNO
'ElnumerodeitemsensSource.SisSourceestvacio,devuelve0.
'*************************************************************
FunctionCountTokens(ByValsSourceAsString,ByValsDelimAsString)
DimiDelimPosAsInteger
DimiCountAsInteger
IfsSource=""Then
CountTokens=0
Else
iDelimPos=InStr(1,sSource,sDelim)
DoUntiliDelimPos=0
iCount=iCount+1
iDelimPos=InStr(iDelimPos+1,sSource,sDelim)
Loop
CountTokens=iCount+IIf(Right(sSource,1)=sDelim,0,1)
EndIf
EndFunction
'*************************************************************
'FUNCION:GetToken
'
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

2/21

29/10/2015

nitecAccessCdigo3

'PROPOSITO:
'Deunstringdeitemsdelimitados,devuelveelprimeroyloeliminadelalista.
'
'PARAMETROS:
'sSource:Lalistadeitemsdelimitados
'sDelim:ElseparadorutilizadoensSourceparadelimitarlositems
'
'RETORNO
'sSourceesmodificado,conelprimeritemeliminado.
'LafuncindevuelveelitemeliminadodesSource.
'*************************************************************
FunctionGetToken(sSourceAsString,ByValsDelimAsString)AsString
DimiDelimPosAsInteger
'Buscaelprimerdelimitador
iDelimPos=InStr(1,sSource,sDelim)
If(iDelimPos=0)Then
GetToken=trim$(sSource)
sSource=""
Else
GetToken=trim$(LEFT$(sSource,iDelimPos1))
sSource=Mid$(sSource,iDelimPos+1)
EndIf
EndFunction
'*************************************************************
'FUNCION:Mail
'
'PROPOSITO:
'PasalainformacindeloscamposTo,Subject,CC,Attach,yMensaje
'delformularioactivoalafuncinSendMail.
'CompruebaqueloscamposnoseanNULL,ysiesaslosconviertea"".
'Muestratambinunmensajeindicandosielenvofueokono.
'EstafuncinesactivadaporelbotnEnviardelformulario.
'
'PARAMETROS:
'Ninguno
'
'RETORNO
'Nada
'*************************************************************
FunctionMail()
DimfAsForm,result
Setf=Screen.ActiveForm
IfIsNull(f!To)Orf!To=""ThenExitFunction
IfIsNull(f!Subject)Thenf!Subject=""
IfIsNull(f!CC)Thenf!CC=""
IfIsNull(f!BCC)Thenf!BCC=""
IfIsNull(f!Attach)Thenf!Attach=""
IfIsNull(f!Message)Thenf!Message=""
result=SendMail((f!Subject),(f!To),(f!CC),(f!BCC),(f!Attach),(f!Message))
Ifresult<>SUCCESS_SUCCESSThen
MsgBox"Errorsendingmail:"&result,16,"Mail"
Else
MsgBox"Messagesentsuccessfully!",64,"Mail"
EndIf
EndFunction
'*************************************************************
'SUB:ParseTokens
'
'PROPOSITO:
'Extraerlositemsdeunalistadelimitadaycolocarlosenunamatriz.
'
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

3/21

29/10/2015

nitecAccessCdigo3

'PARAMETROS:
'mArray():matriztipostringdeunadimensindondesecolocarnlositems.
'sTokens:listadelimitadaconlositems.
'sDelim:separadorutilizadoparadelimitar.
'
'RETORNO
'Nada
'*************************************************************
SubParseTokens(mArray()AsString,ByValsTokensAsString,ByValsDelimAsString)
DimiAsInteger
Fori=LBound(mArray)ToUBound(mArray)
mArray(i)=GetToken(sTokens,sDelim)
Next
EndSub
'*************************************************************
'FUNCION:SendMail
'
'PROPOSITO:
'EstaeslafuncinqueinteractadirectamenteconMAPISendMail.
'Pasandoleunaslistasdelimitadaspor""deTo,CC,BCC,yadjuntos,
'yunmensaje,lafuncinpreparalasestructurasMapiRecipyMapiFile
'conlaayudadeParseToken.
'Unavezpreparadaslasestructuras,llamaalaAPIMAPISendMailpara
'enviarelmensaje.
'
'PARAMETROS:
'sSubject:EstextoqueaparecercomoAsuntodelmensaje
'sTo:Listadelimitadapor""conlosdestinatariosdelmensaje.
'sCC:ListadelosdestinatariosCC(Copia)
'sBCC:ListadelosdestinatariosBCC(Copiaoculta)
'sAttach:Listadelosficherosaadjuntaralmensaje
'
'RETORNO
'SUCCESS_SUCCESSsinohayerror,oelcdigoMAPIdelerror.
'*************************************************************
FunctionSendMail(sSubjectAsString,sToAsString,sCCAsString,sBCCAsString,_
sAttachAsString,sMessageAsString)
Dimi,cTo,CCC,cBCC,cAttach'contadoresdeitems
DimMAPI_MessageAsMAPIMessage
'Contarelnmerodeitemsencadalista
cTo=CountTokens(sTo,"")
CCC=CountTokens(sCC,"")
cBCC=CountTokens(sBCC,"")
cAttach=CountTokens(sAttach,"")
'Dimensionarlasmatricesparalaslistas
ReDimrTo(0TocTo)AsString
ReDimrCC(0ToCCC)AsString
ReDimrBCC(0TocBCC)AsString
ReDimrAttach(0TocAttach)AsString
'Pasarelcontenidodelaslistasalasmatrices
ParseTokensrTo(),sTo,""
ParseTokensrCC(),sCC,""
ParseTokensrBCC(),sBCC,""
ParseTokensrAttach(),sAttach,""
'CrearlaestructuraMAPIRecipparaalmacenartodoslosdestinatarios
ReDimMAPI_Recip(0TocTo+CCC+cBCC1)AsMapiRecip
'Cargarlos"TO:"enlaestructura
Fori=0TocTo1
MAPI_Recip(i).Name=rTo(i)
MAPI_Recip(i).RecipClass=MAPI_TO
Nexti
'Cargarlos"CC:"
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

4/21

29/10/2015

nitecAccessCdigo3

Fori=0ToCCC1
MAPI_Recip(cTo+i).Name=rCC(i)
MAPI_Recip(cTo+i).RecipClass=MAPI_CC
Nexti
'Cargarlos"BCC:"
Fori=0TocBCC1
MAPI_Recip(cTo+CCC+i).Name=rBCC(i)
MAPI_Recip(cTo+CCC+i).RecipClass=MAPI_BCC
Nexti
'CrearlaestructuraMAPI_Fileparalosadjuntos
ReDimMAPI_File(0TocAttach)AsMapiFile
'Cargarlosadjuntosenlaestructura
MAPI_Message.FileCount=cAttach
Fori=0TocAttach1
MAPI_File(i).Position=1
MAPI_File(i).PathName=rAttach(i)
Nexti
'Llenarloscamposdelmensaje
MAPI_Message.Subject=sSubject
MAPI_Message.NoteText=sMessage
MAPI_Message.RecipCount=cTo+CCC+cBCC
'Enviarelmensaje
SendMail=MAPISendMail(0&,0&,MAPI_Message,MAPI_Recip(),_
MAPI_File(),MAPI_LOGON_UI,0&)
EndFunction

Nmerosromanos
CdigoBasicOptionCompareDatabase
OptionExplicit
PublicFunctionromano(vAsVariant)AsVariant
'Traduceunnmerosiestentre1y12aromano
IfIsNumeric(v)Then
DimnumAsInteger
num=CInt(v)
SelectCaseCInt(v)
Case1:romano="I"
Case2:romano="II"
Case3:romano="III"
Case4:romano="IV"
Case5:romano="V"
Case6:romano="VI"
Case7:romano="VII"
Case8:romano="VIII"
Case9:romano="IX"
Case10:romano="X"
Case11:romano="XI"
Case12:romano="XII"
CaseElse:romano=""
EndSelect
Else
romano=""
EndIf
EndFunction
'***************************************************
PublicFunctionFechaRomana(vAsVariant)AsString
'
'Fechaconmesenformatoromano
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

5/21

29/10/2015

nitecAccessCdigo3

IfIsDate(v)Then
FechaRomana=Day(v)&""&romano(Month(v))&""&Year(v)
Else
FechaRomana=""
EndIf
EndFunction
'***************************************************
PublicFunctionHoraRomana(vAsVariant)AsString
'
'Horaenformatoromanoredondeadoacuartosdehora
IfIsDate(v)Then
'Calcularhora
DimhoraAsInteger:hora=Hour(v)
'Calcularcuartos
DimminsAsString
SelectCaseCInt(Minute(v)/15)
Case0:mins=""
Case1:mins="y"
Case2:mins="y"
Case3:hora=hora+1:mins=""'mins=""
Case4:hora=hora+1
EndSelect
'Corregirhora
hora=horaMod12
Ifhora=0Thenhora=12
'Construirlahora
HoraRomana=romano(hora)&mins&IIf(Hour(v)>=12,"p.m.","a.m.")'PostMeridiam,AnteMeridiam
Else
HoraRomana=""
EndIf
EndFunction
'***************************************************
PublicFunctionNumRomano(vAsVariant)AsString
'
'Obtieneelequivalenteromanodeunnmerodehasta4cifras
IfNotIsNumeric(v)Then
NumRomano=""
Else
DimnumAsInteger:num=CInt(v)
Dimn1AsInteger:n1=numMod10:num=num\10
Dimn2AsInteger:n2=numMod10:num=num\10
Dimn3AsInteger:n3=numMod10:num=num\10
Dimn4AsInteger:n4=numMod10
Dims1AsString:s1=romano(n1)
Dims2AsString:s2=Reemplazar(Reemplazar(Reemplazar(romano(n2),"X","C"),"V","L"),"I","X")
Dims3AsString:s3=Reemplazar(Reemplazar(Reemplazar(romano(n3),"X","M"),"V","D"),"I","C")
Dims4AsString:s4=Reemplazar(Reemplazar(Reemplazar(romano(n4),"X","~M"),"V","~D"),"I","M")
NumRomano=s4&s3&s2&s1
EndIf
EndFunction

Reproducirsonidos
CdigoBasicOptionCompareDatabase
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

6/21

29/10/2015

nitecAccessCdigo3

OptionExplicit
DeclareFunctionsndPlaySoundLib"winmm"Alias"sndPlaySoundA"(ByValFileNameAsString,ByVal
snd_asyncAsLong)AsLong
DeclareFunctionmciSendStringLib"winmm"Alias"mciSendStringA"(ByVallpstrCommandAsString,
ByVallpstrReturnStringAsAny,ByValuReturnLengthAsLong,ByValhwndCallbackAsLong)AsLong
'************************************************************************************************************
FunctionmyPlaySound(fichero,Tipo)
DimlAsLong
SelectCaseTipo
Case"mp3"
l=sndPlaySound(fichero,1)
Case"wav"
l=sndPlaySound(fichero,1)
Case"mid"
l=mciSendString("closemymid","",0,0)'detienemymidsiestabaenplay
l=mciSendString("open"&fichero&"typesequenceraliasmymid"&Chr(0),"",0,0)
l=mciSendString("playmymid","",0,0)
EndSelect
myPlaySound=l
EndFunction

Funcinparacalculardiferenciaentrefechas/Horas
OptionCompareDatabase
OptionExplicit
'Funcinparacalculardiferenciaentrefechas/Horas
'Estainformacinseaplicaa:Access2000,Access97
'RESUMEN
'Muestracmocrearseunafuncindeejemploquecalculeladiferenciaentredosfechas
'dadasysepuedaespecificarelformatoconelqueobtendremoselresultado.
'Unaformadepoderobtenerladiferenciaentredosfechasesusandolafuncinpredefinida
'DifFecha.Elusodeestafucninsevelimitadoalahorademostrarelresultadoobtenido,
'esdecir,losresultadossepodrnobteneroenhoras,oenminutos,oendas,peronocon
'unformatocombinadodetodos.
'Usandolafuncinincluidasepodrobtenerladiferenciaentrelas
'funcionesademsdepoderespecificarenquformatoseobtendrelresultadodeladiferencia.
'Losparmetrosquesepasarnalafuncinson:
'FechaIncial.
'FechaFinal.
'Formatodelresultado.Esteparmetropodrtomarlossiguientesvalores:
'a.ConDia,formatodelresultadodia:hora:minutos
'b.ConHora,formatodelresultadohora:minutos
'CmocrearyusarlafuncinDifHoras()
'1.Abrirlabasededatosenlaquesequierautilizarlafuncin.
'2.Desdelapestaademdulos,seleccionarnuevo.
'3.Insertarelsiguientecdigo:
'****************************************************************************************
FunctionDifHoras(FechainicioAsDate,FechaFinalAsDate,formatoAsString)AsString
'FormatoConDia,ConHora
DimdblIntervalAsDouble
DimlngTotalHoursAsLong
DimlngTotalMinsAsLong
DimlngdaysAsLong
DimlngHoursAsLong
DimlngMinsAsLong
DimfechaesAsString
dblInterval=Abs(FechaFinalFechainicio)
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

7/21

29/10/2015

nitecAccessCdigo3

lngdays=Int(CSng(dblInterval))
lngTotalHours=Int(CSng(dblInterval*24))
lngTotalMins=Int(CSng(dblInterval*1440))
'Determinalasfraccionesdetiempo
lngHours=lngTotalHoursMod24
lngMins=lngTotalMinsMod60
SelectCaseformato
'Calculanmerodehoras
Case"ConHora"
fechaes=lngTotalHours&":"&Format$(dblInterval,"nn")
'Calculaennmerodedas
Case"ConDia"
fechaes=lngdays&"das"&lngHours&"Horas"&lngMins&"Minutos"
EndSelect
DifHoras=fechaes
EndFunction
'4.Guardarydarlenombrealmdulo.

Funcinparacalculardiferenciaentrefechas
OptionCompareDatabase
OptionExplicit
'Funcinparacalculardiferenciaentrefechas
'Estainformacinseaplicaa:Access2000,Access97
'RESUMEN
'Muestracmocrearseunafuncindeejemploquecalculeladiferenciaentredosfechas
'dadasysepuedaespecificarelformatoconelqueobtendremoselresultado.
'Unaformadepoderobtenerladiferenciaentredosfechasesusandolafuncinpredefinida
'DifFecha.Elusodeestafucninsevelimitadoalahorademostrarelresultadoobtenido,
'esdecir,losresultadossepodrnobteneroenhoras,oenminutos,oendas,peronocon
'unformatocombinadodetodos.
'Usandolafuncinqueincluidaposteriormentesepodrobtenerladiferenciaentrelas
'funcionesademsdepoderespecificarenquformatoseobtendrelresultadodeladiferencia.
'Losparmetrosquesepasarnalafuncinson:
'FechaIncial.
'FechaFinal.
'Formatodelresultado.Esteparmetropodrtomarlossiguientesvalores:
'a.ConDia,formatodelresultadodia:hora:minutos:segundos
'b.ConHora,formatodelresultadohora:minutos:segundos
'c.ConMin,formatodelresultadominutos:segundos
'd.ConSeg,formatodelresultadosegundos.
'CmocrearyusarlafuncinDarFecha()
'1.Abrirlabasededatosenlaquesequierautilizarlafuncin.
'2.Desdelapestaademdulos,seleccionarnuevo.
'3.Insertarelsiguientecdigo:
'************************************************************************************
FunctionDarFecha(FechainicioAsDate,FechaFinalAsDate,formatoAsString)AsString
'FormatoConDia,ConHora,ConMin,ConSeg
DimdblIntervalAsDouble
DimlngTotalHoursAsLong
DimlngTotalMinsAsLong
DimlngTotalSecsAsLong
DimlngdaysAsLong
DimlngHoursAsLong
DimlngMinsAsLong
DimlngSecsAsLong
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

8/21

29/10/2015

nitecAccessCdigo3

DimfechaesAsString
dblInterval=Abs(FechaFinalFechainicio)
lngdays=Int(CSng(dblInterval))
lngTotalHours=Int(CSng(dblInterval*24))
lngTotalMins=Int(CSng(dblInterval*1440))
lngTotalSecs=Int(CSng(dblInterval*86400))
'Determinalasfraccionesdetiempo
lngHours=lngTotalHoursMod24
lngMins=lngTotalMinsMod60
lngSecs=lngTotalSecsMod60
SelectCaseformato
'Calculanmerototaldesegundos.
Case"ConSeg"
fechaes=lngTotalSecs&"Segundos"
'Calculaelnmerodeminutosysegundosrestantes
Case"ConMin"
fechaes=lngTotalMins&":"&Format$(dblInterval,"ss")&"Minutos:Segundos"
'Calculanmerodehoras
Case"ConHora"
fechaes=lngTotalHours&":"&Format$(dblInterval,"nn")&":"&Format$(dblInterval,"ss")&"H:M:S"
'Calculaennmerodedas
Case"ConDia"
fechaes=lngdays&"das"&lngHours_
&"Horas"&lngMins&"Minutos"&_
lngSecs&"Seconds"
EndSelect
DarFecha=fechaes
EndFunction
'4.Guardarydarlenombrealmdulo.
Cdigosparabotones
Podemosaadiranuestraaplicacinunmodulogenricoparaelcontroldelamayoradenuestros
botones.
OptionCompareDatabase
OptionExplicit
PrivatebuttonPressedAsBoolean

'Desplazaelbotn50pxeleshaciaabajo
PublicFunctionbuttonDown(iconoAsControl)
IfNotbuttonPressedThen
icono.TOP=icono.TOP+50
icono.LEFT=icono.LEFT+50
buttonPressed=True
EndIf
EndFunction

'Desplazaelbotn50pxeleshaciaarriba
PublicFunctionbuttonUp(iconoAsControl)
IfbuttonPressedThen
icono.TOP=icono.TOP50
icono.LEFT=icono.LEFT50
buttonPressed=False
EndIf
EndFunction

'Aadirnuevoregistro
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

9/21

29/10/2015

nitecAccessCdigo3

PublicFunctionbuttonNew()
DimFAsForm:SetF=Screen.ActiveForm
IfNotF.NewRecordThen
DoCmd.RunCommandacCmdRecordsGoToNew
EndIf
EndFunction

'BotnCancelar
PublicFunctionbuttonCancel()
SendKeys"{ESC}"
EndFunction

'Borrarregistro,soloborraregistrosguardadosenlaBD,modificandounpocoelcdigopodemoshacerquesirva
'tambinparacancelarnuevosregistros
PublicFunctionbuttonErase()
OnErrorGoToErr_ComandoBorrar
DimFAsForm:SetF=Screen.ActiveForm
IfNotF.NewRecordAndvbYes=MsgBox("Borrarregistro?",vbQuestion+vbYesNo+vbDefaultButton2,"Confirmar")Then
DoCmd.SetWarningsFalse
RunCommandacCmdSelectRecord
RunCommandacCmdDelete
DoCmd.SetWarningsTrue
EndIf
Exit_ComandoBorrar:
ExitFunction
Err_ComandoBorrar:
MsgBoxErr.Description,vbCritical
ResumeExit_ComandoBorrar
EndFunction

'Cerrarformularioactivo
PublicFunctionbuttonClose()
'DimfAsForm:f=Screen.ActiveForm
'DoCmd.CloseacForm,f.Name
DoCmd.RunCommandacCmdCloseWindow
EndFunction

'Salirdelaaplicacin
PublicFunctionbuttonExit()
IfvbYes=MsgBox("Salirdelprograma?",vbQuestion+vbYesNo+vbDefaultButton2,"Confirmar")Then
DoCmd.QuitacQuitSaveAll
EndIf
EndFunction

FuncinparaguardartodaslasconsultasdenuestraMDBenmodoSQLenunficherodetexto
Anivelexplotacin:
Ejecutaaccionesmasivascontablasaunavelocidadsorprendente
Escompatibleconotrosmotoresdebasesdedatos.
Hacequevariastablasfuncionenjuntas,enmuchoscasos,comosifueranunasola
yestanfcildereutilizarcomoescribirenelblocdenotas!
a.Consultasdeunasolatabla:filtrosysql
Cuandoaunatablaoconsultaenpresentacinhojadedatoslediseamosunfiltro,en2.0aparecelapantalladediseodel
filtroquefuncionaigualquelapantalladediseodelaconsulta,ysipulsamosenelbotnGUARDARrealmenteguardauna
consulta,osipulsamosenCARGARfiltrodesdeconsultaobtenemoslarelacindeconsultasaplicablescomofiltro.
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

10/21

29/10/2015

nitecAccessCdigo3

b.Mododever:Diseo,Hojadedatos,Sql
Diseoeselmodopredeterminadoparanuevaconsulta.ParacomprobarsusresultadospasamosaEjecutarconsulta,loque
nosllevaaHojadedatos(resultados).ParaaprenderSqlpodemosconfrontarlosotrosdosmodosdeverconelmodoSql.
c.MododeverSQL:sugerencias
Copiadeseguridad:mantenerabiertodefondoelblocdenotasoprocesadorSeleccionartextoSQL,Copiar,cambiaralbloc
oprocesador,pegar.GuardareldocumentoconelSQLunavezpegado.
SimplificarElsqlautomaticoquegeneraaccessresultafarragoso:simplificando,sermslegibleydepasoexperimentamos.
Encasodefallos,recuperamoseloriginaldeldocumentoqueguardamos.
EnconsultassimplesnoesnecesarioprecederloscamposdelalistadeSELECTconelnombredelatablaalaquepertenecen)
usaduneditor(comowordpad)confuncin"reemplazar".
Ejemplo:paracambiarvarioscamposdeltipocompras.artculo>artculo,compras.precio>precio,compras.importe>importe...
podemosbuscarcompras.yreemplazarpornada(dejarenblanco)Verificarcadareemplazo(reemplazandotodo,puedequenos
reemplacealgoimprevisto)
Anivelprogramacin:
MuchasfuncionesdeVisualBasicparaAccessrequierenSQL
DAOySQLestnntimamenteligados.
ejemploconsultadiseoysql:pasoapaso,simplificarymodificaryparaincluirencodigo
a.FuncinparaguardartodaslasconsultasdenuestraMDBenmodoSQLenunficherodetexto(sustituyeloselementosenrojo
segntupathytubasededatos)
FunctionExportarQuerydefs()
Open"c:\chi\cw20\prueba.txt"ForOutputAs#1
DimdbAsDatabase,qdAsQueryDef,msgAsString
DimfinAsString*2,iAsInteger,jAsInteger
fin=Chr$(13)&Chr$(10)'valeusarconstantesvbAJ
Print#1,"Querydefscw20.mdb"
msg="Querydefscw20.mdb"&fin
Setdb=CurrentDB()
Forj=0Todb.Querydefs.Count1
Setqd=db.Querydefs(j)
msg=msg&qd.Name&fin'porsiquieresverlistaQdf's
Print#1,qd.Name
Print#1,qd.sql
Print#1,""
Nextj
MsgBoxmsg'verlistaQdf's
db.Close
Close#1
EndFunction

Crearregistrosdeprueba
DurantemislaboresdesoportehecomprobadoqueconformeelconsultanteseplanteaunusodeAccessmsprofesional...sele
crealanecesidaddehacerpruebasderendimiento:
Unnmeromuyelevadoderegistrospuedellegaraseruninconveniente
(...PEROdependiendomuchodecmosemanejen)
Entalcaso,resultacmododisponerdeunmtodocomoelsiguiente,paraobtenerunnmeroimportantederegistrosconlosque
efectuarpruebas,biendevolumenobiendevelocidad,sobreunatablacualquieraqueacabamosdedisearyestvaca
Estepequeofragmentoesun'motor'suficientepara'arrancar'
FunctionAleatu(inf,sup)
aleatu=Int((supinf+1)*Rnd+inf)
EndFunction
ElmotorAleatunogeneravaloresnicoscosaqueesdeagradecersalvoparaclavesnicas:Paraestecasoreservamoselprimer
campodelatablafields(0)
SilatablaallenartieneuncampoIDautonumricocomoclavenica,noslogeneraJETautomticamente.
Siestenoesnuestrocaso,alaplicarelcdigo,elcampo1quedaenblancoamenosquemodifiquemosloslimitesdelbuclefor
b=1...porforb=0...
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

11/21

29/10/2015

nitecAccessCdigo3

Functionengorda2()
DimdbAsDatabase,rsAsRecordset,i,jAsInteger,dAsDouble,bAsByte
Constmxint=32000
Constmxlng=2000000000
Setdb=CurrentDb
'sustituirCostesConveniosporlatablaaengordar
Setrs=db.OpenRecordset("CostesConvenios",2)
j=rs.Fields.Count1
Ford=1ToInputBox("ndeRegistros","Aadirregistrosaleatorios",50000)
rs.AddNew
Forb=1Toj'0=ID
SelectCasers.Fields(b).Type
CasedbInteger
rs.Fields(b)=aleatu(1,mxint)
CasedbLong,dbDouble
rs.Fields(b)=aleatu(1,mxlng)
CasedbText
rs.Fields(b)=v3(rs,b)'verdebajo
Casedbdate
'Clng(#1/1/90#)=32874,Clng(#31/12/99#)=36525
rs.Fields(b)=CDate(aleatu(32874,36525))
CaseElse
Stop
EndSelect
Next
rs.Update
Next
MsgBox"fin"
EndFunction

Explicacindelafuncinv3,querellenaloscamposdetextoconcaracteresasciicomprendidosentre65y90
ElcampoDETEXTOtienetalTAMAO...
llamarafuncinaleatu(elmotor)paraquedevuelvanumerodecaracteresarellenar(entre0ytamao)
tantasvecescomocaracteresarellenar:aadircarcterentre65y90acadenaadevolver(tambinmediantelaoportunallamadaa
aleatuofcourse).
Elnuevofragmentitodecdigo
Functionv3(rst,numerocampo)AsString
'acepta:rst(recordset)(cuyo)numerocampo(esuncampotexto)
'devuelve:unacadenaconlacualrellenamoselcampodetexto>rst(numerocampo)
DimlongitAsByte
longit=rst.Fields(numerocampo).Size1
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

12/21

29/10/2015

nitecAccessCdigo3

'lacantidadminimadecaracteresconquerellenaresecampoes0
'lacantidadmxima,longit
DimrellenarAsByte
'establecerunnmeroaleatoriodecaracteresarellenar
rellenar=aleatu(0,longit)
DimnAsByte,cadenaAsString
Forn=0Torellenar
'montarlacadenaquerellenarelcampotexto
'porejemplomayusculasdelaA(65)alaZ(90)
cadena=cadena&Chr(aleatu(65,90))
Next
v3=cadena
EndFunction
Mejoras:Barradeprogresoymensajedetiempotranscurrido
Functionv2()
DimtAsDate:t=Time'contartiempotranscurrido
DimNRAsLong:NR=500000'numeroderegistros
DimIAsLong
DimNADA
'ensearmsgeiniciarbarraStatus
NADA=SysCmd(acSysCmdInitMeter,"progreso",NR)
ForI=0ToNR'bucleregistros
NADA=SysCmd(acSysCmdUpdateMeter,I)'actualiza
NextI
NADA=SysCmd(acSysCmdRemoveMeter)'elimina
t=Timet:MsgBox"terminadoen:"&t
EndFunction
Deunaspequeasnecesidades,graciasalareusabilidaddelcdigo,aratosmsomenosperdidos,casicualquiercosapuede
llegaraconvertirseenunaherramienta.

Ponermaysculaslaprimeraletrayminsculaselresto
PublicFunctionCapitalizar(ByValtextoAsString)AsString
Capitalizar=UCase(LEFT(texto,1))&LCase(Mid(texto,2))
EndFunction

Ponermaysculaslaprimeraletrayminsculaselrestoconexcepciones
PublicFunctionMultiCap(textoAsVariant)AsVariant
'Capitalizavariaspalabrascontemplandoalgunasexcepciones
DimtempAsVariant
DimiAsInteger
DimansiAsInteger
temp=LCase(texto)'Empezarenminsculas
IfLen(temp)>0Then'Novaco
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

13/21

29/10/2015

nitecAccessCdigo3

Mid(temp,1,1)=UCase(LEFT(temp,1))'1romaysculas
Fori=2ToLen(temp)1
ansi=asc(Mid(temp,i,1))
If(ansi>=65Andansi<=90)Or(ansi>=97Andansi<=122)Or(ansi>192)Then
'letrasmaysculas,minsculasyacentuadas
Else
Mid(temp,i+1,1)=UCase(Mid(temp,i+1,1))
EndIf
'CASOSESPECIALES*****
'Siesapstrofeponerenminsculaselanterior
IfMid(temp,i,1)="'"Then
Mid(temp,i1,1)=LCase(Mid(temp,i1,1))
EndIf
'*****
Next
EndIf
'CASOSESPECIALES*****
i=InStr(temp,"S/N")
Ifi<>0ThenMid(temp,i,3)=LCase(Mid(temp,i,3))

i=InStr(temp,"De")
Ifi<>0ThenMid(temp,i,4)=LCase(Mid(temp,i,4))
i=InStr(temp,"Del")
Ifi<>0ThenMid(temp,i,5)=LCase(Mid(temp,i,5))
i=InStr(temp,"La")
Ifi<>0ThenMid(temp,i,4)=LCase(Mid(temp,i,4))

i=InStr(temp,"Y")
Ifi<>0ThenMid(temp,i,3)=LCase(Mid(temp,i,3))
'*****
MultiCap=temp
EndFunction

Funcinobtenersemana
PublicFunctionObtenerSemana(diaSemanaAsInteger)AsString
Staticsemana(1To7)AsString

semana(1)="Domingo"
semana(2)="Lunes"
semana(3)="Martes"
semana(4)="Mircoles"
semana(5)="Jueves"
semana(6)="Viernes"
semana(7)="Sbado"

IfdiaSemana>=1AnddiaSemana<=7Then
ObtenerSemana=semana(diaSemana)
Else
ObtenerSemana=""
EndIf
EndFunction

Bloquear/Desbloqueartodosloscontrolesenbajorrelieve
PublicSubBloquearControles(frmAsForm,estadoBloqueoAsInteger)
'Bloquear/Desbloqueartodosloscontrolesenbajorrelieve,
'marcndolosdecolordeventanaocolordecaradelbotn
ConstBAJO_RELIEVE=2
DimctrlAscontrol
DimsubfrmAsSubForm
DimiAsInteger
DimcolorAsLong
color=IIf(estadoBloqueo,GRAY,WHITE)
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

14/21

29/10/2015

nitecAccessCdigo3

Fori=0Tofrm.count1
Setctrl=frm(i)

Ifctrl.Section=acDetailThen'SECCINDETALLE=0
If(TypeOfctrlIsTextBox)Or(TypeOfctrlIsComboBox)Or_
(TypeOfctrlIsListBox)Or(TypeOfctrlIsOptionButton)_
Then
Ifctrl.SpecialEffect=BAJO_RELIEVEThen
ctrl.BackColor=color
ctrl.Locked=estadoBloqueo
EndIf
ElseIfTypeOfctrlIsSubFormThen
Setsubfrm=ctrl
CallBloquearControles(subfrm,estadoBloqueo)
EndIf
EndIf
Next
EndSub

Corregirhipervnculodecorreoelectrnico
PublicSubCorregirCorreo(cAsTextBox)
'Alintroducirunhipervnculodecorreoelectrnico,
'Accesssepiensaqueesdeweb.Despusdeactualizarelcampo
'esteprocedimientoescapazdecorregireldesaguisado.
OnErrorGoToErr_CorregirCorreo
DimvAsString
DimiAsInteger
v=c
i=InStr(v,"http://")
Ifi<>0Then
Mid(v,i,7)="mailto:"
c=v
EndIf
Exit_CorregirCorreo:
ExitSub
Err_CorregirCorreo:
MsgBoxErr.Description,vbCritical
ResumeExit_CorregirCorreo
EndSub

Correoobtienelacadenadelhipervnculo
PublicFunctionElectrograma(OptionalvAsVariant="")AsVariant
'Obtienelacadenadelhipervinculo
OnErrorGoToError_Electrograma

'DiminteractivoAsBoolean
'interactivo=False
'IfIsNull(v)Then
'v=InputBox("Introduceunhipervnculo",,"textodelantero#mailto:direccin@esaes.es#")
'interactivo=True
'EndIf
DiminicioAsInteger
DimfinAsInteger

inicio=InStr(v,"#mailto:")+8
fin=InStr(inicio,v,"#")

Electrograma=Mid(v,inicio,fininicio)

'IfinteractivoThen
'MsgBox"Elcorreoes:"&Electrograma,vbInformation
'EndIf
Exit_Electrograma:
ExitFunction
Error_Electrograma:
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

15/21

29/10/2015

nitecAccessCdigo3

'MsgBoxError,vbCritical
Electrograma=v
ResumeExit_Electrograma
EndFunction

FuncinobtenerlaletradelNIF
Estafuncindevuelvelaletracorrespondientealdnipasadocomoargumento.Eldnidebeserunnmeroenterolargo.Encasode
quenoseencuentrelaletra,lafuncindevuelvelacadena"Error".
PublicFunctionLetraNIF(dniAsLong)AsString
DimtmpAsLong
tmp=dni(Int(dni/23)*23)
SelectCasetmp
Case0,23:LetraNIF="T"
Case1:LetraNIF="R"
Case2:LetraNIF="W"
Case3:LetraNIF="A"
Case4:LetraNIF="G"
Case5:LetraNIF="M"
Case6:LetraNIF="Y"
Case7:LetraNIF="F"
Case8:LetraNIF="P"
Case9:LetraNIF="D"
Case10:LetraNIF="X"
Case11:LetraNIF="B"
Case12:LetraNIF="N"
Case13:LetraNIF="J"
Case14:LetraNIF="Z"
Case15:LetraNIF="S"
Case16:LetraNIF="Q"
Case17:LetraNIF="V"
Case18:LetraNIF="H"
Case19:LetraNIF="L"
Case20:LetraNIF="C"
Case21:LetraNIF="K"
Case22:LetraNIF="E"
CaseElse:LetraNIF="Error"
EndSelect
EndFunction
UsoenAccess
Primerodebesescribirlafuncin.SilainsertasenlaseccinMdulosdelaventanadelabasededatos,serpblicaparatodos
loselementos(sepodrusarentodoslosformularios,informesyconsultas).
Crea,enunformulariooenuninforme,uncampodetextoindependiente.Siesenunformulario,asignaasuspropiedadesActivado
yBloqueado,losvaloresNoyS,respectivamente,paraqueelusuarionopuedamodificarelvalor.
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

16/21

29/10/2015

nitecAccessCdigo3

Seguidamente,ensupropiedadOrigendelcontrol,dalelasiguientefrmula:
=LetraNIF([campo])
DondecampoeselcampodelatabladedondesevaarecogerelDNI.Silatablaoelcamponosehanrecogidoenelformularioo
enelinformedirectamente,debersindicarloas:
=LetraNIF([Tabla]![campo])
Silaintroducesenunaconsulta,enCampoescribelosiguiente:
Nombre:LetraNIF([campo])
DondeNombreeselnombredelnuevocampodondesevaa"guardar"laletradelDNI,ycampoelcampodedondeserecogeel
DNI.Silatablaalaqueperteneceoelcamponosehanrecogidoenlaconsulta,debersindicarelnombredelatabla:
Nombre:LetraNIF([Tabla}![campo])
Porltimo,siquieresqueteaparezcaelnifcompleto(dni+letra),introducelosiguienteenlaconsulta,formulariooinforme:
[campo]&LetraNIF([campo])

Contadorpersonalizado
OptionExplicit
FunctionMicontador()
DimdbAsDatabase,CUSTAsTable,INTERN,TEMP
Setdb=CurrentDb()
SetCUST=db.OpenTable("Clientes")
CUST.Index="PRIMARYKEY"
INTERN=2
CUST.Seek">=",INTERN
TEMP=CUST![CODI]
DoWhileTEMP=INTERN
INTERN=CUST![CODI]
INTERN=INTERN+1
CUST.Seek">=",INTERN
IfCUST.NoMatchThen
TEMP=0
Else:TEMP=CUST![CODI]
EndIf
Loop
Micontador=INTERN
CUST.Close
EndFunction

Verimgenessinguardarlasenunabasededatos
'Estafuncinvadedicadaatodasaquellaspersonasquedeseanverimgenesenunformulariooinforme,sintenerqueguardarlas
en'labasededatos paranoincrementarendemasiadosutamao.
'Elejemplosevaaexplicarsobreunformulario,parapoderimplementarlaposibilidaddecambiaroagregarunaimagen.Enun
'informe,lonicoquehayquehaceresomitiresaparte.
'Crearlatabla
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

17/21

29/10/2015

nitecAccessCdigo3

'Supongamosquetenemosunabasededatosdondeseguardalainformacindeunaseriedepersonas.
'Cmonosabemosquinesson,deseamosguardarunafotosuyaparareconocerlos cadavezqueveamossusdatos.Conlocual,
'creamosunatablaconlossiguientescampos:

'idAutonumricoSerelcampoclavedelatabla.
'NombreTextoGuardarelnombreylosapellidosdecadapersona.
'RutaImagenTexto255Contendrlarutaynombredelarchivogrfico.
'Latablapuedecontenertodoslosdatosquesedeseeparaestafuncinelnico
'imprescindibleesrutaImagen.Selehadadounalongitudde255caracteres(lamximapermitida)
'aunquedependiendodelsistemasobreelcualsetrabaje,sepodrareducirestalongitud.
'Hayqueadvertirquesiseabrelatablaenmodonormal,noseverningunaimagen
'tanslolarutadestaenelrboldedirectoriosdelordenador.
'Crearelformulario
'Ahoraseprocedeacrearelformulario.Sepuedeutilizarunasistente,ocrearloapelodaigual,lacuestinesquesuorigenseala
'tablaquehemoscreadoanteriormente
'SisehautilizadoelAsistente,tendrsloscamposbasadosenlatabla.
'Puesbien,ahorahayqueaadirunbotn,paraqueelusuariopuedabuscarlaimagen
'quedesee,uncontrolImagenparapodervisualizarlaimagenyuncontrolCommonDialogpara
'quesalgalaventanadeAbrirarchivo.
'NoencuentraselcontrolCommonDialog?VeaInsertar|Controlespersonalizados,
'yhayteaparecerunalistacontodosloscontrolesquepuedesagregaratuformulario.
'Elquebuscamossellama"MicrosoftCommonDialogControl,versionx.x".Loseleccionas
'ypulsasAceptar.Cuandolohayasinsertado,teapareceruniconodentrodelformulario.
'Djaloenunlugardelformulariodondenotemoleste,ynotepreocupesporsu
'visualizacin(Cuandoabraselformularioenmodonormal,noseverestecontrolporningunaparte).
'SielcontrolImagentevuelveloco,porquetepideunaimagenparapoderinicializarse
'pinchaenunacualquieray,unavezcreado,qutasela.
'Yacontinuacin,laspropiedadesquevamosadaraestostrescontrolesquehemosaadido:
'ControlImagenNombre:picGrafico
'Tipodeimagen:Vinculado
'ControlBotnNombre:btnRutaImagen
'Ttulo:...
'ControlCommonDialog:Nombre:cmmDialogo
'Loscontrolesbasadosenlatablalosdejamosconlaspropiedadesqueleshayadado
'elAsistente.SinoloshemoscreadoconelAsistente,selesdaelmismonombrequeeldesucampodeorigen.
'Insertarelcdigo
'LosiguienteescrearelcdigoenVBAnecesarioparatrabajarconimgenes.
'Secrearparapoderhacerlosiguiente:
'Visualizarlaimagencuandosecargueunregistroguardado.
'Cargarunanuevaimagen.

http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

18/21

29/10/2015

nitecAccessCdigo3

'Paraello,vealmenVer|Cdigo,einsertaelsiguientecdigo:
PrivateSubForm_Current()
DimmsgAsString
OnErrorGoToerrForm_Current
'Sedescargaelgraficoanterior
picGrafico.Picture=""
'Sihaylarutadeunaimagenguardada,semuestra
IfLen(rutaImagen)>0Then
picGrafico.Picture=rutaImagen
Else
'Aquisepuedeindicarquecargueunaimagenpordefecto:
'Ellogodeunaempresa,unafoto,etc.
EndIf
ExitSub
errForm_Current:
SelectCaseErr
Case52To76'Erroresdeentrada/salida
msg="Nosepudocargarelarchivoindicado."
Case481'Erroresconelformato
msg="Elarchivonotieneunformatovalido."
CaseElse'Otroserrores
msg="Ocurriunerroralabrirelarchivo."
EndSelect
msg=msg&vbCrLf&"Porfavor,compruebeelarchivo."
msg=msg&vbCrLf&"Debeserunarchivograficoy"
msg=msg&"accesibledesdelabasededatos."
msg=msg&vbCrLf&Err.Number&":"&Err.Description
MsgBoxmsg,vbExclamation,"Errorconarchivografico"
EndSub
PrivateSubbtnRutaImagen_Click()
DimfiltroAsString
DimmsgAsString
OnErrorGoToerrbtnRutaImagen_Click
'Secarganlasextensionesposiblesdearchivosgrficos
filtro="Todoslosarchivos(*.*)|*.*|"
filtro=filtro&"Todoslosarchivosgraficos|*.jpg*.pcd"
filtro=filtro&"*.gif*.drm*.pct*.hgl*.plt*.wpg"
filtro=filtro&"*.cdr*.cgm*.dxf*.wmf*.bmp*.eps"
filtro=filtro&"*.tif*.pcx*.ico*.dib*.emf|"
filtro=filtro&"Mapasdebits(*.bmp*.dib)|*.bmp*.dib|"
filtro=filtro&"Metaarchivos(*.wmf*.emf)|*.wmf*.emf|"
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

19/21

29/10/2015

nitecAccessCdigo3

filtro=filtro&"ArchivosdePaintbrush(*.pcx)|*.pcx|"
filtro=filtro&"Iconos(*.ico)|*.ico|"
filtro=filtro&"ArchivosTIF(*.tif)|*.tif|"
filtro=filtro&"PostScriptencapsulado(*.eps)|*.eps|"
filtro=filtro&"Formato2DdeAutoCad(*.dxf)|*.dxf|"
filtro=filtro&"Metaarchivogrfico(*.cgm)|*.cgm|"
filtro=filtro&"ArchivosdeCorelDraw(*.cdr)|*.cdr|"
filtro=filtro&"GraficosdeWordPerfect(*.wpg)|*.wpg|"
filtro=filtro&"GraficosHP(*.hgl*.plt)|*.hgl*.plt|"
filtro=filtro&"ArchivosdeMacintosh(*.pct)|*.pct|"
filtro=filtro&"MicrografxDesigner/Draw(*.drw)|*.drw|"
filtro=filtro&"GIFCompuServe(*.gif)|*.gif|"
filtro=filtro&"KodakPhotoCD(*.pcd)|*.pcd|"
filtro=filtro&"ArchivosJPEG(*.jpg|*.jpg"
cmmDialogo.Filter=filtro
cmmDialogo.FilterIndex=2
'SecarganotraspropiedadesdelCommonDialog
cmmDialogo.CancelError=True
cmmDialogo.DialogTitle="Cargararchivografico"
'Sitenemosunaimagenenelformulario,secogesuruta
'paramostrarlainicialmenteenlaventanaAbrir.
IfLen(rutaImagen)>0Then
cmmDialogo.FileName=rutaImagen
EndIf
cmmDialogo.ShowOpen
'Siel/lausuario/aseleccionounaimagen,secomprueba
'quelalongitudderutaynombrenosobrepaselos255
'caracteres,yaquenoseguardariabienenlaBD
IfLen(cmmDialogo.FileName)>255Then
msg="Larutadelarchivoesmayorde255caracteres."
msg=msg&vbCrLf&"Siintentarecogerestaimagen,"
msg=msg&"surutaseveratruncada"
msg=msg&vbCrLf&"ynopodrvisualizarladespus."
msg=msg&vbCrLf&"Deseacargarladetodosmodos?"
IfMsgBox(msg,vbQuestion+vbYesNo,_
"Longituddelnombredearchivosuperada")=_
vbNoThen
ExitSub
EndIf
EndIf
'Secargalaimagen
http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

20/21

29/10/2015

nitecAccessCdigo3

picGrafico.Picture=cmmDialogo.FileName
rutaImagen=cmmDialogo.FileName
ExitSub
errbtnRutaImagen_Click:
SelectCaseErr
CasecdlCancel'ElusuariopulsoCancelar
ExitSub
Case52To76'Erroresdeentrada/salida
msg="Nosepudocargarelarchivoindicado."
Case481'Erroresconelformato
msg="Elarchivonotieneunformatovalido."
CaseElse'Otroserrores
msg="Ocurriunerroralabrirelarchivo."
EndSelect
msg=msg&vbCrLf&"Porfavor,compruebeelarchivo."
msg=msg&vbCrLf&"Debeserunarchivograficoy"
msg=msg&"accesibledesdelabasededatos."
msg=msg&vbCrLf&Err.Number&":"&Err.Description
MsgBoxmsg,vbExclamation,"Errorconarchivografico"
picGrafico.Picture=rutaImagen
EndSub
'As,cuandosevayaaunregistro,seactivareleventoAlactivarregistro,
'quellamaralprocedimientoPrivateSubForm_Current()quehemoscreado,cargandolaimagen,
'siesquehayunareferenciaaella(cuandosevayaaunregistronuevo,noocurrenada).
'Encasodequeseproduzcaunerror,nosaparecerunmensajedeerrorynose
'mostrarningunaimagen.
'Despus,cuandosepulsesobreelbotn,sevisualizarunaventanaparaseleccionar
'laimagendeseada,quesecargarenelcontrolImagensinoocurreningnerror.

http://users.mundivia.es/afelix/Access/AccessCodigo3.htm#FuncinobtenerlaletradelNIF

21/21

También podría gustarte