Modificar una macro

12/01/2010 - 07:22 por zopita | Informe spam
Buenos días.
Tengo una macro de Word para contar el número de veces que aparece cada
carácter en un documento. Es así:

Sub ContarApariciones()
Dim iCount(0 To 255) As Integer
Dim i As Integer
Dim vCharacter As Variant
Dim sTemp As String

' Initialize the array
For i = 0 To 255
iCount(i) = 0
Next i

' Fill the array
For Each oCharacter In ActiveDocument.Characters
i = Asc(oCharacter)
iCount(i) = iCount(i) + 1
Next

' Add document for results
Documents.Add
Selection.TypeText Text:="ASCII Character Count" & vbCrLf

' Only output codes 9 through 255
For i = 9 To 255
sTemp = Chr(i)
If i < 32 Then sTemp = Trim(Str(i))
sTemp = sTemp & Chr(9) & Trim(Str(iCount(i)))
sTemp = sTemp & vbCrLf
Selection.TypeText Text:=sTemp
Next i
End Sub

Funciona bien pero me genera bastante morralla, concretamente los caracteres
con código ASCII menor que 65 o mayor de 165. Es decir, quisiera acotar el
recuento a los caracteres con código ASCII comprendido entre 65 y 165.

Sé que es una tontería, pero ando muy espesa y no consigo dar con ello.
Agradecería cualquier tipo de ayuda.

Saludos cordiales.

Preguntas similare

Leer las respuestas

#1 pepe
12/01/2010 - 15:49 | Informe spam
Puedes limitarte a imprimir sólo los caracteres que te interesan
sustituyendo la línea:

For i = 9 To 255

por

For i = 65 To 165



"zopita" escribió en el mensaje de
noticias news:
Buenos días.
Tengo una macro de Word para contar el número de veces que aparece cada
carácter en un documento. Es así:

Sub ContarApariciones()
Dim iCount(0 To 255) As Integer
Dim i As Integer
Dim vCharacter As Variant
Dim sTemp As String

' Initialize the array
For i = 0 To 255
iCount(i) = 0
Next i

' Fill the array
For Each oCharacter In ActiveDocument.Characters
i = Asc(oCharacter)
iCount(i) = iCount(i) + 1
Next

' Add document for results
Documents.Add
Selection.TypeText Text:="ASCII Character Count" & vbCrLf

' Only output codes 9 through 255
For i = 9 To 255
sTemp = Chr(i)
If i < 32 Then sTemp = Trim(Str(i))
sTemp = sTemp & Chr(9) & Trim(Str(iCount(i)))
sTemp = sTemp & vbCrLf
Selection.TypeText Text:=sTemp
Next i
End Sub

Funciona bien pero me genera bastante morralla, concretamente los
caracteres
con código ASCII menor que 65 o mayor de 165. Es decir, quisiera acotar el
recuento a los caracteres con código ASCII comprendido entre 65 y 165.

Sé que es una tontería, pero ando muy espesa y no consigo dar con ello.
Agradecería cualquier tipo de ayuda.

Saludos cordiales.
Respuesta Responder a este mensaje
#2 zopita
13/01/2010 - 12:56 | Informe spam
Hola, Pepe. Eso es lo primero que hice pero no ha habido forma: la macro da
un error.
Seguiré tanteando y si encuentro algo te lo cuento.

Saludos cordiales.

"pepe" escribió:

Puedes limitarte a imprimir sólo los caracteres que te interesan
sustituyendo la línea:

For i = 9 To 255

por

For i = 65 To 165



"zopita" escribió en el mensaje de
noticias news:
> Buenos días.
> Tengo una macro de Word para contar el número de veces que aparece cada
> carácter en un documento. Es así:
>
> Sub ContarApariciones()
> Dim iCount(0 To 255) As Integer
> Dim i As Integer
> Dim vCharacter As Variant
> Dim sTemp As String
>
> ' Initialize the array
> For i = 0 To 255
> iCount(i) = 0
> Next i
>
> ' Fill the array
> For Each oCharacter In ActiveDocument.Characters
> i = Asc(oCharacter)
> iCount(i) = iCount(i) + 1
> Next
>
> ' Add document for results
> Documents.Add
> Selection.TypeText Text:="ASCII Character Count" & vbCrLf
>
> ' Only output codes 9 through 255
> For i = 9 To 255
> sTemp = Chr(i)
> If i < 32 Then sTemp = Trim(Str(i))
> sTemp = sTemp & Chr(9) & Trim(Str(iCount(i)))
> sTemp = sTemp & vbCrLf
> Selection.TypeText Text:=sTemp
> Next i
> End Sub
>
> Funciona bien pero me genera bastante morralla, concretamente los
> caracteres
> con código ASCII menor que 65 o mayor de 165. Es decir, quisiera acotar el
> recuento a los caracteres con código ASCII comprendido entre 65 y 165.
>
> Sé que es una tontería, pero ando muy espesa y no consigo dar con ello.
> Agradecería cualquier tipo de ayuda.
>
> Saludos cordiales.

