PDA

View Full Version : سوال: چاپ گزارش از محیط Word



dadsara
چهارشنبه 16 اردیبهشت 1388, 10:32 صبح
سلام
من یک برنامه دارم که خروجی های مختلفی دارد ولی باتوجه به امکانات محدود ریپورت در اکسس می خواهم گزارشات خود را در محیط Word نمایش داده ، ذخیره کنم و . . .
من برای یک گزارش اینکار را به کمک دوستان انجام داده ام و در حال حاضر نیز در حال استفاده می باشد ولی خواسته ام این است که اگر بخواهم تعداد کلیدها ( اجرای گزارش ) موجود روی فرم بیش از یکی باشد باید به چه ترتیب عمل کنم که مجددا کدهای مربوطه را ننویسم
- نمونه کار خود را ضمیمه می کنم تا دوستان که تمایل دارند از این نمونه استفاده کنند

مهدی قربانی
جمعه 18 اردیبهشت 1388, 22:32 عصر
سلام
برای اینکه بخواین از ماجول موجود برای گزارشات متعدد استفاده کنید باید ماجول شما دارای آرگومانهایی باشه که کار این آرگومانها دریافت نام جدول مرجع و نام فیلدهای مورد نیاز باشه و اونوقت شما در زمان کلیک کافیه که فانکشن رو به همراه آرگومانهای مربوطه اجرا کنید . در حال حاضر ماجول مورد استفاده شما مختص به یک جدول و فیلدهای ثابت هست که با این ساختار نمی تونه خواسته شما رو برآورده کنه .

dadsara
شنبه 19 اردیبهشت 1388, 08:46 صبح
سلام
ضمن تشکر از جنابعالی ، من همین فرمایش شما را قدم به قدم انجام دادم موفق شدم نام فایل ورد خود را هربار عوض کنم ولی آنجائیکه نام کوئری دریافت می شود موفق نشدم
من عملیات خود را به این شکل انجام دادم:
1- یک متغیر از نوع QueryDefs ایجاد نمودم
2- در رخداد کلید مربوطه کوئری خود را به متغیر فوق پاس نمودم
3- در ماژول مربوطه متغیر خود را صدا زدوم
در هنگام اجرا وقتی به مرحله سوم رسیدم برنامه با ارور مواجه می شود
لطفا بفرمائید اشکال من کجاست

مهدی قربانی
شنبه 19 اردیبهشت 1388, 10:47 صبح
سلام
مي تونيد ماجولي كه نوشتيد اينجا بذاريد .

dadsara
شنبه 19 اردیبهشت 1388, 13:22 عصر
سلام
مجددا بخاطر حسن توجه جنابعالی متشکرم

Option Compare Database
Dim WordName As String
Dim QName As QueryDefs
Option Explicit
Private Sub Command24_Click()
WordName = "13.doc"
QName = "Q_1"
Call PopulateBookmarks
End Sub
Public Sub PopulateBookmarks()
Dim sPathName As String
Dim sDocName As String
On Error GoTo Err_Proc:
Set db = CurrentDb()
Set WordApp = New Word.Application
WordApp.Visible = True ' make word visible
DoCmd.Hourglass True
sPathName = GetCurrentPathName
'sDocName = QUOTE & sPathName & "13.Doc" & QUOTE
sDocName = QUOTE & sPathName & WordName & QUOTE
Set WordDoc = WordApp.Documents.Add(sDocName)
Set qdDAO = QName
qdDAO.Parameters![PleasId] = Me.ID
Set rsDAO = qdDAO.OpenRecordset

WordDoc.FormFields("Name").Result = rsDAO!F_Name
WordDoc.FormFields("L_Name").Result = rsDAO!L_Name
WordDoc.FormFields("FullName").Result = rsDAO!F_Name & " " & rsDAO!L_Name
WordDoc.FormFields("Fa_Name").Result = rsDAO!Fa_Name
WordDoc.FormFields("Meli").Result = rsDAO!Meli
WordDoc.FormFields("Date_Birt").Result = rsDAO!Date_Birt
WordDoc.FormFields("Bimeh").Result = rsDAO!Bimeh



Set WordDoc = Nothing

MsgBox "ãÊä ãæÑÏ äÙÑ ÈÇ ãæÝÞíÊ ÓÇÎÊå ÔÏ", vbOKOnly, "ãæÝÞ"
Exit_Proc:
DoCmd.Hourglass False
Exit Sub
Err_Proc:
Select Case Err.Number
Case 4605
Resume Next
Case Else
MsgBox Err.Number & "-" & Err.Description
Resume Exit_Proc
End Select
Exit Sub

End Sub
در کد بالا زمانی که به
QName = "Q_1"
می رسیم خطا ظاهر می گردد

