BASIC-runtime-fout. Objectvariabele niet ingesteld. Macro from CHATGPT

  1. MACRO:

Sub test3
Dim oDoc As Object
Dim oTables As Object
Dim oTable As Object
Dim i As Integer

' Haal het huidige document op
oDoc = ThisComponent

' Haal alle tabellen in het document op
oTables = oDoc.getTextTables()

' Loop door elke tabel en pas de kolombreedtes aan
For i = 0 To oTables.getCount() - 1
    oTable = oTables.getByIndex(i)
    oTable.Columns.getByIndex(0).Width = 8900 ' 8,9 cm
    oTable.Columns.getByIndex(1).Width = 1000 ' 1 cm
    oTable.Columns.getByIndex(2).Width = 9700 ' 9,7 cm
Next i

End Sub

  1. extra, macro, run

BASIC-runtime-fout.
Objectvariabele niet ingesteld.

on
oTable.Columns.getByIndex(0).Width = 8900 ’ 8,9 cm

  1. WHAT’S WRONG?

My request to CHATGPT was:

Stel: Ik sta in libre office writer (versie 7) in een document.

Kun je me de code geven zodat macro “test3” bij uitvoeren het volgende doet?

Voor elke tabel in het document:

De breedte van kolom 1 naar 8,9 cm

en de breedte van kolom 2 naar 1 cm

en de breedte van kolom 3 naar 9,7 cm.

Voor een macro oplossing is het waarschijnlijk nodig dat de vragen aan ChatGPT verfijnd worden maar ik heb daar geen ervaring mee. Maar ik denk dat als je goed leert omgaan met LibreOffice ook je wel tot een resultaat kunt komen.

Een voorlopige werkwijze is:

  • selecteer de tabel en kies daarna voor het bewerken van de tabel eigenschappen
  • Stel eerst de breedte in van de tabel
  • In het Tabblad kolommen de breedte instellen en ook aangeven dat de breedte veranderd mag worden.
  • Misschien moeten er nog wat zaken ingesteld worden.

Voor zover ik weet moeten tabellen altijd opnieuw opgemaakt worden. Met Auto-opmaak kan wel veel ingesteld worden maar geen afmetingen. Misschien kun je kiezen om eerst de gegevens op te maken in calc en daarna. Overigens weet ik niet uit ervaring hoe blijvend, stabiel, de gegevens zijn dus wees wel voorzichtig.

Voor enkele tabellen is dit de oplossing, maar ik heb er honderden en misschien verander ik nog eens van gedachte.

Maar ik heb wat gevonden: “https://bugs.documentfoundation.org/show_bug.cgi?id=51925
Het blijkt dus verdorie een oude fout te zijn die nog niet is opgelost …

Dus: OLD BUG, STILL NOT SOLVED …

Samengevat: oTable.Columns.getByIndex(0) geeft abusievelijk NULL …

Nu moet ik na elke update maar even testen of het al werkt …

Ik vond op een ander Engels forum twee mogelijke oplossingen

De eerste begrijp ik niet en er zit nog een fout in.
Writer table column-resize

De tweede geeft betere uitleg en is in BASIC.
Macro to change the size of a TextTable

Ik heb het niet geprobeerd. Voor de macro’s geldt waarschijnlijk dat het wel eenvoudige tabellen moet zijn.

Als ik de foutmelding goed lees wordt de fout niet hersteld zonder nieuwe meldingen.

Ik ben na het plaatsen van het bericht ook nog wat verder gaan kijken. Het lijkt wel dat ik toch voor een andere oplossing kies dan wat ik verder lees. Wel is het zo dat ik het bericht van DACM als basis gebruik. Het moeilijkste is het begrijpen van de aan te passen array TableColumnSeparators. Wanneer de bijgevoegde macro gebruik word zorg dat je een copie van je documenten heb want ik heb geen gegevens om het uit gebreid te testen.

REM  *****  BASIC  *****
option explicit

Sub ResizeDACM
' resize a table in write 
oDoc = ThisComponent
oTables = oDoc.TextTables
oTable = oTables.getByIndex(0)
TblColSeps = oTable.TableColumnSeparators
oTable.Width = 8900 + 1000 + 9700 ' Hier wordt de totale breedte opgegeven
oTable.RelativeWidth =false ' Ik weet niet of het nodig is om dit in te stellen

' nu gaan we de kolommen berekenen
' De breedte is wordt 
' Het lukt me nog niet om een goede beschrijving te geven
'' Er is een Property oTable.TableColumnRelativeSum wat naar mijn idee 100% voor moet stellen.
' Het is mogelijk dat het niet uit maakt hoe hier de maten worden opgegeven aan gezien het om de verhoudingen gaat.
' De vermenigvuldiging met 10000 is blijkbaar wel nodig
TblColSeps(0).Position = (8900 /(8900 + 1000 + 9700) ) * 10000
TblColSeps(1).Position = ((8900 + 1000 )/(8900 + 1000 + 9700) ) * 10000 
'print oTable.width
'print oTable.TableColumnRelativeSum
oTable.TableColumnSeparators = TblColSeps
End Sub

Ik heb er nu ook een bestand aan toegevoegd. Het is calc bestand maar werkt op writer bestanden.

[resize_tabel_kolommen03.ods|attachment](upload://4sQHsTPgBf8OyujncHoPVu4SLhu.ods) (12.1 KB)

Ik heb maar een nieuwe melding gedaan. Kan geen kwaad. Tot de fix maar met de hand …

lk heb het bovenstaande bericht veranderd

Dank voor de suggestie. Maar ik vrees dat er nog een hoop werk in gaat zitten.
Ik heb dan wel een software engineer achtergrond, maar LibreOffice en OO zijn toch een apart verhaal.

Ik heb een bericht van mij proberen te veranderen maar dat lukte niet zo goed.
resize_tabel_kolommen03.ods (12.1 KB)

Het bestand is een calc bestand maar je kunt er writer bestand mee veranderen. Het zit vol met commentaar dus daar zitten ook de aanwijzingen hoe het werkt. Probeer het voorzichtig uit want ik heb het alleen getest op drie gelijke eenvoudige bestanden.