MS Word, Excel dosyasındaki alanlardan dinamik veriler (başlıklar, yazar, adres, telefon numarası vb. İçin) yükleyebilir mi?


1

Hızlı bir şekilde kodlamak için çok kırılgan olacağından (ve diğer kullanıcılara teslim edebileceğimden) kendi aracımı VBA'da yuvarlamak istemiyorum ya da böylesine basit bir sonuç için kodlama yoluna gidecektim.

Bir tür form doldurmak ve sözcüğü doldurmak için güzel bir yerleşik araç var mı?

Verilerin değişmesi gerekiyorsa, bu merkezi konuma gidebilir ve belgede referans verilen tüm yerleri bulmaya çalışmak yerine (Üstbilgi / Altbilgiye gitmek zorunda olmak veya ilk / son sayfaların olduğunu bilmek gibi) düzenlemeler yapabilirsiniz. diğerlerinden farklı bir düzene sahip olmak, vb.)

Bu, içeriğin, yazarın, adların ve başlıkların bir projeden diğerine değiştiği, ancak biçimin aynı şablonu takip ettiği kılavuzlar içindir.


Bu başarmak istediğin şeye benziyor mu? : stackoverflow.com/a/15709534/2112755
Bay Hargrove

VBA'dan kaçınmak umuduyla, fakat evet, bir noktada faydalı olabilir. Bu ASK / REF alanlarını buldum, ancak belgeyle aynı çizgide olmak garip görünüyor. Merkez depoya gideceğim hissini alamadım ... support.office.com/en-us/article/…
HodlDwon 29:16

1
İşte başlıyoruz. Bence bu VBA'sız olduğu kadar yakın. superuser.com/a/676417/165822 Belki de doc açıldığında veya ayrıştırırken tüm "REF" değişken değerlerini düz bir dosyadan veya excelden ayarladığınızda tüm İstemleri zorlamak için sadece bir littel VBA kullanabilirim.
HodIdwon,

Aradığını bulmana sevindim! Daha fazla yardımda bulunabilirsem haberim olsun!
Bay Hargrove,

1
Adres Mektup Birleştirme ile ilgili bilginiz var mı? Adres Mektup Birleştirme, bir form gibi çalışır ve verileri doldurur. Bu yaygın bir araçtır, sizden veya başkası tarafından söz edilmez. Adres Mektup Birleştirme ile aşina değilseniz, postayla ilgileniyor gibi görünebilir, ancak öyle değil, bu bir şablon ve bir form gibi kullanılır. Ne ile çalıştığınızın bir resmini gönderin ve bir birleştirme yapmanıza yardımcı olabilirim.
ejbytes

Yanıtlar:


1

Form Şablonu veya Adres Mektup Birleştirme'yi başlatmak için : Word 2016


    Postalar Sekmesi → Posta Birleştirmesini Başlat → Adım Adım MM Sihirbazı
    Seçin: Harfler, [Sonraki]
    Seçin: Geçerli Belgeyi Kullan, [Sonraki]
    Seçin: Yeni Bir Liste Girin CREATEcustomize columns→ → Add/Delete/Rename

    Kaydet: Microsoft Office Adres Listeleri (* .mdb) - form / şablon için dinamik liste budur.

[İleri] Mektubunuzu yazın. Şablonunuzu şimdi yapın.

Şimdi dinamik "alanları" eklemek için:

    Postalar Sekmesi → [Birleştirme Alanları Ekle] "Sayfayı", yeni sayfanın projeden projeye değişeceği yere yerleştirin.

