2016-07-25 1 views
0

J'ai créé une base de données client. Dans la base de données, chacun des clients est regroupé par un identifiant d'entreprise unique. L'utilisateur peut rechercher tous les clients de l'entreprise en entrant un identifiant d'entreprise dans la cellule suivante du formulaire principal. En ce moment je veux faire du publipostage du sous-formulaire au mot après en cliquant sur un bouton sur le formulaire principal.Je dois créer un bouton pour faire du publipostage à partir du sous-formulaire Access à Word

J'ai eu quelques idées à partir du lien suivant: Access and Word 2010 merging one record depending on subform button clicked

Problème: Lorsque je tente d'exécuter le code, il montre courir erreur de temps « 4198 »: Échec de la commande.

Quand je lance cette commande déboguer le a été souligné

.OpenDataSource Name:=sData, SQLStatement:=strSQL 

Quelqu'un peut-il me dire comment corriger l'erreur?

Private Sub Command203_Click() 

Dim mDoc As String 
Dim strSQL As String 

mDoc = "C:\~~~\800052 ENG w Macro titus.docx" 
strSQL = "SELECT * FROM![frmNavigationForm]![frmKYCGenerator] WHERE [RS ID]=" & [Forms]![frmNavigationForm]![Text78] 

Dim oApp As New Word.Application 
Dim oMainDoc As Word.Document 
Dim sData As String 

    oApp.Visible = True 
     Data = "C:\~~~\Database - Users - PR.accdb" 

    Set oMainDoc = oApp.Documents.Open(mDoc) 

     With oMainDoc.MailMerge 
     .MainDocumentType = wdFormLetters 
     .OpenDataSource Name:=sData, SQLStatement:=strSQL 
     End With 

    With oMainDoc 
     .MailMerge.Destination = wdSendToNewDocument 
     .MailMerge.Execute 
    End With 

    oApp.Activate 
    oApp.Documents.Parent.Visible = True 
    oApp.Application.WindowState = 1 
    oApp.ActiveWindow.WindowState = 1 

Set oApp = Nothing 
Set oMainDoc = Nothing 

Exit Sub 

Err_Handle: 
    Set oApp = Nothing 
    Set oMainDoc = Nothing 
     MsgBox "An error occurred..." & vbCrLf & vbCrLf & Err.Description 
End Sub 
+0

Vous devez ajouter une option 'Explicit' en haut de votre code. Il est plus facile de trouver des fautes de frappe difficiles à trouver comme sData/Data – dbmitch

Répondre

0

Le nom de votre source de données est peut-être vide. Je pense que:

Data = "C:\~~~\Database - Users - PR.accdb" 

devrait être:

sData = "C:\~~~\Database - Users - PR.accdb" 
+0

bonne prise. Je le répare déjà, donc je ne pense pas que ce soit le problème. – Raymundo21

0

Ajouter un Option Explicit en haut de votre code de module.

qui trouverait le problème identifié par @peter et toute autre non déclarées ou variables d'erreur typo

Il semble aussi que vous avez fusionné un nom de couple dans SQL Je suppose que vous savez ce que vous faites dans votre Instruction SQL - soit vous avez oublié le nom de la table - soit vous utilisez la requête/table définie par [frmNavigationForm]![frmKYCGenerator]

Parce que vous ne mentionnez aucun nom de table, je suppose que ce dernier. Dans ce cas ...

Modifier cette

strSQL = "SELECT * FROM![frmNavigationForm]![frmKYCGenerator] WHERE [RS ID]=" & [Forms]![frmNavigationForm]![Text78] 

Pour ce

strSQL = "SELECT * FROM [" & [Forms]![frmNavigationForm]![frmKYCGenerator] & "] WHERE [RS ID]=" & [Forms]![frmNavigationForm]![Text78] 
+0

Merci pour l'aide et de me corriger. [frmNavigationForm] est le formulaire principal et [frmKYCGenerator] est le sous-formulaire. J'ai donc changé la déclaration à la place suivante. strSQL = "SELECT * FROM [Formulaire]! [FrmNavigationForm] WHERE [RS ID] =" & [Formulaires]! [FrmNavigationForm]! [Text78] Mais maintenant la base de données me dit "odbc Microsoft Access Driver Login a échoué "et n'a pas pu trouver le fichier suivant. "C: \ ~~~ \ Database - Users - PR.mdb" Savez-vous pourquoi il ne reconnaît pas le format de fichier currect (.accdb)? – Raymundo21

+0

Changez votre code ci-dessus pour montrer ce que nous traitons actuellement. Et pour vos propres besoins de débogage, vous devriez utiliser 'Debug.Print' ou 'Msgbox' pour vous montrer ce qui est passé à' .OpenDataSource' – dbmitch

+0

Quel est le nom de la table Access à laquelle vous essayez d'obtenir des données? Vous ne pouvez pas exécuter une requête SQL sur un nom de formulaire. – dbmitch