Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Macros en Excel (https://www.clubdelphi.com/foros/showthread.php?t=30229)

valera 12-02-2006 04:11:49

Macros en Excel
 
Holas muchachos del foro, estaba sin hacer y se me ocurrio buscar en internet si habia algo sobre conversion de letras en excel y si encontré codigo pero el problema es el siguiente: por ejemplo si en la celda A1 tengo texto en minuscula y en A2 tengo texto en mayuscula, lo que quiero es que con un solo macro me convierta lo que está en minuscula a mayuscula y viceversa, El codigo que encontré lo hace por separado un macro para mayuscula y otro macro para minuscula y lo que quiero es unirlo para que con un solo macro haga las dos conversiones a la vez. les envio el codigo ya unido para que quien me pueda ayudar.

Por su ayuda muchas gracias.
Código:

Sub Convertir()
'Convierte de minuscula a mayuscula
' Creado el 27/11/2003 por David García
Dim NFil(128), NCol(128), CFil(128), Ccol(128), Nra, Nia, Nja, ra, ia, ja As Integer
Dim letras As String
AreaCount = Selection.Areas.Count
If AreaCount < 128 Then
    ia = 1
    For Each A In Selection.Areas
        NFil(ia) = A.Row
        NCol(ia) = A.Column
        CFil(ia) = A.Rows.Count
        Ccol(ia) = A.Columns.Count
        ia = ia + 1
    Next A
    Nra = ia - 1
    ra = 1
    ia = 1
    ja = 1
    Do While ra <= Nra
        Nia = CFil(ra)
        ia = NFil(ra)
        Nja = Ccol(ra)
        ja = NCol(ra)
        Do While ia < NFil(ra) + CFil(ra)
            Do While ja < NCol(ra) + Ccol(ra)
                letras = UCase(Cells(ia, ja).Value)
                Cells(ia, ja) = letras
                ja = ja + 1
            Loop
            ja = NCol(ra)
            ia = ia + 1
        Loop
        ra = ra + 1
    Loop
Else
    MsgBox "No aplica a más de 128 áreas, y usted seleccionó " & AreaCount & ".", vbDefaultButton1, "David le recuerda:"
End If
'Convierte de Mayuscula a minuscula
'Creado el 27/11/2003 por David García
Dim NFi(128), NCo(128), CFi(128), Cco(128), Nr, Ni, Nj, r, i, j As Integer
Dim Texto As String
AreaCount = Selection.Areas.Count
If AreaCount < 128 Then
    i = 1
    For Each B In Selection.Areas
        NFi(i) = B.Row
        NCo(i) = B.Column
        CFi(i) = B.Rows.Count
        Cco(i) = B.Columns.Count
        i = i + 1
    Next B
    Nr = i - 1
    r = 1
    i = 1
    j = 1
    Do While r <= Nr
        Ni = CFi(r)
        i = NFi(r)
        Nj = Cco(r)
        j = NCo(r)
        Do While i < NFi(r) + CFi(r)
            Do While j < NCo(r) + Cco(r)
                Texto = LCase(Cells(i, j).Value)
                Cells(i, j) = Texto
                j = j + 1
            Loop
            j = NCo(r)
            i = i + 1
        Loop
        r = r + 1
    Loop
Else
    MsgBox "No aplica a más de 128 áreas, y usted seleccionó " & AreaCount & ".", vbDefaultButton1, "David le recuerda:"
End If
End Sub


marcoszorrilla 12-02-2006 12:03:13

A ver si esto lo que quieres:
Código:

Sub MayuscMinusc()
'
' MayuscMinusc Macro
' Macro grabada el 12/02/2006 por Marcos

Dim NFil(128), NCol(128), CFil(128), Ccol(128), Nra, Nia, Nja, ra, ia, ja As Integer
Dim letras As String
AreaCount = Selection.Areas.Count
If AreaCount < 128 Then
    ia = 1
    For Each A In Selection.Areas
        NFil(ia) = A.Row
        NCol(ia) = A.Column
        CFil(ia) = A.Rows.Count
        Ccol(ia) = A.Columns.Count
        ia = ia + 1
    Next A
    Nra = ia - 1
    ra = 1
    ia = 1
    ja = 1
    Do While ra <= Nra
        Nia = CFil(ra)
        ia = NFil(ra)
        Nja = Ccol(ra)
        ja = NCol(ra)
        Do While ia < NFil(ra) + CFil(ra)
            Do While ja < NCol(ra) + Ccol(ra)
           
                If Asc(Cells(ia, ja).Value) > 96 Then
                letras = UCase(Cells(ia, ja).Value)
                Cells(ia, ja) = letras
                ja = ja + 1
                Else
                letras = LCase(Cells(ia, ja).Value)
                Cells(ia, ja) = letras
                ja = ja + 1
               
                End If
               
               
            Loop
            ja = NCol(ra)
            ia = ia + 1
        Loop
        ra = ra + 1
    Loop
   
Else
    MsgBox "No aplica a más de 128 áreas, y usted seleccionó " & AreaCount & ".", vbDefaultButton1, "David le recuerda:"
End If

End Sub

Un Saludo.

valera 12-02-2006 19:28:16

Hola Marcos
 
El codigo que me enviaste marca este error cuando ejecuto el macro: Se ha producido el error '5' en tiempo de ejecucion Argumento o llamada a procedimiento no valida y es en esta linea de codigo es donde lo marca:
Código:

If Asc(Cells(ia, ja).Value) > 96 Then
Por tu ayuda muchas gracias y saludo que estes bien

valera 12-02-2006 19:50:04

Disculpa Marcos
 
Ya encontré porqué me mandaba el error: lo que pasa es que escribia el texto en diferente celdas y lo seleccionaba con otras celdas vacias.
Otro favor como comparo las celdas vacias para que cuando ejecute el macro si encuentra celdas vacias que no lo tome en cuenta sino que haga la conversion a todas aquellas celdas que contengan texto.


La franja horaria es GMT +2. Ahora son las 09:25:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi