# Native Code > برنامه نویسی در 6 VB >  در مورد چاپ نامه در vb

## jannati

دوستان عزیز 
من میخواهم یک نامه در vb بنویسم که متنش ثابته اما چیزهایی مثل نام و...متغییر است.میخوام این متغییرها از یک فرم به آن ارسال بشه و نامه قابل چاپ باشه .

اگه ممکنه راه حلهای پیشنهادی را بگید

با تشکر 

جنتی :cry:

----------


## MBeigy

سلام 
فکر میکنم ساده ترین راه برای این کار این باشد که شما ابتدا یک فایل Template در داخل word بسازید و متغیرهای خود را در آن قرار دهید و سپس از Microsoft Word در داخل برنامه تان Reference بگیرید. بعد هم با قرار دادن textbox های برنامه در متغیرهای فایل ‏Template از آن پرینت بگیرید. امیدوارم متوجه شده باشید چون من کد کامل ندارم ولی اگر متوجه نشدید بنویسید بالاخره پیدا میشه کرد.

----------


## MBeigy

با سلام مجدد
یکبار امتحان کردم دیدم زیاد مشکل نیست فقط ریزه کاری داره.  فکر کردم ممکنه بدرد دیگر دوستان هم بخوره بنابراین گفتم بطور کامل توضیحش بدم.
برای ساختن یک فایل template :
1- ورد را باز کنید.
2- از منوی فایل گزینه new را انتخاب کنید.
3- از پنجره باز شده به General tab رفته پس از انتخاب blank document در قسمت create new ، template را انتخاب کنیدو سپس ok.
4- بر یک جای خالی از منوی بالا راست کلیک کنید و گزینه forms را انتخاب کنید.
5- شروع به تایپ متن خود کنید و هر کجا متغیری لازم شد از نوار ابزار ایجاد شده text form field را انتخاب کنید و سپس به تایپ ادامه دهید.
6- در انتها بر روی متغیرهایی که در متن ایجاد کردید راست کلیک کرده و properties  را انتخاب کنید و برای آنها نام مناسب انتخاب کنید و ... ما یکی با نام MyTextField می‌سازیم.
7- فایل رابا نام MyTemplate ، save کنید.
حالا می‌توانید از درون یک برنامه VB از این فایل استفاده کنید و مقدار متغیرها را وارد کرده و پرینت بگیرید. برای اینکار به ترتیب زیر عمل کنید.
1- بعد از باز کردن یک پروژه استاندارد از word ، reference بگیرید.یعنی از منوی project ، گزینه references را انتخاب و از آنجا microsoft word x را چک بزنید و ok .
2- حالا به تعداد متغیرهایی که در فایل MyTemplate تعریف کردید text box روی فرم قرار دهید. فعلا یکی با نام txtMyTextField قرار می‌دهیم.
3- یک command button برای اجرای برنامه روی فرم بگذارید.
4- کد زیر را کپی و در قسمت general declaration فرم paste کنید.

Dim wd As Word.Application
Private wdDoc As Word.Document

Private Sub Command1_Click&#40;&#41;
Set wd = New Word.Application
Set wdDoc = New Word.Document
wd.Visible = True
Set wdDoc = wd.Documents.Add&#40;"C&#58;\MyTemplate.dot"&#41;
    wdDoc.FormFields&#40;"MyTextField"&#41;.Range = txtMyTextField.Text
wdDoc.PrintPreview
'wd.PrintOut
End Sub

Private Sub Form_QueryUnload&#40;Cancel As Integer, UnloadMode As Integer&#41;
wd.Quit False
Set wd = Nothing
Set wdDoc = Nothing
End Sub
حالا می‌توانید برنامه را اجرا کنید.
اگر می‌خواهید مستقیما پرینت بگیرید باید خط wd.printout را از حالت comment خارج کنید.
البته می‌توانید بعد از آنکه کارایی برنامه را دیدید کدهایی را که باعث دیده شدن word هستند حذف کنید و کاربر اصلا متوجه استفاده از ورد نشود.

----------


## A.Noor

با سلام

از ParameterField  در کریستال ریپورت هم می توانید استفاده کنید

----------


## MMR_1344

سلام اگر بخواهیم برای اکسل اینکار را انجام دهیم ممکن است

----------


## vb341

بهترین و راحتریت کار استفاده از کریستال ریپورت هست . متن نامه رو آماده تو کریستال بزار و جاهای خالی رو از فرم مورد نظر مقدار بهش بده
cr9.textx.settext a
که a  میتونه یه متغیر باشه که مقدار یک تکست باکس یا هر چیز دیگه رو از تو فرمتون بخونه و در جای مورد نظرکریستال که در اینجا text9  هست قرار بده و یا مستقیما بنویسی : cr9.text9.settext form1.text1

----------

