2015-06-12 48 views
7

का उपयोग कर पहुँच में पाठ स्वरूपित मैं एक एक्सेस डेटाबेस में वर्ड से स्वरूपित पाठ को बचाने के लिए की जरूरत है।प्रतिलिपि VBA

अभी तक मैंने यह पता लगाने में कामयाब रहा है कि किसी एक्सेस फ़ील्ड में स्वरूपित टेक्स्ट को कैसे स्टोर किया जाए (तालिका में मेमो फ़ील्ड बनाएं और टेक्स्ट टेक्स्ट को रिच टेक्स्ट के रूप में सेट करें)। अतः मैं अभी तक कैसे परिवहन के लिए के रूप में एक समाधान भर में नहीं आए हैं सर्च कर रहे हैं एक्सेस में शब्द से पाठ कहा।

मुझे पता है कि यह संभव है, क्योंकि आप इसे बस को कॉपी करके करते हैं और जानकारी चिपकाने यदि आप इसे मैन्युअल रूप से कर रहे हैं कर सकते हैं।

मेरा प्रश्न, मैं वीबीए का उपयोग करके तालिका में किसी शब्द में स्वरूपित पाठ को प्रतिलिपि बना सकता हूं?

प्रयोगात्मक मैं इस परीक्षण करने के लिए निम्नलिखित बनाया। अब तक सफलता नहीं मिली ...

Sub GetComments() 
'Imports Analyst Comments from Excel files als OLE Objects. 
'--------------------------------- 

'Access Variables 
Dim dbsFundDB As DAO.Database 
Dim rsComments As DAO.Recordset 

Set dbsFundDB = CurrentDb 
Set rsComments = dbsFundDB.OpenRecordset("tblFunds") 

'Word Variables 
Dim doc    As Word.Application 
Dim dcmt   As Word.Document 
Dim sectn   As Word.Section 
Dim obCommentText As Object 
Dim sAnalystText As String 

'Open New Word File 
Set doc = New Word.Application 
doc.Visible = True 
Set dcmt = doc.Documents.Open(sPathTemplate) 
Set sectn = dcmt.Sections(1) 

sectn.Range.Select 
Selection.InsertFile FileName:="myfile.rtf", Range:="", _ 
    ConfirmConversions:=False, Link:=False, Attachment:=False 

sAnalystText = sectn.Range.Tables(1).cell(1, 1).Range.FormattedText 

rsComments.AddNew 
rsComments![Long Comment Exec] = sAnalystText 
rsComments.Update 

sectn.Range.Select 
dcmt.Close savechanges:=False 
doc.Quit 

End Sub 

अद्यतन मैं मैट हॉल से जवाब को लागू करने की कोशिश की। पाठ वास्तव में डेटाबेस को कॉपी किया है, लेकिन यह अभी तक स्वरूपण नहीं रखता:

Option Explicit 
Public Const sPathTemplate As String = "W:\L\BDTP\Products\FundResearchTool\Advisory.docx" 
Option Compare Database 

Sub GetComments() 
'Imports Comments from word and save in DB 
'Test soubroutine 
'--------------------------------- 

'Word Variables 
Dim obCommentText As Variant 
Dim strSQL As String 

obCommentText = GetWordContent(sPathTemplate) 

strSQL = "insert into [tblText]([TestField]) values('" & obCommentText & "')" 

DoCmd.RunSQL strSQL 
MsgBox "Import Successful", vbInformation Or vbOKOnly 

End Sub 
Private Function GetWordContent(strFile As String) As Variant 

    ' This function takes the path obtained to the MS-Word Document selected in 
    ' the FileToOpen function and then uses that to open that MS-Word Document 
    ' and retrieve its text contents 

    Dim objDoc As Word.Document 

    Set objDoc = GetObject(strFile) 

    GetWordContent = CVar(objDoc.Sections(1).Range.Text) 

    objDoc.Close 

End Function 
+0

मैं वास्तव में नहीं है तुम क्या कर रहे साथ अनुभव है । हालांकि मैं इस पोस्ट जो कुछ सभ्य सुझाव है लगता है ढूँढने में सक्षम था: http://stackoverflow.com/questions/14316916/copy-text-from-table-in-word-and-retaing-formatting – Newd

