Buscar Dato Especifico en una Pagina WEB
'***************************************************************
'& &*
'& &*
'& &*
'& &*
'& Jefferson Jimenez (JJJT) &*
'& Cabimas - Venezuela &*
'& Febrero - 2011 &*
'& &*
'& &*
'& &*
'& &*
'& &*
'***************************************************************
'Las API
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" ( _
ByVal lpBuffer As String, _
ByVal nSize As Long) As Long
Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" _
(ByVal sAgent As String, ByVal lAccessType As Long, _
ByVal sProxyName As String, ByVal sProxyBypass As String, _
ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" _
(ByVal hInternetSession As Long, ByVal sURL As String, _
ByVal sHeaders As String, ByVal lHeadersLength As Long, _
ByVal lFlags As Long, ByVal lContext As Long) As Long
Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, _
ByVal sBuffer As String, ByVal lNumBytesToRead As Long, _
lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) _
As Integer
'Establezco las Constantes
Const PagWeb = "http://contribuyente.seniat.gob.ve/BuscaRif/BuscaRif.jsp?p_rif=", _
EscribeCaChe = &H4000000, _
LenBuff = 256, _
CadenVacia = vbNullString
'Const PagWeb = "http://www.seniat.gov.ve/BuscaRif/BuscaRif.jsp?p_rif=", _
EscribeCaChe = &H4000000, _
LenBuff = 256, _
CadenVacia = vbNullString
'Variable privadas del modulo
Private RifValue2 As Variant
Private NameCpo As Boolean
Public Actividad As Variant
Public Condicion As Variant
Public PorcentajeContr As Variant
Public Actualizado As Variant
Public StrCondicion As Variant
Public EmpresaAct As Boolean
'Funcion para buscar un dato especifico en una pagina WEB
'especificamente en "VENEZUELA" donde las empresas estan registradas
'bajo un numero de RIF y es necesario verificar la existencia de esta empresa
Function BuscaNameRIF _
(Optional CpoTxtRIF, Optional CpoTxtRes As Control) As String
On Error Resume Next
'Creo la referencia a Microsoft Scripting Runtime
References.AddFromFile (SystemFolder & "scrrun.dll") 'La Agrego
'Asigno Variables de Uso
Dim NRif As String
Dim NRif2 As String
Dim NoExiste As String
Dim CpoTxtWeb As Variant
Dim lngWEB As Long
Dim CodeFuente As Variant
'Verifico que exista la conexion a internet
If NameCpo = True Then
MsgBox "Disculpe no hay conexion a internet" _
& vbCrLf & "Vuelva a intentar", vbInformation, "JJJT"
CpoTxtRIF.Value = Null 'Vacio los campos
CpoTxtRes.Value = Null
NameCpo = False 'Devuelvo el valor original a la variable
Exit Function 'Detengo la ejecucion del codigo
End If
'De no haber nada escrito en el campo txtRIF
If IsNull(CpoTxtRIF) Then
MsgBox "Se necesita un numero de RIF ", vbCritical, "JJJT"
CpoTxtRIF.SetFocus
Exit Function
Else
'Obtengo el Codigo Fuente de la Pagina Web y se lo paso a una variable variante
CpoTxtWeb = CodigoFuente(PagWeb & CpoTxtRIF.Value)
'modifico la misma variable y me creo un archivo txt solo de la linea 73
'asignandole lo leido
CpoTxtWeb = LeeLineaTxt(73)
Actividad = LeeLineaTxt(85)
Condicion = LeeLineaTxt(87)
If InStr(1, Condicion, "Condición: Contribuyente Ordinario del IVA", 1) > 0 Then
PorcentajeContr = "Porcentaje de Retencion 75%"
StrCondicion = "La condición de este contribuyente requiere la retención del 75% del impuesto causado, salvo que incurra en los supuestos establecidos para la retención del 100%."
Condicion = Condicion & " y Agente de Retención del IVA " & StrCondicion
Else
Condicion = Condicion
StrCondicion = "La condición de este contribuyente requiere la retención del 100% del impuesto causado, salvo que esté exento, no sujeto o demuestre ante el Agente de Retención del IVA que es un contribuyente exonerado."
PorcentajeContr = "Porcentaje de Retencion 100%"
End If
Actualizado = LeeLineaTxt(95)
If InStr(1, Actualizado, "ACTUALIZADO", 1) > 1 Then
EmpresaAct = True
Else
EmpresaAct = False
End If
'Extraigo solo el RIF y se lo paso a una variable
NRif = Mid(CpoTxtWeb, 48, 10)
'Extraigo el nombre de la empresa asociada a este RIF
NRif2 = Right(CpoTxtWeb, Len(CpoTxtWeb) - InStrRev(CpoTxtWeb, ";"))
'Le asigno valor a una variable en caso de no existir el RIF escrito al campo
NoExiste = Left(User(NRif2, "("), 9)
'Verifico exista la pagina
CodeFuente = CodigoFuente(PagWeb & CpoTxtRIF.Value)
lngWEB = InStr(1, CodeFuente, "404 Not Found", 1)
If lngWEB <> 0 Then
MsgBox "la pagina solicitada no existe", vbInformation, "JJJT"
'Elimino el txt
Kill CurrentProject.Path & "\TxtRif.txt"
Exit Function
End If
'Leo la variable y la comparo
If NoExiste = "No existe" Then
MsgBox "No existe el contribuyente asociado", vbInformation, "JJJT"
PorcentajeContr = ""
CpoTxtRIF.Value = Null 'Vacio el campo
CpoTxtRIF.SetFocus
'Elimino el txt
Kill CurrentProject.Path & "\TxtRif.txt"
Exit Function
End If
'Limpio la variable y solo coloco el nombre de la empresa a la funcion
BuscaNameRIF = User(NRif2, "(")
'Elimino el txt
Kill CurrentProject.Path & "\TxtRif.txt"
End If
'Fin del codigo
If Err.Number = 424 Then Err.Clear
Err.Clear
End Function
Private Function CodigoFuente(DireccionURL As String) As String
'Abro reloj
DoCmd.Hourglass True
'Asigno Variables de Uso
Dim Bufer As String * LenBuff
Dim Reslt As Integer
Dim Datos As String
Dim AbrirURL As Long
Dim AbrirInternet As Long
Dim RetoRno As Long
'Abro Internet cargandome la DLL WiniNet
AbrirInternet = InternetOpen("vb wininet", 1, CadenVacia, CadenVacia, 0)
'Acto seguido abro la pagina WEB
AbrirURL = InternetOpenUrl _
(AbrirInternet, DireccionURL, CadenVacia, 0, EscribeCaChe, 0)
'Si la Funcion esta cargada
If AbrirInternet <> 0 Then
'Y logro abrir la pagina
If AbrirURL Then
'Le paso el binario de la pagina WEB
Reslt = InternetReadFile(AbrirURL, Bufer, LenBuff, RetoRno)
'Cargo los datos leidos por la API y se los paso a la varible
Datos = Bufer
Do While RetoRno <> 0 'Termino haciendolo creando un Bucle
Reslt = InternetReadFile(AbrirURL, Bufer, LenBuff, RetoRno)
Datos = Datos + Mid(Bufer, 1, RetoRno)
Loop
'Cierro
End If
'De no haber conexion a internet
If Reslt = 0 Then
NameCpo = True
Call BuscaNameRIF
DoCmd.Hourglass False
Exit Function
End If
'Cierro la Hwnd de la DLL WiniNet
Reslt = InternetCloseHandle(AbrirURL)
'Le paso todo lo leido a la funcion
CodigoFuente = Datos
'Luego creo el txt para poder leer la linea que yo quiero
EscribeTxt CodigoFuente
Else
'De no haber conexion a internet
MsgBox "Disculpe no hay conexion a internet" _
& vbCrLf & "Vuelva a intentar", vbInformation, "JJJT"
End If
'Cierro
'Y desactivo el Reloj
DoCmd.Hourglass False
End Function
Private Sub EscribeTxt(Datos As String)
'Por aqui escribo lo leido y creo un txt
Dim NumeroInt As Long
Dim LaRuta As String
Dim Escribe As String
LaRuta = CurrentProject.Path
LaRuta = LaRuta & "\" & "TxtRif.txt"
NumeroInt = FreeFile
Open LaRuta For Output As #NumeroInt
Escribe = Datos
Print #NumeroInt, Escribe
Close #NumeroInt
End Sub
Private Function User(StrCtl As String, Optional Caracter As String) As String
'Con esta funcion reviso una cadena, para eliminar algun caracter que le indique
Dim Usere As String
Dim Usar As String
If Caracter = "" Then
Usar = Right(StrCtl, Len(StrCtl) - InStrRev(StrCtl, "\"))
User = Usar
Exit Function
Else
Usar = Right(StrCtl, Len(StrCtl) - InStrRev(StrCtl, "\"))
Usere = Right(Usar, Len(Usar) - InStrRev(Usar, Caracter) + 1)
If Left(Usere, 1) = Caracter Then
User = Left(Usar, InStrRev(Usar, Caracter) - 1)
Else
User = Usar
End If
End If
End Function
Private Function LeeLineaTxt(LiNea As Long) As String
On Error Resume Next
'Declaro las variable
Dim fso As New FileSystemObject
Dim archivo As TextStream
Dim i As Integer
'Creo un nuevo Objeto
Set fso = CreateObject("Scripting.FileSystemObject")
'Creo un marcador de posicion variable
Set archivo = fso.OpenTextFile(CurrentProject.Path & "\TxtRif.txt", 1)
'Recorro el txt y me detengo en la linea especificada
For i = 1 To LiNea
'Leo la linea especificada a la cargo a la memoria del objeto
archivo.Skipline
Next 'Continuo el recorrido
'Al cerrar el bucle le escribo a la Funcion lo que leyo Skipline
LeeLineaTxt = archivo.readline()
'Cierro el Objeto
archivo.Close
'Desvinculo los Objetos
Set fso = Nothing
Set archivo = Nothing
Err.Clear
End Function
Private Function SystemFolder() As String
Dim Buffer As String * 256
Dim Tam As Long
' Muestra el path del directorio de sistema
Tam = GetSystemDirectory(Buffer, Len(Buffer))
SystemFolder = Left$(Buffer, Tam) & "\"
End Function
Función para buscar y/o verificar un DATO en una pagina WEB
específicamente en "VENEZUELA" donde las empresas están registradas
bajo un numero de RIF y es necesario verificar la existencia de esta empresa
Es requisito obligatorio del SENIAT verificar el numero de RIF de las empresas.
Esto debe hacerse al momento de facturar, bien consultando en la pagina del SENIAT o
presentando el RIF de la empresa en original.
Para ello he creado un Código que ha continuación publico
Option Explicit