2012-11-01 4 views
2

우리는 Access 내에서 편지 병합 프로세스를 자동화하려고 시도하고 있습니다. 버튼을 클릭하면 현재 데이터베이스를 지정하는 VBA가 실행됩니다) 데이터 소스로 아래 코드 당 SQL을 실행합니다Access/Word 2010 VBA 편지 병합은 ACCDB 원본 대신 [Foldername] .mdb를 엽니 다.

'Set up Word 
Dim objWord As Object 
Set objWord = CreateObject("Word.Application") 

'Make visible, open specified doc to merge 
With objWord 
    .Visible = True 
    .Documents.Open strDocName 
End With 

'Set the data source path 
Dim docPath As String 
docPath = CurrentProject.Path & "\" & CurrentProject.Name 

'Open the merge data source - simplified 
objWord.activedocument.mailmerge.opendatasource _ 
    Name:=docPath, _ 
    SQLStatement:=strSQL 

strDocName 및 STRSQL이 전달 유효한 기능적인 내용을 포함하고 있습니다.

단어를 여는 데 성공하여 단어를 표시하고 병합 할 서식 파일을 엽니 다. 그러나이 시점에서 데이터 소스를 확인하라는 메시지가 나타나고 가능한 데이터 소스 목록이 표시됩니다. '모두 표시'확인란을 클릭하면 ODBC (.mdb, .accdb)를 통해 MS Access 데이터베이스로 스크롤하고 목록에서 선택할 수 있습니다.

그 다음 말을, 'ODBC Access 드라이버 로그인 실패'라는 제목의 상자 선물 '파일 찾을 수 없습니다 "[데이터베이스 폴더 경로] .MDB/[포함 된 폴더의 이름]"'그래서

, 내 데이터베이스가 C : \ Temp에있는 경우 오류 경로는 'C : \ Temp.mdb'를 읽습니다. 액세스 데이터베이스를 다른 폴더로 이동하면 오류 경로가 업데이트되어 포함 폴더에 따라 적절하게 명명 된 mdb 파일을 찾습니다.

관련성이 있는지는 잘 모르겠지만 템플릿에서 새 문서를 생성하는 대신 템플릿 자체를 편집하는 모드로 템플릿을 여는 것처럼 보입니다.

여기에 뭔가가 누락되었거나 누구에게 아이디어가 있습니까?

건배 Remou의 도움으로


아래, 우리는 액세스에 직접 연결 포기하고 거기에서 병합, 임시 텍스트 파일로 출력 Remou의 제안 링크의 코드를 사용했다.

우리는() CurrentBackendPath를 제거하는 코드를 수정하고 다음과 같이이 기능에 대한 유일한 참조를 변경 : 우리가 사용

Private Function GetStartDirectory() As String 
    'GetStartDirectory = CurrentBackendPath() & "mm\" 
    GetStartDirectory = CurrentProject.Path & "\mm\" 
End Function 

유일한 다른 수정은 우리의 목적을 구체적으로 코드를 변경했다. 답장을 보내 주셔서 다시 한 번 감사드립니다. 나는 그렇게하기에 충분한 평판이 있다면 그들의 반응에 대해 레 모우를 상대로 줄을! 것이다!

+0

MSDN (http://msdn.microsoft.com/en-us/library/office/ff841005.aspx)에 따르면, "Open Database Connectivity (ODBC), 연결 문자열 지정 * "연결 문자열 대신 파일 경로를 제공하는 것 같습니다. – HansUp

+0

Re : templates - Open 메서드를 사용하면 기존 문서 (이 경우 템플릿)가 열립니다. 새 문서를 만들려면 Documents.Add를 사용하고 첫 번째 인수로 템플릿의 경로를 전달합니다. Documents.Add가 새로 생성 된 문서에 대한 참조를 반환한다는 것을 명심하십시오. –

+0

@HansUp 당신은 옳은 것처럼 보입니다 - 나는 이것을 시도하고 해결하기 위해 아래 Remou의 답변을 따라갈 것입니다. 당신의 응답을 주셔서 감사합니다! – WaideWalker

답변

1

아니요,은 (는) MS 액세스 파일에 링크 할 것을 강력히 권합니다. 필요한 데이터를 텍스트 파일로 출력하고 거기에 링크하십시오. Access에 연결하는 것은 수동으로 제어되는 메일 병합을위한 모든 것이 잘되지만, 자동화하고자 할 때 극단적으로 지루해집니다. 당신이 있음을 의미하며, http://www.tek-tips.com/faqs.cfm?fid=5088

을 읽을 매크로를 기록 할 수있다, 나는 다음과 같은 얻을 :

ActiveDocument.MailMerge.OpenDataSource Name:="Z:\Docs\Test.accdb", _ 
    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=Z:\Docs\Test.accdb;Mode=Read;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk" _ 
    , SQLStatement:="SELECT * FROM `Table1`", SQLStatement1:="", SubType:= _ 
    wdMergeSubTypeAccess 

위의 대부분은 불필요하지만, 당신이 연결 문자열을 포함 것을 볼 수 있습니다. 이전 버전에서는 그렇지 않았습니다. 다음을 통해 얻을 수 있습니다 :

With objWord.ActiveDocument.MailMerge 
    .OpenDataSource Name:="Z:\Docs\Test.accdb", _ 
     ConfirmConversions:=False, LinkToSource:=True, _ 
     Connection:= _ 
     "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Z:\Docs\Test.accdb;" _ 
     , SQLStatement:="SELECT * FROM `Table1`" 
End With 
+0

답장을 보내 주셔서 감사합니다. 오늘 오후에 답변을 드리겠습니다. 그러면 어떻게되는지 알려 드리겠습니다. – WaideWalker

+0

안녕하세요 레무, 오늘 오후에 제안과 함께 놀았습니다. 둘 다 변수와 하드 라이팅 값으로 차이가 나는지 확인해보십시오. 아직 문제에 영향을 미치지는 못했지만 데이터 소스를 찾을 수 없다고 주장합니다. 월요일 아침에이 문제를 다시 논의하고 진행 상황을 알려 드리겠습니다. 도움을 주셔서 다시 한 번 감사드립니다. – WaideWalker

+0

Word에서 매크로 기록을 시도 했습니까? – Fionnuala