none
Makro Office 2010 > Visual Basic Code RRS feed

  • Frage

  • Ich habe in Office 2010 ein Makro mit Seriendruck gestartet. Diesen Code habe ich mit Änderungen in Visual Basic (Studio 2005) übernommen. Nur eine Codezeile kann ich nicht ändern.

    Makro:

     ActiveDocument.Fields.Add Range:=Selection.Range, Type:= _
            wdFieldAddressBlock, Text:= _
            "\f ""<<_COMPANY_" & Chr(13) & ">><<_TITLE0_ >><<_FIRST0_>><< _LAST0_>><< _SUFFIX0_>>" & Chr(13) & "<<_STREET1_" & Chr(13) & ">><<_STREET2_" & Chr(13) & ">><<_POSTAL_ >><<_CITY_>><<" & Chr(13) & "_COUNTRY_>>"" \l 1031 \c 2 \e ""Deutschland"" "

    Visual Basic:

    Try
    Me.WordApp.ActiveDocument.Fields.Add(Range:=Selection.Range, Type:=Word.WdFieldType.wdFieldAddressBlock, Text:= _ 
    "\f ""<<_COMPANY_" & Chr(13) & ">><<_TITLE0_ >><<_FIRST0_>><< _LAST0_>><< _SUFFIX0_>>" & Chr(13) & "<<_STREET1_" & Chr(13) & ">><<_STREET2_" & Chr(13) & ">><<_POSTAL_ >><<_CITY_>><<" & Chr(13) & "_COUNTRY_>>"" \l 1031 \c 2 \e ""Deutschland"" ")
    Catch
    End Try

    Die Fehlermeldung lautet: Selection nicht definiert. Was kann ich tun, wie sieht die Codierung aus?

    Freundliche Grüße

    Dienstag, 22. Februar 2011 11:42

Antworten

  • Hallo,

    Me.WordApp.ActiveDocument.Fields.Add(Range:=Selection.Range, Type:=Word.WdFieldType.wdFieldAddressBlock, Text:= _

    Die Fehlermeldung lautet: Selection nicht definiert. Was kann ich tun, wie sieht die Codierung aus?

    Selection ist eine Eigenschaft des Application Objekts, folglich führt folgende Anweisung zum Ziel:

    Me.WordApp.ActiveDocument.Fields.Add(Range:=Me.WordApp.Selection.Range, ...
    
    
    

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Dienstag, 22. Februar 2011 12:58
    Moderator

Alle Antworten

  • Hallo,

    Me.WordApp.ActiveDocument.Fields.Add(Range:=Selection.Range, Type:=Word.WdFieldType.wdFieldAddressBlock, Text:= _

    Die Fehlermeldung lautet: Selection nicht definiert. Was kann ich tun, wie sieht die Codierung aus?

    Selection ist eine Eigenschaft des Application Objekts, folglich führt folgende Anweisung zum Ziel:

    Me.WordApp.ActiveDocument.Fields.Add(Range:=Me.WordApp.Selection.Range, ...
    
    
    

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Dienstag, 22. Februar 2011 12:58
    Moderator
  • Guten Morgen Herr Dörfler,

    zunächst ein herzliches Dankeschön für die schnelle Beantwortung. Das "Problem" ist gelöst. Nun habe ich aber etwas anderes :)

    Mit dem Makro werden die Etiketten (ca. 440) hintereinander gedruckt (ca. 7 Blatt). Aber mit dem Code in Visual Basic wird jeweils eine Adresse pro Blatt gedruckt, also ca. 440 Blatt. Da ich kein Profi-Programmierer bin, wäre ich Ihnen sehr dankbar, wenn Sie mir noch einen Tipp geben könnten.

    Hier noch einmal die Code-Beispiele:

     

    Sub Makro1()
    '
    ' Makro1 Makro
    '
    '
      ActiveDocument.MailMerge.MainDocumentType = wdMailingLabels
      ActiveDocument.MailMerge.OpenDataSource Name:= _
        "C:\SEMK\San Jaime\Datenbanken\SanJaimeDaten.mdb", ConfirmConversions:= _
        False, ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
        PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
        WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
        Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\SEMK\San Jaime\Datenbanken\SanJaimeDaten.mdb;Mode=Read;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=4;Jet OLEDB:Database Locking Mode=0;" _
        , SQLStatement:="SELECT * FROM `Eigentümer`", SQLStatement1:="", SubType _
        :=wdMergeSubTypeAccess
      ActiveDocument.Fields.Add Range:=Selection.Range, Type:= _
        wdFieldAddressBlock, Text:= _
        "\f ""<<_COMPANY_" & Chr(13) & ">><<_FIRST0_>><< _LAST0_>><< _SUFFIX0_>>" & Chr(13) & "<<_STREET1_" & Chr(13) & ">><<_STREET2_" & Chr(13) & ">><<_POSTAL_ >><<_CITY_>><<" & Chr(13) & "_COUNTRY_>>"" \l 1031 \c 2 \e ""Deutschland"" \d"
      With ActiveDocument.MailMerge
        .Destination = wdSendToPrinter
        .SuppressBlankLines = True
        With .DataSource
          .FirstRecord = wdDefaultFirstRecord
          .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
      End With
    End Sub
      Private Sub AdresseDrucken()
    
        Me.WordApp.ActiveDocument.MailMerge.MainDocumentType = Word.WdMailMergeMainDocType.wdMailingLabels
        Me.WordApp.ActiveDocument.MailMerge.OpenDataSource(Name:= _
        "C:\SEMK\San Jaime\Datenbanken\SanJaimeDaten.mdb", ConfirmConversions:= _
        False, ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
        PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
        WritePasswordTemplate:="", Revert:=False, Format:=Word.WdOpenFormat.wdOpenFormatAuto, _
        Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\SEMK\San Jaime\Datenbanken\SanJaimeDaten.mdb;Mode=Read;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=4;Jet OLEDB:Database Locking Mode=0;" _
        , SQLStatement:="SELECT * FROM `Eigentmer`", SQLStatement1:="", SubType _
        :=Word.WdMergeSubType.wdMergeSubTypeAccess)
    
        Try
          Me.WordApp.ActiveDocument.Fields.Add(Range:=Me.WordApp.Selection.Range, Type:=Word.WdFieldType.wdFieldAddressBlock, Text:= _
          "\f ""<<_COMPANY_" & Chr(13) & ">><<_FIRST0_>><< _LAST0_>><< _SUFFIX0_>>" & Chr(13) & "<<_STREET1_" & Chr(13) & ">><<_STREET2_" & Chr(13) & ">><<_POSTAL_ >><<_CITY_>><<" & Chr(13) & "_COUNTRY_>>"" \l 1031 \c 2 \e ""Deutschland"" \d")
        Catch
        End Try
    
        With Me.WordApp.ActiveDocument.MailMerge
          .Destination = Word.WdMailMergeDestination.wdSendToNewDocument
          .SuppressBlankLines =True
    
          With .DataSource
            .FirstRecord =Me.WordApp.ActiveDocument.MailMerge.DataSource.FirstRecord()
            .LastRecord =Me.WordApp.ActiveDocument.MailMerge.DataSource.LastRecord()
          End With
    
          .Execute(Pause:=False)
    
        End With
    
      End Sub

    Für Ihre Bemühungen vorab ein herzliches Dankeschön!

    Mit freundlichen Grüßen

    Manfred Keuter

    Mittwoch, 23. Februar 2011 09:34