PDA

View Full Version : در مورد چاپ نامه در vb



jannati
چهارشنبه 04 تیر 1382, 09:59 صبح
دوستان عزیز
من میخواهم یک نامه در vb بنویسم که متنش ثابته اما چیزهایی مثل نام و...متغییر است.میخوام این متغییرها از یک فرم به آن ارسال بشه و نامه قابل چاپ باشه .

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

با تشکر

جنتی :cry:

MBeigy
پنج شنبه 05 تیر 1382, 07:59 صبح
سلام
فکر میکنم ساده ترین راه برای این کار این باشد که شما ابتدا یک فایل Template در داخل word بسازید و متغیرهای خود را در آن قرار دهید و سپس از Microsoft Word در داخل برنامه تان Reference بگیرید. بعد هم با قرار دادن textbox های برنامه در متغیرهای فایل ‏Template از آن پرینت بگیرید. امیدوارم متوجه شده باشید چون من کد کامل ندارم ولی اگر متوجه نشدید بنویسید بالاخره پیدا میشه کرد.

MBeigy
جمعه 06 تیر 1382, 08:05 صبح
با سلام مجدد
یکبار امتحان کردم دیدم زیاد مشکل نیست فقط ریزه کاری داره. فکر کردم ممکنه بدرد دیگر دوستان هم بخوره بنابراین گفتم بطور کامل توضیحش بدم.
برای ساختن یک فایل 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()
Set wd = New Word.Application
Set wdDoc = New Word.Document
wd.Visible = True
Set wdDoc = wd.Documents.Add("C:\MyTemplate.dot")
wdDoc.FormFields("MyTextField").Range = txtMyTextField.Text
wdDoc.PrintPreview
'wd.PrintOut
End Sub

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

A.Noor
شنبه 07 تیر 1382, 09:36 صبح
با سلام

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

MMR_1344
چهارشنبه 09 اسفند 1385, 08:10 صبح
سلام اگر بخواهیم برای اکسل اینکار را انجام دهیم ممکن است

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