Fehler 9105 - Zeichenfolge länger 255 Zeichen

Bild

Betrifft: Fehler 9105 - Zeichenfolge länger 255 Zeichen
von: Chris
Geschrieben am: 22.09.2015 11:34:46

Hallo,
aus dem Forum habe ich mir den Codeschnipsel von fcs gemoppst (https://www.herber.de/forum/ _ archiv/1032to1036/1032638_Aus_Excelmakro_Word_Serienbrief_starten.html), allerdings meckert VBA, dass die Zeichenfolge länger als 255 Zeichen ist. Dazu ist folgender Code markiert - wollte jetzt nicht in ein Forenbeitrag von 2008 posten:


.OpenDataSource Name:="C:\Temp\liste.xlsm", _
          ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
          AddToRecentFiles:=False, _
          Revert:=False, Format:=wdOpenFormatAuto, _
          Connection:="Provider=Microsoft.Jet.OLEDB.4.0;Password="""";" _
            & "User ID=Admin;" _
            & "Data Source=C:\Temp\liste.xlsm;" _
            & "Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";" _
            & "Jet OLEDB:System database="""";" & "Jet OLEDB:Registry Path="""";" _
            & "Jet OLEDB:Database Password="""";" _
            & "Jet OLEDB:Engine ", _
          SQLStatement:="SELECT * FROM `Abbildung$`", SQLStatement1:="", _
          SubType:=wdMergeSubTypeAccess

Jetzt habe ich ein bisschen nach dem Fehler gegoogled, finde aber nur Hinweise von Stringvariablen, deren Inhalt eben größer als 255 Zeichen ist. Hier arbeite ich allerdings ohne Strings, daher verstehe ich diesen Fehler einfach nicht. Hat hier jemand vielleicht eine Idee? Ich verzweifle langsam an dem nervigen Seriendruck mit Excel 2013 :)

Bild

Betrifft: Text = Sting
von: Tino
Geschrieben am: 22.09.2015 12:33:43
Hallo,
evtl. hilft es den Text für die Connection zuvor in einem String abzulegen.
Kannst mal so testen, habe ich jetzt aber nicht gemacht!

