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
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.
Imagen

http://img844.imageshack.us/img844/8088/mujerrara.jpg
http://img715.imageshack.us/img715/5813/tigree.png
http://img830.imageshack.us/img830/6484/camaleon.png

http://img839.imageshack.us/img839/4944/tigrev2.jpg
http://img843.imageshack.us/img843/443/spidermanxn.png

http://www.youtube.com/watch?v=wHYYkciIKE0
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!!
github.com/Slek-Z
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.)
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!
github.com/Slek-Z
Gracias por la función comentada Slek!!
Imagen

http://img844.imageshack.us/img844/8088/mujerrara.jpg
http://img715.imageshack.us/img715/5813/tigree.png
http://img830.imageshack.us/img830/6484/camaleon.png

http://img839.imageshack.us/img839/4944/tigrev2.jpg
http://img843.imageshack.us/img843/443/spidermanxn.png

http://www.youtube.com/watch?v=wHYYkciIKE0
Responder

Volver a “Otros lenguajes”