उत्तर

5

यहाँ एक विधि भारी संदर्भ this है:

यहाँ एक साधारण परीक्षण के रूप में मेरे कार्यान्वयन है।

से पहले क्या आप वाकई इन (या अपने प्रवेश संस्करण के समकक्ष) संदर्भ VBA संपादक> टूल> संदर्भ में टिक कर लिया है शुरू:

माइक्रोसॉफ्ट वर्ड 15.0 वस्तु लाइब्रेरी

माइक्रोसॉफ्ट कार्यालय 15.0 ऑब्जेक्ट लाइब्रेरी

मान लें कि आपने इस एम को ट्रिगर करने के लिए कमांड बटन के साथ एक फॉर्म सेट अप किया है

1) फ़ाइल चयनकर्ता फंक्शन:: एस वर्ड आयात, उस फ़ॉर्म का VBA मॉड्यूल में कहीं निम्नलिखित समारोह और सबरूटीन डाल

यह आपको MS-वर्ड दस्तावेज़ का चयन करने की अनुमति देगा आप का उपयोग करना चाहते हैं पुराने परिचित फ़ाइल संवाद विंडो आप Windows भर में देखते हैं। अंत में, सब यह करता है फ़ाइल आप सबरूटीन (2) में वर्णित में में उपयोग के लिए चुनते ही की फ़ाइल पथ और नाम को बचाने के है ...

Private Function FileToOpen() As String 

    ' This function will essentially allow you to browse to MS-Word document 
    ' and then store the path of that file for use in the GetWordContent function 

    Dim fDialog As Office.FileDialog 
    Dim varFile As Variant 

    Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 

    With fDialog 

     .AllowMultiSelect = False 
     .Title = "Select Word document to import" 
     .Filters.Clear 
     .Filters.Add "Word files", "*.doc?" 

     If _ 
      .Show = True _ 
     Then 
      For Each varFile In .SelectedItems 

       FileToOpen = varFile 

      Next 

     Else 

      FileToOpen = "" 

     End If 

    End With 

End Function 

2) जाओ MS- की प्रारूपित लेख सामग्री वर्ड डॉक्यूमेंट सबराउटिन:

यह सबराउटिन एमएस-वर्ड दस्तावेज़ खोलने के लिए फ़ाइल पिकर फ़ंक्शन (उपरोक्त) में चयनित एमएस-वर्ड दस्तावेज़ का फ़ाइल पथ और नाम का उपयोग करेगा, सभी टेक्स्ट का चयन करें, इसे कॉपी करें क्लिपबोर्ड, Access में एक खुला फार्म पर एक पाठ बॉक्स में पेस्ट करें और फिर बंद MS-वर्ड ...

Private Sub GetWordContent(strFile As String) 

    ' This function takes the path obtained to the MS-Word Document selected in 
    ' the FileToOpen function and then uses that to open that MS-Word Document 
    ' and retrieve its text contents and paste them in to WordDocData textbox on 
    ' the currently open form in Access 

    ' Create an MS-Word Object: 

    Dim objDoc As Object 
    Set objDoc = CreateObject("Word.Application") 

    ' Open the file selected in FileToOpen() and copy the contents to clipboard: 

    With objDoc 

     .Documents.Open strFile 
     .Visible = True 
     .Activate 
     .Selection.WholeStory 
     .Selection.Copy 

    End With 

    ' Set the focus to the WordDocData textbox on the Access Form and paste clipboard: 

    Me.WordDocData.SetFocus 
    DoCmd.RunCommand acCmdPaste 

    Me.WordDocDataSrc = strFile 

    ' Save record on the form: 

    If _ 
     Me.Dirty _ 
    Then 

     Me.Dirty = False 

    End If 

    ' A bit hacky this bit. When you close MS-Word after copying a lot of data, 
    ' you might get a message asking you if you if you want to keep the last item 
    ' you copied. This essentially overwrites the clipboard that currently has 
    ' the whole document stored, to just the first 5 characters, which should allow 
    ' MS-Word to be closed here without a pop-up message to deal with: 

    With objDoc 

     .Selection.HomeKey Unit:=wdLine 
     .Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend 
     .Selection.Copy 
     .Documents.Close 
     .Quit 

    End With 

    Set objDoc = Nothing 

