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
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.
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
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>
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.
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
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.
Saludos.
Es en la eliminción de las secciones y en la pagina donde debe de iniciar la numeración.
Atte.
joshua
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.
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