.

Respuesta Responder a este mensaje
#3 pepe
13/01/2010 - 15:31 | Informe spam
¿y falla en la línea modificada? Creo que no hay motivo a que falle en esa
línea.



"zopita" escribió en el mensaje de
noticias news:
Hola, Pepe. Eso es lo primero que hice pero no ha habido forma: la macro
da
un error.
Seguiré tanteando y si encuentro algo te lo cuento.

Saludos cordiales.

"pepe" escribió:

Puedes limitarte a imprimir sólo los caracteres que te interesan
sustituyendo la línea:

For i = 9 To 255

por

For i = 65 To 165



"zopita" escribió en el mensaje de
noticias news:
> Buenos días.
> Tengo una macro de Word para contar el número de veces que aparece cada
> carácter en un documento. Es así:
>
> Sub ContarApariciones()
> Dim iCount(0 To 255) As Integer
> Dim i As Integer
> Dim vCharacter As Variant
> Dim sTemp As String
>
> ' Initialize the array
> For i = 0 To 255
> iCount(i) = 0
> Next i
>
> ' Fill the array
> For Each oCharacter In ActiveDocument.Characters
> i = Asc(oCharacter)
> iCount(i) = iCount(i) + 1
> Next
>
> ' Add document for results
> Documents.Add
> Selection.TypeText Text:="ASCII Character Count" & vbCrLf
>
> ' Only output codes 9 through 255
> For i = 9 To 255
> sTemp = Chr(i)
> If i < 32 Then sTemp = Trim(Str(i))
> sTemp = sTemp & Chr(9) & Trim(Str(iCount(i)))
> sTemp = sTemp & vbCrLf
> Selection.TypeText Text:=sTemp
> Next i
> End Sub
>
> Funciona bien pero me genera bastante morralla, concretamente los
> caracteres
> con código ASCII menor que 65 o mayor de 165. Es decir, quisiera acotar
> el
> recuento a los caracteres con código ASCII comprendido entre 65 y 165.
>
> Sé que es una tontería, pero ando muy espesa y no consigo dar con ello.
> Agradecería cualquier tipo de ayuda.
>
> Saludos cordiales.

.

Respuesta Responder a este mensaje
#4 zopita
14/01/2010 - 06:15 | Informe spam
Hola Pepe, buenos días.

El fallo aparece en la línea
iCount(j) = iCount(j) + 1

He seguido dando vueltas y alguna cosita ha salido. Tan pronto como dé con
algo coherente te pincho un mensaje.

Saludos cordiales.




"pepe" escribió:

¿y falla en la línea modificada? Creo que no hay motivo a que falle en esa
línea.



