Funciones para comprobar caracteres en cadenas. Visual Basic.

Visual Basic 1 Comentario »

Las siguientes funciones son para comprobar las cadenas de texto o numéricas en Visual Basic 6.

Primera función. Devuelve "True" si todos los caracteres de una cadena son alfabéticos, es decir, si son todos letras. Si no lo son o si la cadena de texto es de longitud 0 devuelve "False".

Visual Basic:
  1. Public Function IsAlphaBetical(TestString As String) As Boolean
  2.     Dim sTemp As String
  3.     Dim iLen As Integer
  4.     Dim iCtr As Integer
  5.     Dim sChar As String
  6.    
  7.     sTemp = TestString
  8.     iLen = Len(sTemp)
  9.     If iLen> 0 Then
  10.         For iCtr = 1 To iLen
  11.             sChar = Mid(sTemp, iCtr, 1)
  12.             If Not sChar Like "[A-Za-z]" Then Exit Function
  13.         Next
  14.    
  15.     IsAlphaBetical = True
  16.     End If
  17. End Function

Segunda función. Devuelve "True" si todos los caracteres de una cadena son alfanumericos, es decir, si los elementos que componen la cadena son números o letras. Si no lo son o si la cadena de texto es de longitud 0 devuelve "False".

Visual Basic:
  1. Public Function IsAlphaNumeric(TestString As String) As Boolean
  2.  
  3.     Dim sTemp As String
  4.     Dim iLen As Integer
  5.     Dim iCtr As Integer
  6.     Dim sChar As String
  7.    
  8.     sTemp = TestString
  9.     iLen = Len(sTemp)
  10.     If iLen> 0 Then
  11.         For iCtr = 1 To iLen
  12.             sChar = Mid(sTemp, iCtr, 1)
  13.             If Not sChar Like "[0-9A-Za-z]" Then Exit Function
  14.         Next
  15.    
  16.     IsAlphaNumeric = True
  17.     End If
  18.    
  19. End Function

Tercera función. Devuelve "True" si todos los caracteres de una cadena son numéricos, es decir, si los elementos que componen la cadena son números. Si no lo son o si la cadena de texto es de longitud 0 devuelve "False". Esta función se diferencia de IsNumeric() en que Isnumeric(30.45) devuelve "True" mientras que en esta función devolvería "False".

Visual Basic:
  1. Public Function IsNumericOnly(TestString As String) As Boolean
  2.     Dim sTemp As String
  3.     Dim iLen As Integer
  4.     Dim iCtr As Integer
  5.     Dim sChar As String
  6.  
  7.     sTemp = TestString
  8.     iLen = Len(sTemp)
  9.     If iLen> 0 Then
  10.         For iCtr = 1 To iLen
  11.             sChar = Mid(sTemp, iCtr, 1)
  12.             If Not sChar Like "[0-9]" Then Exit Function
  13.         Next
  14.    
  15.     IsNumericOnly = True
  16.     End If
  17.    
  18. End Function

Desproteger hoja de Excel con contraseña.

Trucos XP, Visual Basic 219 Comentarios »

¿Alguna vez has querido anular la contraseña de una hoja de Excel y no la recordabas?.

Bueno, este truco es muy antiguo pero no por ello menos efectivo. El resultado de aplicar este truco es la obtención de una contraseña valida para desproteger la hoja de excel. Al decir que es una contraseña valida quiero decir que no es la original pero nos permite desbloquearla igualmente.

El truco consiste en una rutina de programación que al ejecutarla (y esperar un rato mientras consigue la contraseña) nos muestra un mensaje con una contraseña válida.

Para ello, el código que pondré a continuación hay que ponerlo en un módulo de visual basic de la aplicación Excel. Lo puedes encontrar en el menú de Excel "Herramientas / Macro / Editor de Visual Basic" o bien pulsando (ALT+F11) para abrir el editor, pegamos el código, cerramos el editor.

Ahora seleccionamos la hoja que queremos desproteger y ejecutamos la macro "breakit" (ALT+F8 para seleccionarla). Tras la ejecución, un mensaje dará una contraseña equivalente, y la hoja ya estará desprotegida.

