2016-09-12 4 views
0

Word 2013, SQL Server 2014 .ini 파일과 Excel 파일을 사용하여 많은 데이터 집합에서 하나의 인증서를 생성하는 라이센스 응용 프로그램 용으로 만들어진 Word 편지 병합 템플릿이 있습니다.VBA를 사용하여 Word 편지 병합의 .OpenDataSource를 한 레코드에만 제한 할 수 있습니까?

Word 템플릿 작업을 직접 만들고 싶습니다. .udl 파일을 연결하여 데이터베이스에 연결했지만 모든 테이블을 제공 한 다음 하나만 선택하면 하나만 필요할 때마다 해당 테이블의 각 행에 대한 문서가 제공됩니다.

내가 요청한 특정 테이블과 특정 행 (license_id) 만 사용하도록 템플릿의 문서를 제한/필터링 할 수 있습니까? 내가 어떻게 알았다면 나는 아래의 코드를 연결할 것

Sub AutoNew() 

'THIS RETURNS ALL ROWS AFTER I PICK A TABLE 
With ThisDocument.MailMerge 
    .OpenDataSource Name:="C:\Users\or0146575\Desktop\xxx.udl" 
    .Execute 
End With 

End Sub 

은 1 개 행을 반환합니다.

Dim sql As String 

sql = "SELECT full_name, BigLicenseType, LicNosDisplay, expiration_date FROM OpCerts WHERE person_id= 30012" 
+1

해당 ID를 가진 레코드가 두 개 이상 있어야합니다. 'Select Top 1 '을 사용하여 언제든지 첫 번째 레코드 만 다시 가져올 수 있습니다. – dbmitch

+0

감사합니다 dbmitch,하지만 여전히 T - SQL .OpenDataSource 유선 얻을 수 없습니다. 솔루션에 대한 지침을 변경했습니다. 제 답변을 참조하십시오. – JustJohn

답변

0

나는 완전히 다른 길을 택하기로 결심했다.

.udl 또는 .odc와 같은 데이터 소스 파일을 사용하면 모든 레코드를 다시 가져와 런타임에 테이블을 선택해야하며 SQL을 작동시킬 수 없습니다.

이전 ADODB (Microsoft ActiveX 데이터 개체 2.5 라이브러리의 도구> 참조)와 연결하기로 결정하고 mailmerge 필드 또는 DOCVARIABLE 필드 또는 책갈피에 값을 할당하기로했습니다. 하나의 레코드에 대해서만 mailmerge를 사용하는 것은 의미가 없습니다. 나는 이것이 누군가를 돕기를 바랍니다.

Sub AutoNew() 

Dim strWhat As String 

strWhat = InputBox("Enter License ID", "OpCert Wall Certificate") 


Dim conn As ADODB.Connection 
Dim cmd As ADODB.Command 
Set conn = New ADODB.Connection 
conn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=DWS_Licenses;Data Source=WPDHSCLR16C" 

conn.Open 

Set cmd = New ADODB.Command 
cmd.ActiveConnection = conn 
cmd.CommandText = "SELECT full_name, BigLicenseType, LicNosDisplay, expiration_date FROM OpCerts WHERE person_id=" & CInt(strWhat) 


Dim rs As ADODB.Recordset 
Set rs = cmd.Execute() 'Execute stored procedure. 

'THIS WILL BE CHANGED TO BOOKMARK(S) PROBABLY IF DOCVARIABLES DOESN'T WORK 
ActiveDocument.Variables("expiration_date").Value = rs(3) 
'PUT full_name, BigLicenseType, LicNosDisplay TAGS HERE 

rs.Close 
Set rs = Nothing 

Set cmd = Nothing 
conn.Close 
Set conn = Nothing 

End Sub