"zopita" escribió en el mensaje de
noticias news:
> Hola, Pepe. Eso es lo primero que hice pero no ha habido forma: la macro
> da
> un error.
> Seguiré tanteando y si encuentro algo te lo cuento.
>
> Saludos cordiales.
>
> "pepe" escribió:
>
>> Puedes limitarte a imprimir sólo los caracteres que te interesan
>> sustituyendo la línea:
>>
>> For i = 9 To 255
>>
>> por
>>
>> For i = 65 To 165
>>
>>
>>
>> "zopita" escribió en el mensaje de
>> noticias news:
>> > Buenos días.
>> > Tengo una macro de Word para contar el número de veces que aparece cada
>> > carácter en un documento. Es así:
>> >
>> > Sub ContarApariciones()
>> > Dim iCount(0 To 255) As Integer
>> > Dim i As Integer
>> > Dim vCharacter As Variant
>> > Dim sTemp As String
>> >
>> > ' Initialize the array
>> > For i = 0 To 255
>> > iCount(i) = 0
>> > Next i
>> >
>> > ' Fill the array
>> > For Each oCharacter In ActiveDocument.Characters
>> > i = Asc(oCharacter)
>> > iCount(i) = iCount(i) + 1
>> > Next
>> >
>> > ' Add document for results
>> > Documents.Add
>> > Selection.TypeText Text:="ASCII Character Count" & vbCrLf
>> >
>> > ' Only output codes 9 through 255
>> > For i = 9 To 255
>> > sTemp = Chr(i)
>> > If i < 32 Then sTemp = Trim(Str(i))
>> > sTemp = sTemp & Chr(9) & Trim(Str(iCount(i)))
>> > sTemp = sTemp & vbCrLf
>> > Selection.TypeText Text:=sTemp
>> > Next i
>> > End Sub
>> >
>> > Funciona bien pero me genera bastante morralla, concretamente los
>> > caracteres
>> > con código ASCII menor que 65 o mayor de 165. Es decir, quisiera acotar
>> > el
>> > recuento a los caracteres con código ASCII comprendido entre 65 y 165.
>> >
>> > Sé que es una tontería, pero ando muy espesa y no consigo dar con ello.
>> > Agradecería cualquier tipo de ayuda.
>> >
>> > Saludos cordiales.
>>
>> .
>>

.

Respuesta Responder a este mensaje
#5 pepe
14/01/2010 - 16:22 | Informe spam
has definido icount como entero y seguramente se desborda el contador.
Defínelo como long.



"zopita" escribió en el mensaje de
noticias news:
Hola Pepe, buenos días.

El fallo aparece en la línea
iCount(j) = iCount(j) + 1

He seguido dando vueltas y alguna cosita ha salido. Tan pronto como dé con
algo coherente te pincho un mensaje.

Saludos cordiales.




"pepe" escribió:

¿y falla en la línea modificada? Creo que no hay motivo a que falle en
esa
línea.



"zopita" escribió en el mensaje de
noticias news:
> Hola, Pepe. Eso es lo primero que hice pero no ha habido forma: la
> macro
> da
> un error.
> Seguiré tanteando y si encuentro algo te lo cuento.
>
> Saludos cordiales.
>
> "pepe" escribió:
>
>> Puedes limitarte a imprimir sólo los caracteres que te interesan
>> sustituyendo la línea:
>>
>> For i = 9 To 255
>>
>> por
>>
>> For i = 65 To 165
>>
>>
>>
>> "zopita" escribió en el mensaje de
>> noticias news:
>> > Buenos días.
>> > Tengo una macro de Word para contar el número de veces que aparece
>> > cada
>> > carácter en un documento. Es así:
>> >
>> > Sub ContarApariciones()
>> > Dim iCount(0 To 255) As Integer
>> > Dim i As Integer
>> > Dim vCharacter As Variant
>> > Dim sTemp As String
>> >
>> > ' Initialize the array
>> > For i = 0 To 255
>> > iCount(i) = 0
>> > Next i
>> >
>> > ' Fill the array
>> > For Each oCharacter In ActiveDocument.Characters
>> > i = Asc(oCharacter)
>> > iCount(i) = iCount(i) + 1
>> > Next
>> >
>> > ' Add document for results
>> > Documents.Add
>> > Selection.TypeText Text:="ASCII Character Count" & vbCrLf
>> >
>> > ' Only output codes 9 through 255
>> > For i = 9 To 255
>> > sTemp = Chr(i)
>> > If i < 32 Then sTemp = Trim(Str(i))
>> > sTemp = sTemp & Chr(9) & Trim(Str(iCount(i)))
>> > sTemp = sTemp & vbCrLf
>> > Selection.TypeText Text:=sTemp
>> > Next i
>> > End Sub
>> >
>> > Funciona bien pero me genera bastante morralla, concretamente los
>> > caracteres
>> > con código ASCII menor que 65 o mayor de 165. Es decir, quisiera
>> > acotar
>> > el
>> > recuento a los caracteres con código ASCII comprendido entre 65 y
>> > 165.
>> >
>> > Sé que es una tontería, pero ando muy espesa y no consigo dar con
>> > ello.
>> > Agradecería cualquier tipo de ayuda.
>> >
>> > Saludos cordiales.
>>
>> .
>>

.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida