Basic: ActiveDocument.MailMerge, Objektvariable nicht belegt

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Basic: ActiveDocument.MailMerge, Objektvariable nicht belegt

Re: Basic: ActiveDocument.MailMerge, Objektvariable nicht be

von F3K Total » Mo, 12.08.2013 18:26

Hi,
wenn ich ein Text-Input (Eingabefeld) aus einem Benutzerfeld erzeuge, dann hat es einen Namen.
Gruß R

Re: Basic: ActiveDocument.MailMerge, Objektvariable nicht be

von redderblock » Mo, 12.08.2013 12:30

Hi - das Problem ist, dass mein Dokument keine Feldbezeichner hat. Keine MailMerge-Felder sondern lediglich Text-Input.

Das hat sich leider erst im Verlauf dieses Threads herausgestellt.

Daher bin ich direkt über den Index gegangen.

Re: Basic: ActiveDocument.MailMerge, Objektvariable nicht be

von F3K Total » So, 11.08.2013 17:47

Hi,
Du willst Doch den Wert, der im Feld steht, auslesen, oder?
Wenn ja, geht es einfacher und richtiger. Da du den Namen des Textfeldes kennen solltest, kannst Du auch per "NameAccess" darauf zugreifen.
Angenommen es heißt "Eingabe_Barcode", dann geht dies:

Code: Alles auswählen

Sub Newer
    oTextFieldMasters = thisComponent.TextFieldMasters
    oTextField = oTextFieldMasters.getByName("com.sun.star.text.fieldmaster.User.Eingabe_Barcode")
    msgbox oTextField.Content
End Sub
Gruß R

Re: Basic: ActiveDocument.MailMerge, Objektvariable nicht be

von redderblock » So, 11.08.2013 14:59

Danke, das funktioniert. Da die Vorlage, die ich mittlerweile zum Bearbeiten erhalten habe keine MailMerge-Felder enthält, sondern lediglich text-input, habe ich es nun im Testcode wie folgt umgesetzt:

Code: Alles auswählen

Sub Newer
Dim oTextFieldCon
Dim oTextFields
Dim oTextField

'On Error Resume Next

oTextFieldCon = thisComponent.getTextFields()
oTextFields = oTextFieldCon.createEnumeration()
oTextField = oTextFields.nextElement()
  	
MsgBox oTextField.TextFieldMaster.DependentTextFields(3).getPropertyValue("Content")

End Sub
Ist das so ok? Mich irritiert das ".nextElement()" ein wenig, da ich ja eigentlich nur einen Wert direkt ansprechen will...

Funktionieren tut das wie gewünscht, ich erhalte den Content im DependentTextField No. 3.

Sofern ihr den obigen Code nicht für grob verkehrt haltet, ist das Thema gelöst. Danke Dir Stephan,

Chris

Re: Basic: ActiveDocument.MailMerge, Objektvariable nicht be

von Stephan » Mi, 24.07.2013 14:29

Was könnte mein Fehler sein?
das Dein Code alle Felder gleich behandelt und das es Felder im Dokument geben kann die garnicht über die Eigenschaft die Du abfragst verfügen.

In folgendem Code wird das, wenig elegant, mitels Rundumschlag per On Error Resume Next gefixt, der Code sollte ansonsten das Gewünschte tun.
Der richtigere Weg , statt On Error ..., wäre den Typ des Feldes zu prüfen und erst wenn tatsächlich ein Seriendruckfeld vorliegt dieses abzufragen.

Code: Alles auswählen

Dim oTextFieldCon
Dim oTextFields
Dim field As String

On Error Resume Next

oTextFieldCon = thisComponent.getTextFields()
oTextFields = oTextFieldCon.createEnumeration()
Do while oTextFields.hasMoreElements()
   oTextField = oTextFields.nextElement()
 
  if oTextField.TextFieldMaster.DataColumnName = "Barcodenummer" then
     MsgBox oTextField.CurrentPresentation
  end if
loop

Gruß
Stephan

Re: Basic: ActiveDocument.MailMerge, Objektvariable nicht be

von redderblock » Mi, 24.07.2013 11:48

Vielen Dank, Du hast mein Ziel genau verstanden.

