Aplicacion Servidor WinSock de Visual Basic.

Visual Basic 3 Comentarios »

Si quieres comprobar que realmente tu aplicacion de Windows Sockets está funcionando necesitas el servidor para poder ver los mensajes.

Por supuesto has de ejecutarlo en otro pc y escoger un puerto que no esté siendo utilizado por windows, algo como 20145 o similar. Es importante que en el equipo que lo pongas abras ese puerto en el firewall o lo deshabilites momentaneamente durante las pruebas, de otra forma no te funcionará.

Para usarlo debes poner el puerto y pulsar “Escuchar”.

Formato del formulario:

Los nombres de los controles son:

  • Command1 –> Botón enviar.
  • Command2 –> Botón escuchar.
  • Command3 –> Botón desconectar.
  • Text1 –> Ventana de datos recibidos y enviados.
  • Text2 –> Caja de texto para el mensaje a enviar.
  • Text3 –> Caja de texto para el puerto que utilizaremos.
  • Winsock1 –> control “Microsoft Winsock Control”.

Código para la aplicación:

Lee el resto de esta entrada »

Aplicacion Cliente WinSock de Visual Basic.

Visual Basic 3 Comentarios »

Winsock es una interfaz de programación y el programa de apoyo que se encarga de las entradas / salidas de las solicitudes de las aplicaciones de Internet en un sistema operativo Windows. Se llama Winsock porque es una adaptación para Windows de la interfaz de sockets de Berkeley Unix. Sockets es un convenio para la conexión con el intercambio de datos y programas entre dos procesos dentro del mismo equipo o en una red.

Winsock funciona entre un programa de aplicación, como (por ejemplo) un navegador Firefox y el programa Internet en el ordenador que utiliza TCP / IP. A petición de las corrientes en el siguiente orden:

Navegador web o de otras aplicaciones
|
Winsock.dll
|
TCP / IP capas
|
Módem o tarjeta de red
|
El Internet y el destino

Winsock proporciona esta interfaz para diferentes versiones del sistema operativo Windows. A partir de Windows 95, Winsock llegó como parte del sistema operativo, pero en los anteriores sistemas, debía instalarse. Los sistemas basados en UNIX no requieren un equivalente porque Winsock TCP / IP y su uso de sockets fue diseñado para ejecutarse directamente con los programas de aplicación UNIX.

A continuación os expongo una simple aplicación que os ayudará a comprender como se maneja desde visual basic. Puedes crearte un formulario como el siguiente:

Los nombres de los controles son:

  • Command1 —> botón enviar.
  • Command2 —> botón conectar.
  • Command3 —> botón desconectar.
  • Text1 —> Ventana de datos recibidos y enviados.
  • Text2 —> caja de texto con el mensaje a enviar.
  • Text3 —> caja de texto del servidor.
  • Text4 —> caja de texto para el puerto de conexión.
  • Winsock1 —> control “Microsoft Winsock Control”.
  • Las Label las ponéis a vuestro gusto.

Código para la aplicación: Lee el resto de esta entrada »

Calcula la letra del Nif en Visual Basic

Visual Basic 1 Comentario »

Aquí os dejo el código de una aplicación muy simple pero efectiva que poniendo los números del NIF os calcula la letra.

La aplicación tiene la particularidad de permanecer siempre visible en la esquina inferior derecha y ocupar poco espacio, de esta manera es posible tenerla a mano mientras se trabaja con otras aplicaciones y no nos quita visión.

A continuación voy a dejar el código pero si alguien está interesado en la aplicación completa no tiene mas que decirlo y subo una instalación para que la descarguéis.

El programa se compone de un módulo con el siguiente código:

Visual Basic:
  1. Public Declare Function SetWindowPos Lib "user32" _
  2. (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
  3. ByVal x As Long, ByVal y As Long, _
  4. ByVal cx As Long, ByVal cy As Long, _
  5. ByVal wFlags As Long) As Long
  6. Public Const HWND_TOPMOST = -1