Dim sConString$
'...
'...
'...
sConString = "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";" _
            & "User ID=Admin;" _
            & "Data Source=C:\Temp\liste.xlsm;" _
            & "Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";" _
            & "Jet OLEDB:System database="""";" & "Jet OLEDB:Registry Path="""";" _
            & "Jet OLEDB:Database Password="""";" _
            & "Jet OLEDB:Engine "
'...
'...
     .OpenDataSource Name:="C:\Temp\liste.xlsm", _
          ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
          AddToRecentFiles:=False, _
          Revert:=False, Format:=wdOpenFormatAuto, _
          Connection:=sConString, _
          SQLStatement:="SELECT * FROM `Abbildung$`", SQLStatement1:="", _
          SubType:=wdMergeSubTypeAccess
'...
'...
Gruß Tino

Bild

Betrifft: AW: Text = Sting
von: Chris
Geschrieben am: 22.09.2015 12:55:49
Hi,
jetzt bekomme ich nur noch, dass der Index außerhalb des gültigen Bereichs liegt. Aber danke schonmal für deinen Tipp

Bild

Betrifft: lade eine Beispieldatei hoch oT.
von: Tino
Geschrieben am: 23.09.2015 09:12:39


Bild

Betrifft: lade eine Beispieldatei hoch oT.
von: Tino
Geschrieben am: 23.09.2015 09:47:59


Bild

Betrifft: AW: Text = Sting
von: fcs
Geschrieben am: 23.09.2015 12:47:17
Hallo Chris,
ich hab mal unter Word ein wenig getestet.
der Connection-Text darf tatsächlich unter VBA nur 255 Zeichnen lang sein.
Die Gesamtlänge des Connection-Strings ist aber viel länger, wird aber einfach vom Recorder abgeschnitten. Scheinbar sind die Parameter, die über Bord fallen nicht so wichtig, da es sich um die Standard-Werte handelt. Da auch der Dateiname Teil des Connection-Strings ist, sollte der Pfad und Dateiname nicht zu viele Zeichen enthalten.
Wichtig ist, dass du den Provider noch überprüfst, der kann mit Office/Windowsversion sich ändern.
Zeichne das Erstellen Serienbrief.Datenverbindung mit dem Makrorekorder auf, um den korrekten Wert zu erhalten oder benutze mein Analyse-Makro unter Word.
Gruß
Franz

'Erstelt unter Word/Excel 2010 / Windows 7
Sub Vorbereiten_Serienbrief_Word()
'
' Makro1 Makro
'
  Dim xlFile As String, strCon As String
  Dim wdDoc As Word.Document
  
  xlFile = "D:\Test\liste.xlsm"
  strCon = "Provider=Microsoft.ACE.OLEDB.12.0;" _
          & "User ID=Admin;" _
          & "Data Source=" & xlFile & ";Mode=Read;" _
          & "Extended Properties=""HDR=YES;IMEX=1;"";" _
          & "Jet OLEDB:System database="""";" _
          & "Jet OLEDB:Registry Path="""";" _
          & "Jet OLEDB:Engine Type=37;" _
'Connection-Parameter Teil 2
  strCon = strCon ' & "Jet OLEDB:Database Locking Mode=0;" _
          & "Jet OLEDB:Global Partial Bulk Ops=2;" _
          & "Jet OLEDB:Global Bulk Transactions=1;" _
          & "Jet OLEDB:New Database Password="";" _
          & "Jet OLEDB:Create System Database=False;" _
          & "Jet OLEDB:Encrypt Database=False;" _
          & "Jet OLEDB:Don't Copy Locale on Compact=False;" _
          & "Jet OLEDB:Compact Without Replica Repair=False;" _
          & "Jet OLEDB:SFP=False;" _
          & "Jet OLEDB:Support Complex Data=False;" _
          & "Jet OLEDB:Bypass UserInfo Validation=False"
'
  Set wdDoc = Word.ActiveDocument
  wdDoc.MailMerge.MainDocumentType = wdFormLetters
  With wdDoc.MailMerge
    .OpenDataSource Name:=xlFile, _
        ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
        Format:=wdOpenFormatAuto, _
        Connection:=strCon, _
        SQLStatement:="SELECT * FROM `Abbildung$`", SQLStatement1:="", _
        SubType:=wdMergeSubTypeAccess
  End With
End Sub
'Test-Makro unter Word
Sub Analyse_MailMergeDataSource()
'
  Dim objObject As Word.MailMergeDataSource
  
  Dim wdDoc As Document
  Dim strCon As String
  
  Set wdDoc = ActiveDocument
  
  Set objObject = wdDoc.MailMerge.DataSource
  With objObject
    strCon = .ConnectString
    Debug.Print strCon
    
  End With
End Sub


Bild

Betrifft: AW: Text = Sting
von: Chris
Geschrieben am: 23.09.2015 13:49:16
Ah super - danke fcs,
jetzt wollte ich per Makrorecorder den Provider überprüfen, gehe auf "Empfänger auswählen", wähle die xlsm Datei aus und bekomme als Fehlermeldung: "Fehler: Die externe Tabelle hat nicht das erwartete Format.." Geht unter Office 2013 xlsm als Datenliste nicht mehr oder liegt der Ursprung des Fehlers vllt in der Exceldatei?

Bild

Betrifft: AW: Text = Sting
von: fcs
Geschrieben am: 23.09.2015 17:04:53
Hallo Chris,
ich hab ja unter Excel 2010 getestet. Da funktioniert es auch mit einer Excel-Datei mit Makros (xlsm)
Kannst du die xlsm-Datei unter Excel ohne Probleme öffnen?
Die Excel-Datei darf nicht geöffnet sein, wenn du von Word die Datenquelle öffnest. Das macht Kummer, allerdings sollte die Fehlermeldung anders sein.
Gruß
Franz

Bild

Betrifft: AW: Text = Sting
von: Chris
Geschrieben am: 25.09.2015 10:12:43
Die Datei funktioniert in Excel ohne Probleme. Habe mir das jetzt nochmal angeguckt, bekomme aber, wenn ich deine Idee mit den Strings umsetze, immer noch hier bei deisem Schritt die Fehlermeldung, dass der Zeichensatz zu lang ist.

.OpenDataSource Name:=xlFile, _
          ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
          AddToRecentFiles:=False, _
          Revert:=False, Format:=wdOpenFormatAuto, _
          Connection:=strCon, _
          SQLStatement:="SELECT * FROM `Abbildung$`", SQLStatement1:="", _
          SubType:=wdMergeSubTypeAccess


Bild

Betrifft: AW: Text = Sting
von: Chris
Geschrieben am: 25.09.2015 16:18:11
jetzt hat es funktioniert. Allerdings bekomme ich beim ersten Ausführen, dass die Remote Verbindung nicht vorhanden sei. Gehe ich auf "Beenden" und führe das Makro nochmal aus, funktioniert alles ohne Probleme.

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Fehler 9105 - Zeichenfolge länger 255 Zeichen"