Visual Basic:
  1. Sub breakit()
  2.  
  3.    Dim i As Integer, j As Integer, k As Integer
  4.    Dim l As Integer, m As Integer, n As Integer
  5.  
  6.    On Error Resume Next
  7.      For i = 65 To 66
  8.       For j = 65 To 66
  9.        For k = 65 To 66
  10.         For l = 65 To 66
  11.          For m = 65 To 66
  12.           For i1 = 65 To 66
  13.            For i2 = 65 To 66
  14.             For i3 = 65 To 66
  15.              For i4 = 65 To 66
  16.               For i5 = 65 To 66
  17.                For i6 = 65 To 66
  18.                 For n = 32 To 126
  19.  
  20.    ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
  21.       Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
  22.       Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
  23.  
  24.    If ActiveSheet.ProtectContents = False Then
  25.       MsgBox "Un password valido es " & Chr(i) & Chr(j) & _
  26.          Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) _
  27.          & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
  28.       Exit Sub
  29.    End If
  30.                Next
  31.               Next
  32.              Next
  33.             Next
  34.            Next
  35.           Next
  36.          Next
  37.         Next
  38.        Next
  39.       Next
  40.      Next
  41.     Next
  42.  
  43. End Sub

Ejecutar un programa con Shell y esperar a que termine en Visual Basic

Visual Basic 3 Comentarios »

Esta rutina se utiliza para lanzar una aplicación desde el Shell visual basic y esperar a que la aplicación lanzada termine para continuar con la ejecución.

Para ello se utiliza la función API OpenProcess para identificar el proceso que se ha lanzado con el Shell y se espera hasta que el proceso termine para continuar la ejecución.

En un módulo creamos el siguiente código para poder utilizar las funciones de la API:

Visual Basic:
  1. Option Explicit
  2. Private Declare Function OpenProcess Lib "kernel32" _
  3. (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
  4. ByVal dwProcessId As Long) As Long
  5. Private Declare Function GetExitCodeProcess Lib "kernel32" _
  6. (ByVal hProcess As Long, lpExitCode As Long) As Long
  7. Private Const STATUS_PENDING = &H103&
  8. Private Const PROCESS_QUERY_INFORMATION = &H400

Luego en el mismo módulo creamos la función:

Visual Basic:
  1. Public Function ShellandWait(ExeFullPath As String, _
  2. Optional TimeOutValue As Long = 0) As Boolean
  3.     Dim lInst As Long
  4.     Dim lStart As Long
  5.     Dim lTimeToQuit As Long
  6.     Dim sExeName As String
  7.     Dim lProcessId As Long
  8.     Dim lExitCode As Long
  9.     Dim bPastMidnight As Boolean
  10.     On Error GoTo ErrorHandler
  11.     lStart = CLng(Timer)
  12.     sExeName = ExeFullPath
  13.     'Deal with timeout being reset at Midnight
  14.     If TimeOutValue> 0 Then
  15.         If lStart + TimeOutValue <86400 Then
  16.             lTimeToQuit = lStart + TimeOutValue
  17.         Else
  18.             lTimeToQuit = (lStart - 86400) + TimeOutValue
  19.             bPastMidnight = True
  20.         End If
  21.     End If
  22.     lInst = Shell(sExeName, vbMinimizedNoFocus)
  23. lProcessId = OpenProcess(PROCESS_QUERY_INFORMATION, False, lInst) 'Optenemos el ProcessID
  24.     Do  'Aqui se genera un ciclo hasta que el proceso sea distinto de pendiente, o sea, Alla terminado.
  25.         Call GetExitCodeProcess(lProcessId, lExitCode) ' Optenemos el si hay exits code o todavia esta en ejecucion (pending)
  26.         DoEvents
  27.         If TimeOutValue And Timer> lTimeToQuit Then
  28.             If bPastMidnight Then
  29.                  If Timer <lStart Then Exit Do
  30.             Else
  31.                  Exit Do ' Se sale del ciclo si se acavo el tiemo de espera
  32.             End If
  33.     End If
  34.     Loop While lExitCode = STATUS_PENDING
  35.     ShellandWait = True
  36. ErrorHandler:
  37. ShellandWait = False
  38. Exit Function
  39. End Function

Y luego llamar a la función. La podemos llamar de dos formas, con el valor opcional o sin el:

ShellandWait (text1.text,0) - espera infinitamente hasta que termine el proceso.

ShellandWait (text1.text,10000) - espera 10 seg. o el termino del proceso para salir.

Visual Basic:
  1. Private Sub Command1_Click()
  2. Dim retval As Variant
  3. retval = ShellandWait(Text1.Text)
  4. MsgBox "HOLA"
  5. End Sub

Descarga un ejemplo desde aquí.

Reduce de tamaño tus jpg con Visual Basic.

Herramientas, Visual Basic 11 Comentarios »

Esta es una pequeña aplicación que utilizo para ponerla a disposición de los inexpertos que permite reducir considerablemente el tamaño de las imágenes jpg.

Los resultados son sorprendentes y todo gracias a la librería DIjpg.dll.

El código de visual basic es el siguiente:
Lee el resto de esta entrada »

WP Theme & Icons originales por N.Design Studio.
Aviso Legal Entradas RSS Comentarios RSS Acceder