2010-10-19 2 views
3

Я создал форму приложения с использованием MS Word и целую кучу полей формы, и у меня есть db доступа, который может импортировать все данные, которые мне нужны из этого Word-документа, благодаря этому :Импортировать поля формы MS Word в MS Access

http://msdn.microsoft.com/en-us/library/aa155434%28office.10%29.aspx

Теперь все работает просто отлично (мне даже удалось получить его импортировать в несколько таблиц!), но проблема с выше, что я должен вручную ввести имя каждого файла, по одному время ... это нормально, если это всего лишь случай импорта формы приложения в том виде, в каком он приходит ... но у меня довольно много сидят в папке, которая требуется ввести в базу данных.

Тогда я нашел это:

How to show "Open File" Dialog in Access 2007 VBA?

Я пытался настроить и объединить два, чтобы заставить его работать ... но как вы можете догадаться, но безрезультатно ... (это Безразлично помогите, когда я очень новичок в Access!)

Что я хочу сделать, так это возможность импортировать кучу полей документов Word/форм в MS Access с помощью диалогового окна Open/Select file ... у меня есть работы, но я хотел бы облегчить работу!

Спасибо всем Джейк

##### Коды Я использую
Option Compare Database 

Option Explicit 

Private Sub cmdFileDialog_Click() 

' This requires a reference to the Microsoft Office 11.0 Object Library. 

Dim fDialog As Office.FileDialog 
Dim varFile As Variant 

Dim appWord As Word.Application 
Dim doc As Word.Document 
' Dim cnn As New ADODB.Connection 
' Dim rst As New ADODB.Recordset 
Dim strDocName As String 
Dim blnQuitWord As Boolean 

' Clear the list box contents. 
' Me.FileList.RowSource = "" 

' Set up the File dialog box. 
Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 
With fDialog 
' Allow the user to make multiple selections in the dialog box. 
.AllowMultiSelect = True 

' Set the title of the dialog box. 
.Title = "Select One or More Files" 

' Clear out the current filters, and then add your own. 
.Filters.Clear 
.Filters.Add "Microsoft Word", "*.DOC" 
.Filters.Add "All Files", "*.*" 

' Show the dialog box. If the .Show method returns True, the 
' user picked at least one file. If the .Show method returns 
' False, the user clicked Cancel. 
If .Show = True Then 
' Loop through each file that is selected and then add it to the list box. 
For Each varFile In .SelectedItems 
' Me.FileList.AddItem varFile 

Set appWord = GetObject(, "Word.Application") 
Set doc = appWord.Documents.Open(varFile) 

' cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
'  "Data Source=M:\Medical\GPAppraisal\Contacts & Databases\" & _ 
'  "AppForm.mdb;" 
' rst.Open "tbl_Applicants", cnn, _ 
'  adOpenKeyset, adLockOptimistic 

' With rst 
.addnew 
!Title = doc.FormFields("wTitle").Result 
!FirstName = doc.FormFields("wFirstName").Result 
!LastName = doc.FormFields("wLastName").Result 
!Address1 = doc.FormFields("wAddress1").Result 
!Address2 = doc.FormFields("wAddress2").Result 
!Address3 = doc.FormFields("wAddress3").Result 
!City = doc.FormFields("wCity").Result 
!PostCode = doc.FormFields("wPostCode").Result 
!Email = doc.FormFields("wEmail").Result 
!Phone1 = doc.FormFields("wPhone1").Result 
!Phone2 = doc.FormFields("wPhone2").Result 
!LM = doc.FormFields("wLM").Result 
!LMAddress1 = doc.FormFields("wLMAddress1").Result 
!LMAddress2 = doc.FormFields("wLMAddress2").Result 
!LMAddress3 = doc.FormFields("wLMAddress3").Result 
!LMCity = doc.FormFields("wLMCity").Result 
!LMPostCode = doc.FormFields("wLMPostCode").Result 
!LMEmail = doc.FormFields("wLMEmail").Result 
!LMPhone = doc.FormFields("wLMPhone").Result 
!LMOK = doc.FormFields("wLMOK").Result 
!Probity = doc.FormFields("wProbity").Result 
!Practising = doc.FormFields("wPractising").Result 
!Signature = doc.FormFields("wSignature").Result 
!AppDate = doc.FormFields("wAppDate").Result 
!e2011012028 = doc.FormFields("w2011012028").Result 
!e2011021725 = doc.FormFields("w2011021725").Result 
!e2011030311 = doc.FormFields("w2011030311").Result 
!e2011031625 = doc.FormFields("w2011031625").Result 
!e20110203 = doc.FormFields("w20110203").Result 
!e20110211 = doc.FormFields("w20110211").Result 
!e20110322 = doc.FormFields("w20110322").Result 
!e20110330 = doc.FormFields("w20110330").Result 
.Update 
.Close 
End With 
doc.Close 
If blnQuitWord Then appWord.Quit 
cnn.Close 
MsgBox "Application Imported!" 