End Sub 

अपने आदेश बटन के ईवेंट पर क्लिक करें:

यह सबरूटीन अपने आदेश बटन के ईवेंट पर क्लिक करें से चलाया जाना चाहिए। यह अनिवार्य रूप FileToOpen समारोह और उपयोगकर्ता के लिए क्रम में GetWordContent सबरूटीन एक एमएस-वर्ड दस्तावेज़ का चयन करें और फिर VBA नकल करते हैं और में खुला फार्म पर एक रिच टेक्स्ट ज्ञापन पाठ बॉक्स में एमएस-वर्ड दस्तावेज़ से स्वरूपित पाठ चिपकाने के लिए कॉल पहुंच।

ध्यान दें कि यह सबरूटीन कुछ मान्यताओं बनाता है, और नियंत्रण/टेबल/क्षेत्रों और whatnot के नाम है कि आप पहले से ही सेटअप नहीं हो सकता है को दर्शाता है। इन मान्यताओं हैं:

  1. आपका प्रपत्र के आदेश बटन cmdGetWordData कहा जाता है
  2. आपका एक्सेस डेटाबेस एक मेज कहा जाता है tblWordDump
  3. आपका प्रपत्र तालिका tblWordDump
  4. tblWordDump है के लिए बाध्य है 2 ज्ञापन पाठ फ़ील्ड WordDocDataSrc और WordDocData आयात स्टोर करने के लिए कहा जाता है एड फ़ाइल पथ/नाम और क्रमशः पाठ सामग्री और दोनों अपने प्रपत्र
Private Sub cmdGetWordData_Click() 

    ' This subroutine runs on your command button; it will call both the FileToOpen function and GetWordContent subroutine 
    ' to retrieve the text contents of your chosen MS-Word Document. 
    ' It will then store both the path the text contents of of your chosen MS-Word Document in 2 fields in a table in Access. 

    ' NOTE: this code assumes that your Access database has: 
    ' - a table called tblWordDump 
    ' - a memo text field in this table called WordDocDataSrc to store the path of MS-Word file imported 
    ' - a memo text field in this table called WordDocData with the TextFormat property set to "Rich Text", 
    ' which will store the text and text formating of the MS-Word file imported 

    Dim strFile As String 
    Dim strWordContent As Variant 

    ' Select file via File Dialogue 

    strFile = FileToOpen 

    ' Conditionals when a file was or wasn't selected 

    If _ 
     Len(strFile) > 0 _ 
    Then 

     DoCmd.GoToRecord , , acNewRec 

     GetWordContent strFile 

     MsgBox "Import Successful", vbInformation Or vbOKOnly 

    Else 

     MsgBox "No File Selected", vbExclamation Or vbOKOnly 

    End If 

End Sub 

इस बात का आप में के बारे में प्रहार करने के लिए Here's an example Access file से जुड़ जाते हैं।

+0

धन्यवाद इतना लिए ज्यादा आपका उत्तर! मैंने कार्यान्वित करने का प्रयास एक परीक्षण वातावरण में किया है जो वास्तविक परियोजना को प्रतिबिंबित करता है। ऊपर मेरा अपडेट देखें। कोड टेक्स्ट लेता है, लेकिन यह स्वरूपण नहीं रखता है। क्या मैं अपने कार्यान्वयन में कुछ दिख रहा हूं? मैं आपके उदाहरण तक नहीं पहुंच सका क्योंकि हमारी कॉरपोरेट फ़ायरवॉल मुझे gdrive से डाउनलोड नहीं करने देगी। – rohrl77

+0

आप किस प्रारूपण को रखने की उम्मीद कर रहे थे? मैं देख सकता हूं कि कैरिज रिटर्न और नई लाइनें नहीं रखी गई हैं, इसलिए मैं देखूंगा कि क्या उन्हें रखने का कोई तरीका है .. क्या कोई अन्य प्रकार का स्वरूपण था जिसे आप रखना चाहते थे? –

+0

मुझे बोल्ड लेटरिंग, कैरिज रिटर्न और बुलेट पॉइंट्स चाहिए। फिलहाल कोड मूल रूप से सादा पाठ लाता है। यह आपके लिए किस प्रकार का स्वरूपण रखता है? – rohrl77