Ich habe mit Deinem PDF-Link und mit dieser Vorlage http://www.oooforum.de/viewtopic.php?t=40434&p=149624
einen Code gebastelt, um überhaupt Zugriff auf meine Felder zu bekommen. Leider ohne Erfolg.

Je nachdem, was ich auskommentiere findet er entweder die Methode .currentpresentation nicht oder .VariableName. Was könnte mein Fehler sein? Ich habe "ID" mittlerweile in "Barcodenummer" umgetauft. Screenshots siehe unten - falls benötigt.

Vielen Dank.

Code: Alles auswählen

Sub DokTest()
Dim oTextFieldCon
Dim oTextFields
Dim field As String
oTextFieldCon = thisComponent.getTextFields()
oTextFields = oTextFieldCon.createEnumeration()
Do while oTextFields.hasMoreElements()
   oTextField = oTextFields.nextElement()
  
  field = oTextField.CurrentPresentation  
  MsgBox field  
  if oTextField.VariableName = "Barcodenummer" then
	  MsgBox oTextField.VariableName
  end if
loop
End Sub
https://www.dropbox.com/s/b595dnlntxcpl ... tation.jpg
https://www.dropbox.com/s/q5g3lph4qfhjl ... leName.jpg

Re: Basic: ActiveDocument.MailMerge, Objektvariable nicht be

von Stephan » Mi, 24.07.2013 00:19

Ich erhalte immer den Fehler, "Objektvariable nicht belegt". Laut meiner Recherche ist das ein Indiz dafür, dass mein Dokument kein echter Serienbrief ist. Das erschient mir aber unlogisch.
Ich habe leider keine Zeit das im Detail zu erklären, nur mit der Zeile (die auch sonst noch Fehler hat):

Code: Alles auswählen

DataToFormat = ActiveDocument.MailMerge.DataSource.DataFields("ID").Value
nimmst Du Bezug auf Etwas was so nicht da ist, denn "ID" hat nicht einen bestimmten Wert, da ja im Normalfall eine ganze Liste von Werten für "ID" da ist.
Was Du brauchst ist nicht der Wert aus der Datenbank, sondern der momentan angezeigte Inhalt des Feldes im Dokument der der Eigenschaft .CurrentPresentation des Feldes entsprechen sollte.

Über das Feld erfährst Du mehr z.B. im Dokument von Pitoniak:
http://www.uni-due.de/~abi070/count.php ... eutsch.pdf

dort Kapitel 14.10. Textfelder und in der dortigen Tabelle wäre es der FEldtyp Database.


Gruß
Stephan

Basic: ActiveDocument.MailMerge, Objektvariable nicht belegt

von redderblock » Di, 23.07.2013 14:17

Hallo Forum,

ich versuche mir die Werte eines Serienbriefeldes im Basic-Editor zurück geben zu lassen.

Ich habe in einer Calc-Datei (später auch in Base) eine Spalte names ID (Spalte1, Zeile1) mit einem Wert (55555Auftragsbestätigung, Spalte1, Zeile2) erstellt.

Diese Tabelle habe ich an ein Seriendruckdokument angebunden. Die Tabelle samt Wert sind über "Datenquellen(F4)" im Seriendokument sichtbar.

Ich habe folgendes versucht:

Code: Alles auswählen

Sub DokVariable() 
Dim DataToFormat As String
DataToFormat = ActiveDocument.MailMerge.DataSource.DataFields("ID").Value 
MsgBox DataToFormat
End Sub
Ich erhalte immer den Fehler, "Objektvariable nicht belegt". Laut meiner Recherche ist das ein Indiz dafür, dass mein Dokument kein echter Serienbrief ist. Das erschient mir aber unlogisch.

Das Feld selber wird als Barcodes3.Tabelle1.ID bzw. <ID> im Writer benannt, meines Wissen sollte es aber über DataFields("ID") ansteuerbar sein, richtig?

Screenshot: https://www.dropbox.com/s/aoumbtewz7mwm ... cSreen.jpg

Zum Hintergrund: Ich möchte später mit dem Mergefield.Value einen Barcode direkt im CodeBehind des Dokuments errechnen, da unsere aktuelle Datenbank keine Barcodes generiert.

Vielen Dank!
Chris

Nach oben