Editado: Antes de enviar, encontré la solución, pero lo publico porque puede ser de interés para alguien.
De alguna manera, esto es una continuación del tema expuesto en https://forum.openoffice.org/es/forum/v ... 50&t=10609 y que pude cerrar gracias a la sugerencia de FJCC-ES.
Al ejecutar una variante del código sugerido para resolver mi necesidad de acceder a objetos de texto incrustados en hoja de cálculo, me he encontrado con un error de "Variable de objeto no establecida", pero con un comportamiento muy aleatorio.
Me ha vuelto tan loco que no sabía si cortarme las venas o dejármelas crecer.
Finalmente, me ha parecido encontrar la causa. Hasta 20 objetos incrustados funciona bien, pero cuando hay más de 20, peta. Para descartar que fuese por el número de hojas, también he ensayado poniendo los objetos en una sola hoja y se ha confirmado el error cuando hay 21.
El código utilizado es el siguiente
Código: Seleccionar todo
Sub EjemploForo
Dim oSheets As Object
Dim oSheet As Object
Dim oDP As object
Dim oObj As Object
Dim oEmbObj As Object
Dim Comp As Object
Dim StyleFam As Object
Dim oPageStyles As Object
Dim oStd As Object
Dim i As Integer
Dim j As Integer
Dim contador As Integer
contador = 0
oSheets = ThisComponent.Sheets
For i = 0 To oSheets.getCount() - 1
oSheet = oSheets(i)
oDP = oSheet.getDrawPage()
for j = 0 to oDP.Count - 1
oObj = oDP.getByIndex(j)
' Selecciona objeto. QUITAR TRAS LA DEPURACIÓN
ThisComponent.getCurrentController.select( oObj ) 'quitar tras depuración
If oObj.supportsService("com.sun.star.drawing.OLE2Shape") Then
oEmbObj = oObj.EmbeddedObject
Comp = oEmbObj.getComponent()
If Comp.supportsService("com.sun.star.text.TextDocument") then
StyleFam = Comp.StyleFamilies
oPageStyles = StyleFam.getByName("PageStyles")
oStd = oPageStyles.getByName("Standard")
oStd.LeftMargin = 0
oStd.RightMargin = 0
oStd.TopMargin = 0
oStd.Width = oObj.VisibleArea.Width
contador = contador + 1
End If
End If
Next j
Next i
msgbox "Procesados " & contador & " objetos de texto incrustados."
End sub
Código: Seleccionar todo
If Comp.supportsService("com.sun.star.text.TextDocument") then
Cuando funciona bien, la variable Comp, de tipo SwXTextDocument.
Cuando no funciona, esta variable Comp aparece como Null.
Entonces la cuestión es entender porqué ocurre ésto, además de que es insólito que el error "Variable de objeto no establecida" dependa del número de objetos en la hoja.
Gracias,