Página 1 de 1

Función aMid

Publicado: 22 Abr 2011, 00:22
por AX

Código: Seleccionar todo

Public Function aMid(A As String, B As Long, C As Long, Optional D As Boolean, Optional E As Boolean) As String
On Error Resume Next

'================================================================'
' AX: Función aMid                                               '
' Call aMid("String", Comienzo, Longitud, UCase, Msgbox)   '
' Agradecimiento: linkgl                                         '
'================================================================'

Dim M As String
Dim N As String

If Not Len(A) > 0 Then Exit Function
If Not B > 0 Then Exit Function
If Not C > 0 Then Exit Function
If B > Len(A) Then Exit Function
If C > Len(Right(A, Len(A) - B + 1)) Then Exit Function

M = Right(A, Len(A) - B + 1)
N = Left(M, C)

Select Case D
Case True
N = UCase(N)
Case False
N = N
End Select

Select Case E: Case True: MsgBox N, vbInformation: End Select

aMid = N
End Function
Modo de uso:

Código: Seleccionar todo

Call aMid(String, Comienzo, Longitud, UCase/LCase, Msgbox)
String, Comienzo, y Longitud es lo mismo que en la función Mid original.

He agregado dos nuevos parámetros a la función y ambos son opcionales. Uno es UCase para mostrar el resultado en mayúscula. El otro es para mostrar un mensaje, el mensaje muestra el resultado. Los dos son Boolean por lo que se denotan como True/False. Aquí les dejo un ejemplo:

Código: Seleccionar todo

Call aMid("campo", 2, 3, True, True)
Automáticamente muestra el MsgBox y devuelve "AMP", al igual que la función la función Mid original, sólo que en mayúscula porque está activado este parámetro en mi función. También puede ser:

Código: Seleccionar todo

Call aMid("campo", 2, 3, CBool(1), CBool(1))
Y el mismo resultado.

Saludos

Re: Función aMid

Publicado: 25 Abr 2011, 20:41
por Xpro
Podrías publicar otra función igual, sin usar las variables(a,b,c,d,) y explicandolo un poco porfa,
esque estoy intentando entenderla y tal, pero no consigo entender...

gracias.

Re: Función aMid

Publicado: 25 Abr 2011, 21:20
por Slek
Le he hecho unos arreglitos mínimos para que sea más fácil entenderlo, y me he permitido el lujo de comentarlo, espero que no te importe >.<

Código: Seleccionar todo

Public Function aMid(sStr As String, sStart As Long, sLn As Long, Optional May As Boolean, Optional Ms As Boolean) As String
On Error Resume Next

'================================================================'
' AX: Función aMid                                               '
' Call aMid("String", Comienzo, Longitud, UCase, Msgbox)   '
' Agradecimiento: linkgl                                         '
'================================================================'

Dim M As String 'Variable auxiliar
Dim N As String 'Variable auxiliar

If Len(sStr) < 1 Then Exit Function 'Si la Sting es nula, sale de la función
If sStart < 1 Then Exit Function 'Si la posición de comienzo es menor que la primera posición, sale de la función
If  sLn < 1 Then Exit Function 'Si la longitud es nula, sale de la función
If sStart > Len(sStr) Then Exit Function 'Si la longitud de la string es menor que la posición de comienzo, sale de la función
If sLn > Len(Right(sStr, Len(sStr) - sStart + 1)) Then Exit Function 'Si la parte de la derecha es menor que la longitud que se desea, sale de la función.

M = Right(sStr, Len(sStr) - sStart + 1) 'Coge la parte de la derecha, dejando fuera la parte que está detrás de la posición de comienzo.
N = Left(M, sLn) 'De lo que ha quedado, se queda con la parte de la izquierda, quitando la parte de la derecha que sobra.

Select Case May
Case True 'Si se quiere en mayúsculas
N = UCase(N) 'se pone en may.
Case False 'Si no...
N = N '...se deja igual
End Select

Select Case Ms: Case True: MsgBox N, vbInformation: End Select 'Si se quiere que muestre un mensaje, se muestra.

aMid = N 'Se devuelve el resultado.
End Function
Saludos!!

Re: Función aMid

Publicado: 25 Abr 2011, 21:33
por AX
No hay problema Slek, más bien es casi un honor para mí que hagas eso. Gracias por su tiempo...

Por estos días iba a crear un programa con la función Vigenére, pero quise esperar un poco, hasta que haga las funciones para Beaufort y su variante, una versión de Vigenére con 27 carácteres, y la variante del cifrado de Vigenére (autoclave).

Cuéntame cual fue el error cuando probaste la función Vigenére, para ver que puedo hacer. (Siempre hay que separar el resultado del descifrado en espacios.)

Re: Función aMid

Publicado: 25 Abr 2011, 21:37
por Spectrus
Gracias Slek y AX ahora la entendi, un saludo.

Re: Función aMid

Publicado: 25 Abr 2011, 22:17
por Slek
AX no me refería a que tu función Vigenére tuviera un erro, si no que yo la cagué al intentar hacerla hace unos meses, no lo conseguí >.<

SpectruS
De nada, para eso estamos

Saludos!

Re: Función aMid

Publicado: 25 Abr 2011, 22:40
por Xpro
Gracias por la función comentada Slek!!