Y un formulario con el siguiente código:

Visual Basic:
  1. Private Sub CalculaNIF(strA As String)
  2. Const cCADENA = "TRWAGMYFPDXBNJZSQVHLCKE"
  3. Const cNUMEROS = "0123456789"
  4. Dim strT As String, strB As String
  5. Dim a#, Nif#, b#, c#
  6. Dim i As Integer
  7.  
  8. strT = Trim$(strA)
  9. If Len(strT) = 0 Then Exit Sub
  10.  
  11. strB = ""
  12.  '---Dejar sólo los números... &
  13. For i = 1 To Len(strA)
  14. If InStr(cNUMEROS, Mid$(strA, i, 1)) Then
  15. strB = strB + Mid$(strA, i, 1)
  16. End If
  17. Next
  18. strA = strB
  19. a# = 0
  20. Nif# = Val(strA)
  21. Do
  22. b# = Int(Nif# / 24)
  23. c# = Nif# - (24 * b#)
  24. a# = a# + c#
  25. Nif# = b#
  26. Loop While b# <> 0
  27. b# = Int(a# / 23)
  28. c# = a# - (23 * b#)
  29. strA = Trim$(strT) + Mid$(cCADENA, c# + 1, 1)
  30. Text2.Text = Mid$(cCADENA, c# + 1, 1)
  31. End Sub
  32.  
  33. Private Sub Command1_Click()
  34. Call CalculaNIF(Text1.Text)
  35. End Sub
  36.  
  37. Private Sub Form_Activate()
  38. Text1.SetFocus
  39. End Sub
  40.  
  41. Private Sub Form_Load()
  42. Me.ScaleMode = vbPixels
  43. SetWindowPos Me.hwnd, HWND_TOPMOST, Me.ScaleLeft, _
  44. Me.ScaleTop, Me.ScaleWidth, Me.ScaleHeight, 0
  45. Move (Screen.Width - Width), (Screen.Height - Height) - 500
  46.  
  47. End Sub
  48.  
  49. Private Sub Text1_GotFocus()
  50. Text1.SelStart = 0
  51. Text1.SelLength = Len(Text1.Text)
  52. End Sub
  53.  
  54. Private Sub Text1_KeyPress(KeyAscii As Integer)
  55. 'MsgBox KeyAscii
  56. Select Case KeyAscii
  57. Case 13
  58. Command1_Click
  59. Text1_GotFocus
  60. Exit Sub
  61. Case 8
  62. Case 46
  63. Case Else
  64. If Not IsNumeric(Chr(KeyAscii)) Then
  65. KeyAscii = 0
  66. End If
  67. End Select
  68. End Sub

También podéis descargar desde aquí los ficheros fuente.

Macro para calendario en Excel.

Scripts, Visual Basic 39 Comentarios »

¿Alguien ha pensado que crear un calendario en excel tenia que ser mas fácil?. Yo también. Aquí tenéis una macro de excel para crearos un calendario del mes que queráis y del año que queráis.

Para utilizar esta macro debéis ir a Herramientas / Macro /Editor de Visual Basic.

Menú Insertar / Modulo y pegar el texto siguiente.

Luego ya solo ejecutar la macro y te lo hace todo solo para el mes que le pongas, por ejemplo, si quieres para este mes has de poner en el InputBox "03/2008" (sin comillas).

Visual Basic:
  1. Sub Crea_Calendario()
  2.  
  3. ' Desprotege la hoja si tienes un calendario previo para prevenir el error.
  4. ActiveSheet.Protect DrawingObjects:=False, Contents:=False, _
  5. Scenarios:=False
  6. 'Previene el parpadeo de la ventana mientras se crea el calendario.
  7. Application.ScreenUpdating = False
  8. ' Control de errores.
  9. On Error GoTo MyErrorTrap
  10. ' Limpia el area a1:g14 incluyendo cualquier calendario previo.
  11. Range("a1:g14").Clear
  12. ' Usa un InputBox para pedir el mes y año deseado y ponerlo en la variable MyInput.
  13. MyInput = InputBox("Escribe el mes y el año para el calendario en formato 01/2008 ")
  14. ' Permite al usuario terminar la macro Cancelando el InputBox.
  15. If MyInput = "" Then Exit Sub
  16. ' Coge el valor del día del comienzo del mes.
  17. StartDay = DateValue(MyInput)
  18. If Day(StartDay) <> 1 Then
  19. StartDay = DateValue(Month(StartDay) & "/1/" & _
  20. Year(StartDay))
  21. End If
  22.  Range("a1").NumberFormat = "mmmm yyyy"
  23. ' Formatea el mes y el año.
  24. With Range("a1:g1")
  25. .HorizontalAlignment = xlCenterAcrossSelection
  26. .VerticalAlignment = xlCenter
  27. .Font.Size = 18
  28. .Font.Bold = True
  29. .RowHeight = 35
  30. End With
  31. ' Formatea los días de la semana.
  32. With Range("a2:g2")
  33. .ColumnWidth = 18
  34. .VerticalAlignment = xlCenter
  35. .HorizontalAlignment = xlCenter
  36. .VerticalAlignment = xlCenter
  37. .Orientation = xlHorizontal
  38. .Font.Size = 12
  39. .Font.Bold = True
  40. .RowHeight = 20
  41. End With
  42. ' Pone los días de la semana en a2:g2.
  43. Range("a2") = "Lunes"
  44. Range("b2") = "Martes"
  45. Range("c2") = "Miercoles"
  46. Range("d2") = "Jueves"
  47. Range("e2") = "Viernes"
  48. Range("f2") = "Sabado"
  49. Range("g2") = "Domingo"
  50. ' Formatea las celdas a3:g7 para los días.
  51. With Range("a3:g8")
  52. .HorizontalAlignment = xlRight
  53. .VerticalAlignment = xlTop
  54. .Font.Size = 18
  55. .Font.Bold = True
  56. .RowHeight = 21
  57. End With
  58. ' Pone el mes y año indicado en la variable MyInput en "a1".
  59. Range("a1").Value = Application.Text(MyInput, "mmmm yyyy")
  60. ' Pone la variable y coge el dia de la semana en el que el mes empieza.
  61. DayofWeek = Weekday(StartDay)
  62. ' Separa las variables de mes y año en dos variables
  63. CurYear = Year(StartDay)
  64. CurMonth = Month(StartDay)
  65. ' Calcula el primer día del mes siguiente.
  66. FinalDay = DateSerial(CurYear, CurMonth + 1, 1)
  67. ' Pone un "1" en la celda del primer día del mes escogido
  68. Select Case DayofWeek
  69. Case 1
  70. Range("g3").Value = 1 ' g3 porque empieza por domingo
  71. Case 2
  72. Range("a3").Value = 1
  73. Case 3
  74. Range("b3").Value = 1
  75. Case 4
  76. Range("c3").Value = 1
  77. Case 5
  78. Range("d3").Value = 1
  79. Case 6
  80. Range("e3").Value = 1
  81. Case 7
  82. Range("f3").Value = 1
  83. End Select
  84. ' Loop para el rango a3:g8 incrementando en 1 a partir del primer "1".
  85. For Each cell In Range("a3:g8")
  86. RowCell = cell.Row
  87. ColCell = cell.Column
  88. ' Si "1" está en la primera columna.
  89. If cell.Column = 1 And cell.Row = 3 Then
  90. ' Si NO está en la primera columna.
  91. ElseIf cell.Column <> 1 Then
  92. If cell.Offset(0, -1).Value>= 1 Then
  93. cell.Value = cell.Offset(0, -1).Value + 1
  94. ' Se detiene cuando el el último dia del mes se ha colocado.
  95. If cell.Value> (FinalDay - StartDay) Then
  96. cell.Value = ""
  97. Exit For
  98. End If
  99. End If
  100. ' Solo si la actual celda no está en fila 3 y está en la columna 1.
  101. ElseIf cell.Row> 3 And cell.Column = 1 Then
  102. cell.Value = cell.Offset(-1, 6).Value + 1
  103. ' Se detiene cuando el el último dia del mes se ha colocado.
  104. If cell.Value> (FinalDay - StartDay) Then
  105. cell.Value = ""
  106. Exit For
  107. End If
  108. End If
  109. Next
  110.  
  111. ' Crea las celdas de entrada de datos y las formatea.
  112. For x = 0 To 5
  113. Range("A4").Offset(x * 2, 0).EntireRow.Insert
  114. With Range("A4:G4").Offset(x * 2, 0)
  115. .RowHeight = 65
  116. .HorizontalAlignment = xlCenter
  117. .VerticalAlignment = xlTop
  118. .WrapText = True
  119. .Font.Size = 10
  120. .Font.Bold = False
  121. ' Desbloquea estas celdas para insertar texto después porque
  122. ' la hoja estará protegida.
  123. .Locked = False
  124. End With
  125. ' Crea el borde alrededor de los días.
  126. With Range("A3").Offset(x * 2, 0).Resize(2, _
  127. 7).Borders(xlLeft)
  128. .Weight = xlThick
  129. .ColorIndex = xlAutomatic
  130. End With
  131.  
  132. With Range("A3").Offset(x * 2, 0).Resize(2, _
  133. 7).Borders(xlRight)
  134. .Weight = xlThick
  135. .ColorIndex = xlAutomatic
  136. End With
  137. Range("A3").Offset(x * 2, 0).Resize(2, 7).BorderAround _
  138. Weight:=xlThick, ColorIndex:=xlAutomatic
  139. Next
  140. If Range("A13").Value = "" Then Range("A13").Offset(0, 0) _
  141. .Resize(2, 8).EntireRow.Delete
  142. ' Elimina las lineas del grid.
  143. ActiveWindow.DisplayGridlines = False
  144. ' Protege la hoja para prevenir la sobre escritura de los días.
  145. ActiveSheet.Protect DrawingObjects:=True, Contents:=True, _
  146. Scenarios:=True
  147. ' Redimensiona la ventana para ver todo el calendario.
  148. ActiveWindow.WindowState = xlMaximized
  149. ActiveWindow.ScrollRow = 1
  150.  
  151. ' Permitimos a la ventana reescribirse para ver el calendario.
  152. Application.ScreenUpdating = True
  153. ' Si no ha ocurrido ningún error aquí acaba la Macro
  154. Exit Sub
  155. ' Si ha dado error al introducir los datos te muestra un mensaje y te
  156. ' muestra de nuevo el InputBox para que vuelvas a introducir la fecha.
  157. MyErrorTrap:
  158. MsgBox "No has introducido el mes y el año correctamente." _
  159. & Chr(13) & "Escribe el mes correctamente" _
  160. & Chr(13) & "y 4 digitos para el año"
  161. MyInput = InputBox("Escribe el mes y el año correctamente para el calendario")
  162. If MyInput = "" Then Exit Sub
  163. Resume
  164. End Sub

Si hemos creado una macro en excel y la quitamos al volver a abrir el documento sigue apareciendo una molesta ventana que dice que el documento tiene macros cuando no existe ninguna macro:

Menu Herramientas, Macro, Editor Visual Basic, menú ver explorador de proyectos, botón derecho sobre cada modulo y quitar.

Si nos preguntar guardar y no lo queremos le decimos que no.

La próxima vez que abramos el documento ya no nos preguntará si queremos habilitar los macros.

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