Avatar billede denero Juniormester
10. januar 2008 - 18:20 Der er 13 kommentarer og
1 løsning

Bestemme modtagere i brevfletning med VBA. Word - data fra excel

Er det muligt, at stille ".LastRecord" til = sidste række i kolonnerne med data - evt. også med angivelse af, hvilken kolonne, der "betemmer". Fletningen foregår i Word med data fra excel.

With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = 1
            .LastRecord = 300
        End With
        .Execute Pause:=False
    End With
End Sub
Avatar billede jkrons Professor
10. januar 2008 - 18:37 #1
Har du andre data i arket, i den der indgår i fletningen?
Avatar billede denero Juniormester
10. januar 2008 - 19:14 #2
Nej,men kolonne a og b er tomme....øh, hvorfor?
Avatar billede jkrons Professor
10. januar 2008 - 22:54 #3
Kun for at finde ud af, om man kunne bestemme LastRecord ud fra indholdet af arket. Jeg ser nærmere på det i morgen.
Avatar billede denero Juniormester
10. januar 2008 - 23:26 #4
Ok, det jeg mig til.
Avatar billede jkrons Professor
11. januar 2008 - 10:51 #5
Kunne jeg då lov til at se resten af dih kode?
Avatar billede denero Juniormester
11. januar 2008 - 11:14 #6
Sub Åbnbrevfletdatabase()
'
' Åbnbrevfletdatabase Makro
'
    ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
    ActiveDocument.MailMerge.OpenDataSource Name:= _
        "C:\Kontrolmappe elektriske maskiner og hjælpemidler.xls" _
        , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
        Format:=wdOpenFormatAuto, Connection:= _
        "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=C:\Kontrolmappe elektriske maskiner og hjælpemidler.xls;Mode=Read;Extended Propert" _
        , SQLStatement:="SELECT * FROM `Data$`", SQLStatement1:="", SubType:= _
        wdMergeSubTypeAccess
       
' Doctype Makro
'
'
   
    ActiveDocument.MailMerge.MainDocumentType = wdCatalog
   
'
' Nytdoc Makro
'
'

    With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = 1
            .LastRecord = 300
        End With
        .Execute Pause:=False
    End With
End Sub
Avatar billede jkrons Professor
11. januar 2008 - 12:06 #7
Jeg skal lige til et møde, men vender tilbage om et par timer.
Avatar billede jkrons Professor
11. januar 2008 - 17:06 #8
Jeg er ikke helt sikker på om nedenståedjne vi virke, da jeg jo ikke har dine fioler at teste på, men prøv med noget i denne stil:

Sub Åbnbrevfletdatabase()
'
' Åbnbrevfletdatabase Makro
'
    ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
    ActiveDocument.MailMerge.OpenDataSource Name:= _
        "C:\Kontrolmappe elektriske maskiner og hjælpemidler.xls" _
        , ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
        Format:=wdOpenFormatAuto, Connection:= _
        "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=C:\Kontrolmappe elektriske maskiner og hjælpemidler.xls;Mode=Read;Extended Propert" _
        , SQLStatement:="SELECT * FROM `Data$`", SQLStatement1:="", SubType:= _
        wdMergeSubTypeAccess
       
' Doctype Makro
'
'
   
    ActiveDocument.MailMerge.MainDocumentType = wdCatalog

' Testantal rækker i databasen
'
    Dim rk As Integer
    On Error Resume Next
    Set xlapp = GetObject(, "Excel.application")
    If Err.Number <> 0 Then
      Set xlapp = CreateObject("excel.Application")
    End If
    xlapp.Workbooks.Open FileName:="C:\Kontrolmappe elektriske maskiner og hjælpemidler.xls"
    xlapp.Visible = False
    rk = xlapp.activeworkbook.Sheets(1).Range("c65536").End(xlUp).Row
    xlapp.activeworkbook.Saved = True
    xlapp.activeworkbook.Close
    Set xlapp = Nothing 
'
' Nytdoc Makro
'
'

    With ActiveDocument.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = 1
            .LastRecord = rk
        End With
        .Execute Pause:=False
    End With
End Sub
Avatar billede jkrons Professor
11. januar 2008 - 17:08 #9
Rettelse: Flyt testen af rækkeantal helt op i begyndelsen af makroen inden din egen "Åbn brevfletDatabase.
Avatar billede jkrons Professor
11. januar 2008 - 17:22 #10
Og så glemte jeg lige at mindeo m, at du under Tools - References skal huske at sætte en reference til Microsoft Excel.
Avatar billede denero Juniormester
12. januar 2008 - 10:41 #11
Det virker ikke rigtigt. Ville det være en god ide, hvis jeg sendte de to filer til dig, da jeg ikke helt kan skue problemet. Vi kan evt. ligge den færdige kode ud, så andre kan have glæde af den.
Avatar billede denero Juniormester
12. januar 2008 - 11:31 #12
Jeg har lige tjekket koden igen - nu virker den. Jeg havde ændret adressen på excelfilen - sorry. Når der bliver flettet over i word tager den dog første tomme række med, kan det ændres?
Hvis kolonne F indeholder tomme celler, men indimellem fyldte, kan der laves makro, som kun tager rækker med, hvor der også er noget i kolonne F. Hvis du betragter det som nyt spørgsmål, er det ok med yderligere point.
Avatar billede jkrons Professor
12. januar 2008 - 11:44 #13
Det første - at den tager første tomme række med, kan sikkert løses ved at ændre til

  .LastRecord = rk - 1

Det andet bliver straks mere problematisk, fordi det ikke er den måde brevfletnign virker på. Det må i givet fald blive noget med at sætte noget filtrering på datane før du fletter, og om det kan lade sig gøre, kan jeg ikke lige gennemskue.
Avatar billede jkrons Professor
12. januar 2008 - 11:45 #14
Her er et svar i første omgang. Hvis jeg får en god i dé til ovenstående, vender jeg tilbage.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Tag et kursus i Word og øg effektiviteten

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester