macro numerar paginas

9 envíos / 0 nuevos
Último envío
joshua
Imagen de joshua
Offline
última acción: Hace 9 años 6 meses
alta: 10/06/2012 - 21:49
Puntos: 125
macro numerar paginas

Saludos.

Utilizo Word 2007, estoy tratando de grabar una macro para numerar paginas desde la pagina que yo indique al momento de grabar la macro todo funciona bien, pero al momento de tratar de utilizarla en otro documento esta genera el error 5941, el cual indica que el elemento del conjunto solicitado no existe, de antemano agradesco la ayuda que puedan brindarme.

 

Atte.

joshua

Etiquetas: 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 21 horas 59 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
¿puedes copiar el código?

Si pudieras poner el código que da el error podríamos ver donde está el fallo.

es probable que estés haciendo referencia a algún documento que no esté cargado (por lo que comentas, debes de estar tratando de acceder a alguna propiedad del documento original donde creaste la macro, en vez de hacerlo del documento activo.

lo dicho, si puedes adjuntar el código...

 

------
Ya sé Excel, pero necesito más.

joshua
Imagen de joshua
Offline
última acción: Hace 9 años 6 meses
alta: 10/06/2012 - 21:49
Puntos: 125
Re: macro numerar paginas

Saludos.

Gracias por responder, adjunto la macro, lo subrayado es lo que me genera el error.

 

Sub Macro12()
    Selection.InsertBreak Type:=wdSectionBreakNextPage
    WordBasic.ViewFooterOnly
    ActiveDocument.AttachedTemplate.BuildingBlockEntries("Cinta").Insert Where _
        :=Selection.Range, RichText:=True
    Selection.HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter. _
        LinkToPrevious
    WordBasic.GoToHeader
    Selection.HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter. _
        LinkToPrevious
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
    Selection.MoveUp Unit:=wdScreen, Count:=7
    WordBasic.RemoveFooter
    WordBasic.RemoveHeader
    Selection.MoveDown Unit:=wdScreen, Count:=7
    With Selection.Sections(1).Headers(1).PageNumbers
        .NumberStyle = wdPageNumberStyleArabic
        .HeadingLevelForChapter = 0
        .IncludeChapterNumber = False
        .ChapterPageSeparator = wdSeparatorHyphen
        .RestartNumberingAtSection = True
        .StartingNumber = 1
    End With
End Sub

 

De antemano gracias por la ayuda.

Atte.

joshua

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 21 horas 59 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: macro numerar paginas

parece que tu BuildingBlock de nombre "Cinta" no está disponible en la plantilla del documento.

cuando insertas a mano el bloque, ¿en qué plantilla está?

entra en el organizador de bloques de creación para ver si está disponible

Insertar>texto>elementos rápidos>

organizar bloques de creación en word

yo tengo muchos bloques por defecto que están en normal.dotm, pero tengo muchos otros que están en Building Blocks.dotx (el bloque "cinta" está ahí)

El problema es que tu macro (he probado con el grabador de macros y lo graba así de mal) trata de leer de la plantilla del documento, pero el bloque no está ahí.

 

Deberías hacer referencia a la plantilla donde esté tu bloque.
Si sabes donde está puedes hacer algo así (no basta con poner el nombre, hay que poner la ruta entera):

 

Dim plantilla As Template

 Set plantilla = Templates("C:\Users\nombreusuario\AppData\Roaming\Microsoft\Document Building Blocks\3082\Building Blocks.dotx")

 'para insertarlo

    plantilla.BuildingBlockEntries("Cinta").Insert Where:=Selection.Range, RichText:=True

 

 

Puedes utilizar la propiedad FullName de una plantilla (colección Templates) para ver su ruta (por si lo vas a utilizar en otros equipos, para averiguar donde está):

Sub donde_estan_las_plantillas()
' recorre todas las plantillas y muestra el nombre completo

    Dim plantilla As Template

    For Each plantilla In Templates

     Debug.Print plantilla.FullName

    Next

End Sub

 

 

------
Ya sé Excel, pero necesito más.

joshua
Imagen de joshua
Offline
última acción: Hace 9 años 6 meses
alta: 10/06/2012 - 21:49
Puntos: 125
Re: macro numerar paginas

 

Saludos.

Disculpa la tardanza en contestar, pero quería probar bien lo que me proponías, pero no logro conseguirlo, investigando por la red e logrado elaborar la siguiente macro, e tratado de depurarla lo mejor posible pero ya que no estoy muy familiarizado con el VBA de Word y auxiliado de la grabadora no creo que este al 100% depurada, funciona en un 80% es decir de repente falla, agradezco de antemano la ayuda que puedas brindarme.

 

Sub Numerar_Paginas()
Application.ScreenUpdating = False
'se especifica la pagina de inicio y numeración
repetir:
pagina = InputBox("Escriba la pagina de inicio")
numero = InputBox("Escriba el numero de inicio")
'verificamos que no esten vacios o se cancelen los input
If pagina = "" Or pagina = Empty _
Or numero = "" Or numero = Empty Then
pregunta = MsgBox("No se ingresaron" & vbCrLf & "los datos solicitados" & vbCrLf & _
"quiere intentarlo de nuevo", vbCritical + vbYesNo, "Aviso")
If pregunta = vbYes Then
GoTo repetir
Else
Exit Sub
End If
End If
'se eliminan las secciones existentes
With Selection
    With .Find
    .Text = "^b"
    .Replacement.Text = " "
    .Execute Replace:=wdReplaceAll
    End With
    'condicionante dependiendo de pagina seleccionada
    If pagina = 1 Then
    pagina = 1
    Else
    pagina = pagina - 1
    End If
    'vamos a la pagina anterior al inicio de la numeración
    .GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:=pagina
    'nos movemos al final de la pagina para crear la segunda sección
    With Selection
    For x = 1 To 26
    .TypeParagraph
    Next
    End With
    'insertamos la segunda sección
    .InsertBreak Type:=wdSectionBreakNextPage
End With
'establecemos la numeración de la segunda sección
With ActiveDocument.Sections(2).Footers(wdHeaderFooterPrimary)
.PageNumbers.Add pagenumberalignment:=wdAlignPageNumberCenter
.PageNumbers.RestartNumberingAtSection = True
.PageNumbers.StartingNumber = numero
.PageNumbers.NumberStyle = wdPageNumberStyleArabic
End With
'nos movemos a la segunda seccion para desvincularla de la
'primera
With Selection
.GoTo What:=wdGoToSection, Which:=wdGoToFirst, Count:=2, Name:=""
.Find.ClearFormatting
.Find.Replacement.ClearFormatting
    With .Find
        .Text = "^b"
        .Replacement.Text = " "
        .Wrap = wdFindContinue
    End With
WordBasic.ViewFooterOnly
    .HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter.LinkToPrevious
WordBasic.GoToHeader
    .HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter.LinkToPrevious
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End With
'nos movemos a la primera sección para eliminar la numeración
With Selection
.GoTo What:=wdGoToSection, Which:=wdGoToFirst, Count:=1, Name:=""
.Find.ClearFormatting
.Find.Replacement.ClearFormatting
    With .Find
        .Text = "^b"
        .Replacement.Text = " "
        .Wrap = wdFindContinue
    End With
    WordBasic.RemoveFooter
'ActiveWindow.ActivePane.View.ShowAll = Not ActiveWindow.ActivePane.View.ShowAll
End With
'contamos las paginas existentes en el documento
paginas = ActiveDocument.ComputeStatistics(wdStatisticPages)
'nos movemos a la ultima pagina y la eliminamos
ActiveWindow.ActivePane.View.ShowAll = Not ActiveWindow.ActivePane.View.ShowAll
 With Selection
    .GoTo What:=wdGoToPage, Which:=wdGoToFirst, Count:=paginas, Name:=""
    .Find.ClearFormatting
    .Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "^b"
        .Replacement.Text = " "
        .Wrap = wdFindContinue
    End With
    Selection.TypeBackspace
    'regresamos a la primera pagina
    Selection.HomeKey Unit:=wdStory
End With
ActiveWindow.ActivePane.View.ShowAll = Not ActiveWindow.ActivePane.View.ShowAll
Application.ScreenUpdating = True
End Sub

Atte.

joshua


pacomegia
Imagen de pacomegia
Offline
última acción: Hace 21 horas 59 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
¿dónde falla?

unas veces falla y otras no, pero...

¿dónde falla? ¿es en algún sitio concreto?¿da un error concreto?

¿o es algo impredecible?

 

------
Ya sé Excel, pero necesito más.

joshua
Imagen de joshua
Offline
última acción: Hace 9 años 6 meses
alta: 10/06/2012 - 21:49
Puntos: 125
Re: macro numerar paginas

Saludos.

Es en la eliminción de las secciones y en la pagina donde debe de iniciar la numeración.

 

Atte.

joshua

 

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 21 horas 59 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: macro numerar paginas

lo he probado, lo he anidado en un bucle para repetirlo 100 veces y no consigo reproducir el error

igual el origen del fallo está en algo que diferencie unos documentos de otros ¿los documentos donde aplicas la macro son similares?¿tienen secciones o no tienen? ¿puede afectar el lugar donde se encuentre el cursor a la hora de ejecutar la macro?

 

------
Ya sé Excel, pero necesito más.

joshua
Imagen de joshua
Offline
última acción: Hace 9 años 6 meses
alta: 10/06/2012 - 21:49
Puntos: 125
Re: macro numerar paginas

Saludos.

Tienes toda la razon no me habia preocupado en donde se encontraba el cursor en su momento, e estado utilizando la macro en estos dias y de aproximadamente 200 documentos de diferentes cantidades de paginas la macro solo a fallado 3 y no siemspre con el mismo documento, creo que es bastante aceptable su funcionamiento, agradeceria si a tu particular criterio creas que se necesite algo más, de antemano gracias.

 

Atte.

joshua