مهدی قربانی
شنبه 19 اردیبهشت 1388, 15:23 عصر
سلام
شما در زمان Set كردن QueryDef از شكل صحيح دستور استفاده نكرديد ، وقتي متغيير QueryDefs تعريف كرديد بعد در مرحله بعدي بايد اين متغيير رو Set كنيد شما نام كوئري Q_1‌ به اين متغير مقدار دهي كرديد در حاليكه اول بايد متغيير رو ست كنيد و در آرگومانهاي مربوطه كه يكي از اونها مربوط به نام كوئري هست مي تونيد متغيير حاوي نام كوئري كه بايد جداگانه تعريف و مقدار دهي شده باشه رو قرار بديد
ضمناً من در اصلاحيه كدهاي شما در ماجول مربوط به متغيرهاي سراسري يك متغير جديد تحت عنوان QryName اضافه كردم شما اين دو ماجول رو با ماجولهاي خودتون مقايسه و قسمت هاي اصلاح شده رو ملاحظه بفرمائيد .
همچنين نيازي به تعريف متغيير QuryDefs هم نيست


Option Compare Database
Option Explicit

Public WordApp As Word.Application
Public WordDoc As Word.Document
Public db As DAO.Database
Public rsDAO As DAO.Recordset
Public rsDAO2 As DAO.Recordset
Public qdDAO As DAO.QueryDef
Public qdDAO2 As DAO.QueryDef
Public sCurDir As String
Public strTable As String
Public objTable As Word.Table
Public FileCounter As Integer
' متغيير مربوط به نام كوئري
Public QryName As String
Public Const QUOTE = """"

Option Compare Database
Dim WordName As String
Option Explicit
Private Sub Command24_Click()
WordName = "13.doc"
' مقداردهي متغير
QryName = "Q_1"
Call PopulateBookmarks
End Sub
Public Sub PopulateBookmarks()
Dim sPathName As String
Dim sDocName As String
'On Error GoTo Err_Proc:
Set db = CurrentDb()
Set WordApp = New Word.Application
WordApp.Visible = True ' make word visible
DoCmd.Hourglass True
sPathName = GetCurrentPathName
'sDocName = QUOTE & sPathName & "13.Doc" & QUOTE
sDocName = QUOTE & sPathName & WordName & QUOTE
Set WordDoc = WordApp.Documents.Add(sDocName)
' ست كردن متغيير با استفاده از متغير نام كوئري
Set qdDAO = db.QueryDefs(QryName)
qdDAO.Parameters![PleasId] = Me.ID
Set rsDAO = qdDAO.OpenRecordset

WordDoc.FormFields("Name").Result = rsDAO!F_Name
WordDoc.FormFields("L_Name").Result = rsDAO!L_Name
WordDoc.FormFields("Fa_Name").Result = rsDAO!Fa_Name
WordDoc.FormFields("Meli").Result = rsDAO!Meli
WordDoc.FormFields("Date_Birt").Result = rsDAO!Date_Birt
WordDoc.FormFields("Bimeh").Result = rsDAO!Bimeh



Set WordDoc = Nothing

MsgBox "ãÊä ãæÑÏ äÙÑ ÈÇ ãæÝÞíÊ ÓÇÎÊå ÔÏ", vbOKOnly, "ãæÝÞ"
Exit_Proc:
DoCmd.Hourglass False
Exit Sub
Err_Proc:
Select Case Err.Number
Case 4605
Resume Next
Case Else
MsgBox Err.Number & "-" & Err.Description
Resume Exit_Proc
End Select
Exit Sub

End Subنهايتاً پيشنهاد مي كنم براي آشنايي بيشتر با شيئ QueryDefs كتابخانه DAO و نحوه بكارگيري اون Help اكسس رو مطالعه كنيد

shahab_ss
شنبه 19 اردیبهشت 1388, 17:37 عصر
سلام ،

با اجازه شما از نمونه کدی که اینجا قرار دادین استفاده کردم،
اما یک مشکل وجود داره!

من یک فرم دارم که درون اون یک سابفرم هست که یک سری اطلاعات بصورت متوالی در اون (سابفرم) وجود داره.
چطور میشه یک سری اطلاعات رو به یک فایل word فرستاد که مثلا درون یک جدول قرار بگیره ؟

از راهنمایی شما متشکرم.

dadsara
یک شنبه 20 اردیبهشت 1388, 08:28 صبح
سلام ،

با اجازه شما از نمونه کدی که اینجا قرار دادین استفاده کردم،
اما یک مشکل وجود داره!

من یک فرم دارم که درون اون یک سابفرم هست که یک سری اطلاعات بصورت متوالی در اون (سابفرم) وجود داره.
چطور میشه یک سری اطلاعات رو به یک فایل word فرستاد که مثلا درون یک جدول قرار بگیره ؟

از راهنمایی شما متشکرم.
سلام دقیقا همون چیزی که می خواستی