Görünüşü: resim ( animasyonlu GIF'i izlemek / gezinmek için resme tıklayın )

görüntü tanımını buraya girin

Microsoft Destek - Word (Adres Mektup Birleştirme): LINK
Microsoft Destek - Excel ile Adres Mektup Birleştirme: LINK


Teşekkürler! Bir VBA çözümü ile gittim, ama burada gösterdiğiniz çabayı takdir ediyorum. MailMerge'i gelecekte bir noktada yapabilirim. Hangi yolun daha kullanıcı dostu / sürdürülebilir olduğunu görmesi gerekecek.
HodIdwon,

@HodlDwon Evet, Birleşmeleri inşa etmeye alışık değilseniz, gerçekte olduğu gibi batıncaya kadar kriptik görünebilir. Yalnızca Excel'deki bir formdaki gibi ayrı bir tabloya sahip bir şablondur.
ejbytes

1

En temiz kodum değil, işim bitiyor.

ÇÖZÜM

Bu, bir metin dosyasından bir dizi anahtar / değer çiftini Word Belgesinin ActiveDocument.Variables listesine yükleyecektir . Bu Değişkenler Belge'de kalıcı olarak saklanır, ancak değişkenlerin çoğaltılmasını ve artık kullanılmasını önlemek için bunları ayırmayı seçtim (koddaki kızak çekici silme bölümüne bakın).

Değişken değerler daha sonra DOCVARIABLE lerine ada göre referans gösterilerek Belge Başındaki Alanlar kullanılarak görüntülenebilir .

Aşağıdaki kodda hata işleme yok, ancak çökmeyi önlemek için bazı temel ayrıştırma denetimleri var. Çok kapsamlı bir şekilde test edilmediyse de, kendi özeninizi gösterin.

KULLANIM:

Kod, Olay Açıldığında Belgesi işleyicisine yerleştirin. Word Belgesi ile aynı adı taşıyan ancak ".config" uzantılı bir dosya oluşturacaktır.

Yaratılışta. config dosyası, Doc'ı kopyalarsanız ve .config dosyasını unutursanız veya bilmezseniz, boş bir dosyayı yanlışlıkla açmamak için yazılmış olan tüm geçerli ActiveDocument.Variables dosyasına sahip olacaktır.

Eğer config dosyası varsa, tüm doc değişkenleri bellekten silinir ve config'dekiler belleğe yüklenir. Config dosyasındaki bir değişkenin değerini değiştirebilirsiniz; bir sonraki açışınızda belge boyunca güncellenecektir.

görüntü tanımını buraya girin

Option Explicit

Private Sub Document_Open()

    'Dim
    Dim i As Long
    Dim Folder As String
    Dim FileName As String
    Dim FullPath As String
    Dim FileText As String
    Dim Item As Variant
    Dim Table As Scripting.Dictionary
    Dim Key As Variant

    ' Open or Create Config File
    With New FileSystemObject

        ' Setup Path
        Folder = ThisDocument.Path & "\"
        FileName = .GetBaseName(ThisDocument.Name)
        FullPath = Folder & FileName & ".config"

        If (.FileExists(FullPath)) Then

            ' Sledge Hammer Cleanup of Document Vars, avoids memory bloat by synchronizing variables with .config file
            For i = ActiveDocument.Variables.Count() To 1 Step -1
                ActiveDocument.Variables.Item(i).Delete
            Next i

            ' Open / Read
            With .OpenTextFile(FullPath, ForReading, False)

                ' Get File Contents
                If Not (.AtEndOfStream) Then
                    FileText = .ReadAll
                End If

                .Close
            End With
        Else

            ' Create / Write
            With .OpenTextFile(FullPath, ForWriting, True)

                ' Write One Key-Value pair per line
                For Each Item In ActiveDocument.Variables
                    .WriteLine (Item.Name & ":=" & Item.Value)
                Next

                .Close
            End With
        End If
    End With

    ' Parse Config Text for Runtime
    Set Table = ParseVariables(FileText)
    For Each Key In Table.Keys
        ActiveDocument.Variables(Key) = Table(Key)
    Next

    ' Update All Fields in Document
    ActiveDocument.Fields.Update

    ' Save File so user does not get nuisance prompts
    ActiveDocument.Save
End Sub


Private Function ParseVariables(text As String) As Scripting.Dictionary

' Dim
Dim i, n As Long
Dim Lines As Variant: Lines = Split(text, vbCrLf)
Dim VarTable As New Scripting.Dictionary
Dim Key, Value As String

    ' Loop
    For i = LBound(Lines) To UBound(Lines)

        Debug.Print ("Lines(" & i & ") = " & Lines(i))

        ' Find the ":=" delimiter in each line that splits the variable name from its value
        n = InStr(1, Lines(i), ":=", vbBinaryCompare)

        ' Escape if not delimited
        If (n > 0) Then

            ' Extract Key before ":=" and Value from after ":="
            Value = Mid(Lines(i), n + 2)
            Key = Trim(Mid(Lines(i), 1, Len(Lines(i)) - Len(Value) - 2))

            ' Escape if either Key or Value are empty
            If (Len(Key) > 0) And (Len(Value) > 0) Then
                VarTable.Item(Key) = Value
            End If
        End If
    Next i

    ' Return
    Set ParseVariables = VarTable

End Function
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.