Cleanup: 
' Set rst = Nothing 
' Set cnn = Nothing 
Set doc = Nothing 
Set appWord = Nothing 

Next 
Else 
    MsgBox "You clicked Cancel in the file dialog box." 
End If 
End With 
End Sub 
#

Я пытался возиться с me.tables и мне формы и .Добавьте и т.д. и т.д. - очевидно, Я здесь полный новичок!

Я хочу, чтобы иметь возможность импортировать данные из полей формы в Word Doc в таблицу MS Access (что мне удалось сделать с первым URL в моем исходном сообщении выше); путем выбора документа Word из диалогового окна «Открыть/Выбрать», вместо того, чтобы вручную вводить имена каждого документа Word.

Приносим извинения, если это звучит очевидным или простым - доступ не является моей сильной стороной любым способом!

+0

Можете ли вы дать нам шаг за шагом, что вы делаете? Кроме того, насколько вам комфортно с VB & VBA? Я спрашиваю, потому что решение, вероятно, потребует его скромного количества. – PowerUser

+0

Итак, ваш вопрос о настройке диалога? Что бы вы хотели быть другим? – Asaf

+0

Спасибо за все ваши быстрые ответы! –

ответ

1

Прежде чем я начну, я не понял, почему у вас так много несанкционированных строк (строки beginnig mit ') в вашем примере кода. Я предполагаю, что большинство из этих строк, как правило, не будут раскомментированы и будут частью рабочего кода. Или есть артефакты редактора переполнения стека?

Я вижу несколько проблем, которые могут привести вас к решению.

1) При использовании

With fDialog 

вы позволите это «открытым» до конца кода (даже с использованием второго С между ними). Я бы порекомендовал вам установить соответствующий «End With» сразу после того, как вы его больше не требуете. Remeber (или принять к сведению):

With fDialog 
    [... something] 
    ' Set the title of the dialog box. 
    .Title = "Select One or More Files" 

действительно просто сокращение для

fDialog.Title 

(т.е. «голый» означает, что он должен быть appendend к объекту в с.) так что вы можете полностью избавиться от «С».В вас примере я бы установить "End With" прямо перед

If .Show = True Then 

, а затем использовать

If fDialog.Show = True Then 

2) Я установил бы

Set appWord = GetObject(, "Word.Application") 

вне вашего для каждого цикла (не забудьте взять Set appWord = Nothing вне цикла, а также). Помните, что с GetObject вам нужно Runnig Word-экземпляр, в противном случае вы можете захотеть использовать

Set appWord = CreateObject("Word.Application") 

или иметь его в обоих направлениях, попытаться получить Word-объект, и если он не доступен (например, Err. Number = 429) создать новый.

On Error Resume Next 
Set appWord = GetObject(, "Word.Application") 

If Err.Number = 429 Then 
    Set appWord = CreateObject("Word.Application") 
End If 
On Error GoTo 0 

3) При работе или, по крайней мере, в то время как developping с помощью автоматизации Я всегда установлен

objword.Visible = True 

так что вы видите сообщения об ошибках или другие проблемы, прямо внутри Word.

НТН для последующих шагов (в случае, если у вас есть эта проблема больше) Andreas

Смежные вопросы