PDA

View Full Version : آموزش: ارسال اطلاعات کلی یا فیلتر شده جداول یا کوئری به اکسل از طریق ساخت کوئری موقت



eb_1345
چهارشنبه 22 فروردین 1403, 22:11 عصر
ضمن سلام و تبریک عید سعید فطر و آرزوی قبولی طاعات و عبادات همه دوستان عزیز
پیرو سوال و درخواست یکی از دوستان در خصوص ارسال مشروط اطلاعات یک کوئری به اکسل امروز ایده ای برای این منظور به ذهنم رسید که تصمیم گرفتم برای استفاده دوستان آموزش آن را در اینجا قرار بدهم
ابتدا یک تابع برای ساخت کوئری موقت ایجاد می کنیم:


Sub CreateQry(sQryName As String, sSQL As String)
On Error Resume Next
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDb
With db
.QueryDefs.Delete (sQryName)
Set qdf = .CreateQueryDef(sQryName, sSQL) 'Create the query
End With
db.QueryDefs.Refresh
End Sub


در مرحله بعد کد اسکیوال کلی و بدون شرط آن کوئری ایکه میخواهیم اطلاعات آن را به اکسل ارسال کنیم در یک متغییر با نام LoadSql قرار میدهیم و آن را در رویداد Form_Load فرم درج می نمائیم . در همین رویداد آدرس فایل اکسل مربوطه نیز قرار میدهیم


Private Sub Form_Load()
strPath = CurrentProject.path & "\DataExcel.xlsx"
LoadSql = "SELECT Table2.Code_Perseneli, Table1.First_Name, Table1.Last_Name, Table2.Monthly_Salary, Table2.Working_Holidays, Table2.Overtime_Working" & _
" FROM Table2 LEFT JOIN Table1 ON Table2.Code_Perseneli = Table1.Code_Perseneli"
End Sub

همانطور که از کدهای اسکیوال مشاهده میشود کوئری مربوطه از رابطه دوجدول به نام های Table1 و Table2 تشکیل شده
در مرحله بعد در رویداد کلیک دکمه cmdFilter که برای فیلتر کردن اطلاعات فرم در نظر گرفته شده کدهای زیر که شامل کد فیلتر نمودن اطلاعات است رو قرار می کنیم:


Private Sub cmdFilter_Click()
If Len(Txtcode) = 0 And Len(TxtFirst_Name) = 0 And Len(TxtLast_Name) = 0 Then Exit Sub
CmdUnFilter.Visible = True
CmdUnFilter.SetFocus
cmdFilter.Visible = False
strFilter = ""
strFilter = "Table2.Code_Perseneli like '*" & Me.Txtcode & "*' AND Table1.First_Name like '*" & Me.TxtFirst_Name & "*' AND Table1.Last_Name like '*" & Me.TxtLast_Name & "*'"
Me.Filter = strFilter
Me.FilterOn = True
End Sub


در کدهای زیر نیز در کلیک کلید CmdUnFilterکه برای خارج نمودن اطلاعات از حالت فیلتر تعبیه شده کدهای زیر را وارد کرده ایم :


Private Sub CmdUnFilter_Click()
On Error Resume Next
Me.Filter = ""
Me.FilterOn = False
Me.Txtcode = Null
Me.TxtFirst_Name = Null
Me.TxtLast_Name = Null
Me.Requery
cmdFilter.Visible = True
cmdFilter.SetFocus
CmdUnFilter.Visible = False
End Sub

بر روی فرم کلید های CmdFilter و CmdUnFilter بر روی هم قرار گرفته اند که با ظاهر شدن یکی دیگری مخفی میشود
و در نهایت در رویداد کلید CmdExportToExcel که مربوط ارسال اطلاعات به اکسل است کدهای زیر رو وارد می کنیم :


Private Sub CmdExportToExcel_Click()
On Error Resume Next
Dim Sql As String
Dim StrWhere As String
StrWhere = " WHERE " & strFilter
If Len(Txtcode) > 0 Or Len(TxtFirst_Name) > 0 Or Len(TxtLast_Name) > 0 Then
Sql = LoadSql & StrWhere
Else
Sql = LoadSql
End If
CreateQry "Q1", Sql
DoCmd.OutputTo acOutputQuery, "Q1", "Excel Workbook (*.xlsx)", strPath, True, "", 0
End Sub

دوستانی که تمایل دارند این کدهای رو در برنامه خودشان پیاده کنن توجه داشته باشند برای استخراج کد کوئری طبق تصویر ضمیمه کوئری مربوطه رو در حالت دیزاین باز کنن و از قسمت SQL Vievکدها را کپی و در متغیر LoadSql قرار بدهند . توجه شود علامت سیمی کالن(; ) از آخر کدها حذف شود.

eb_1345
چهارشنبه 22 فروردین 1403, 23:51 عصر
یکی از مزیت های استفاده از کد .......DoCmd.OutputTo acOutputQuery برای ارسال اطلاعات به اکسل این است که اگر فیلدها دارای کپشن فارسی باشند در فایل اکسل کپشن فارسی برای عنوان ستون ها درج میشود.

eb_1345
پنج شنبه 23 فروردین 1403, 00:46 صبح
در پست اول فراموش کردم در مورد ساخت کوئری موقت توضیح مختصری بدهم
تابع CreateQry در واقع دارای دو پارامتر از نوع رشته میباشد . پارامتر اول برای دریافت نام کوئری ایکه قرار است ایجاد شود میباشد و پارامتر دوم برای کد اسکیوالی است که با توجه به آن کد کوئری مربوطه ساخته میشود .
در رویداد کلیک CmdExportToExcel ایتدا کدهای اسکیوال در دو حالت با شرط و بدون شرط در متغیر Sql قرار می گیرد و بعد تابع CreateQry بصورت CreateQry "Q1", Sql فراخوانی گردیده . با پاس دادن دو مقدار یا آرگومان Q1 و Sql به تابع فوق در واقع از تابع میخواهم با استفاده از کد اسکیوالی که در متغیر Sql درج شده کوئری را با نام Q1 ایجاد کن
در نمونه ضمیمه شده در رویداد CmdExportToExcel_Click قبل از ارسال اطلاعات ابتدا با توجه به کدهای اسکیوال (بصورت مشروط و یا غیر مشروط) که در متغییر Sql قرار گرفته یک کوئری موقت با نام Q1 ایجاد میشود و اطلاعات آن به فایل اکسل که آدرس آن وارد شده و در کنار برنامه میباشد فرستاده میشود .
بمنظور جلوگیری از شلوغی تعداد کوئری ها و در واقع جلوگیری از ابهام و سردرگمی کاربر در مورد کارکرد کوئری Q1 در رویداد Form_Unload این کوئری حذف میشود و فقط زمان ارسال اطلاعات ایجاد میشود .
منظور از عبارت مشروط یا غیر مشروط که در توضیحات به اون اشاره کرده ام این است که اگر اطلاعات کوئری رو فیلتر کنیم کدهای اسکیوال با عبارت WHERE و یا اگر همراه است که در اینجا اطلاعات با شرط یا شروطی که تعیین کرده ایم به اکسل ارسال میشود در غیر اینصورت اگر شرط خاصی در نظر نگرفته باشیم کل اطلاعات یکجا به فایل اکسل ارسال میشود .

atf1379
پنج شنبه 23 فروردین 1403, 13:31 عصر
سلام
درود بر شما استاد !
خیلی هم ممنون از آموزش مفیدتون
نمونه ای که ضمیمه کرده این خیلی بکار من اومد . من تا حالا موردی ندیده بودم که اطلاعات جدول یا کوئری رو در حالت فیلتر کردن اطلاعات به اکسل ارسال کند

mehdi_fiz
شنبه 25 فروردین 1403, 01:04 صبح
درود خدمت استاد بهرامی بابت آموزش جامع و کامل
انشاالله همیشه پیروز باشید.

abdoreza57
شنبه 25 فروردین 1403, 01:15 صبح
ضمن سلام و تبریک عید سعید فطر و آرزوی قبولی طاعات و عبادات همه دوستان عزیز
پیرو سوال و درخواست یکی از دوستان در خصوص ارسال مشروط اطلاعات یک کوئری به اکسل امروز ایده ای برای این منظور به ذهنم رسید که تصمیم گرفتم برای استفاده دوستان آموزش آن را در اینجا قرار بدهم
ابتدا یک تابع برای ساخت کوئری موقت ایجاد می کنیم:


Sub CreateQry(sQryName As String, sSQL As String)
On Error Resume Next
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Set db = CurrentDb
With db
.QueryDefs.Delete (sQryName)
Set qdf = .CreateQueryDef(sQryName, sSQL) 'Create the query
End With
db.QueryDefs.Refresh
End Sub


در مرحله بعد کد اسکیوال کلی و بدون شرط آن کوئری ایکه میخواهیم اطلاعات آن را به اکسل ارسال کنیم در یک متغییر با نام LoadSql قرار میدهیم و آن را در رویداد Form_Load فرم درج می نمائیم . در همین رویداد آدرس فایل اکسل مربوطه نیز قرار میدهیم


Private Sub Form_Load()
strPath = CurrentProject.path & "\DataExcel.xlsx"
LoadSql = "SELECT Table2.Code_Perseneli, Table1.First_Name, Table1.Last_Name, Table2.Monthly_Salary, Table2.Working_Holidays, Table2.Overtime_Working" & _
" FROM Table2 LEFT JOIN Table1 ON Table2.Code_Perseneli = Table1.Code_Perseneli"
End Sub

همانطور که از کدهای اسکیوال مشاهده میشود کوئری مربوطه از رابطه دوجدول به نام های Table1 و Table2 تشکیل شده
در مرحله بعد در رویداد کلیک دکمه cmdFilter که برای فیلتر کردن اطلاعات فرم در نظر گرفته شده کدهای زیر که شامل کد فیلتر نمودن اطلاعات است رو قرار می کنیم:


Private Sub cmdFilter_Click()
If Len(Txtcode) = 0 And Len(TxtFirst_Name) = 0 And Len(TxtLast_Name) = 0 Then Exit Sub
CmdUnFilter.Visible = True
CmdUnFilter.SetFocus
cmdFilter.Visible = False
strFilter = ""
strFilter = "Table2.Code_Perseneli like '*" & Me.Txtcode & "*' AND Table1.First_Name like '*" & Me.TxtFirst_Name & "*' AND Table1.Last_Name like '*" & Me.TxtLast_Name & "*'"
Me.Filter = strFilter
Me.FilterOn = True
End Sub


در کدهای زیر نیز در کلیک کلید CmdUnFilterکه برای خارج نمودن اطلاعات از حالت فیلتر تعبیه شده کدهای زیر را وارد کرده ایم :


Private Sub CmdUnFilter_Click()
On Error Resume Next
Me.Filter = ""
Me.FilterOn = False
Me.Txtcode = Null
Me.TxtFirst_Name = Null
Me.TxtLast_Name = Null
Me.Requery
cmdFilter.Visible = True
cmdFilter.SetFocus
CmdUnFilter.Visible = False
End Sub

بر روی فرم کلید های CmdFilter و CmdUnFilter بر روی هم قرار گرفته اند که با ظاهر شدن یکی دیگری مخفی میشود
و در نهایت در رویداد کلید CmdExportToExcel که مربوط ارسال اطلاعات به اکسل است کدهای زیر رو وارد می کنیم :


Private Sub CmdExportToExcel_Click()
On Error Resume Next
Dim Sql As String
Dim StrWhere As String
StrWhere = " WHERE " & strFilter
If Len(Txtcode) > 0 Or Len(TxtFirst_Name) > 0 Or Len(TxtLast_Name) > 0 Then
Sql = LoadSql & StrWhere
Else
Sql = LoadSql
End If
CreateQry "Q1", Sql
DoCmd.OutputTo acOutputQuery, "Q1", "Excel Workbook (*.xlsx)", strPath, True, "", 0
End Sub

دوستانی که تمایل دارند این کدهای رو در برنامه خودشان پیاده کنن توجه داشته باشند برای استخراج کد کوئری طبق تصویر ضمیمه کوئری مربوطه رو در حالت دیزاین باز کنن و از قسمت SQL Vievکدها را کپی و در متغیر LoadSql قرار بدهند . توجه شود علامت سیمی کالن(; ) از آخر کدها حذف شود.
سلام و وقت به خیر استاد بهرامی عزیز
منم ممنونم ازتون بابت این نمونه عالی و آموزش خوبتون فقط چند تکته وجود داره و یه سوال که میخواستم از خدمتتون بپرسم
نکته اول اینکه لینک آدرسی که تو این تاپیک (https://barnamenevis.org/showthread.php?580296-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D9%87-%D8%A7%DA%A9%D8%B3%D8%B3&p=2467473&viewfull=1#post2467473) قرار دادید درست نبود لطف کنید اصلاح کنید تا علاقمندان مستقیم به این گفتگو هدایت بشن
نکته دوم دکمه فیلتر و آن فیلتر در هر دو حالت یه نتیجه داره برای برداشتن فیلتر کدش را اصلاخ بفرمایید
نکته سوم بولد و رنگی شدن عنوان ستونهای اکسل را چطور بوجود آوردید خیلی جالب بود؟

و یه سوال چون خودم میخواستم از این روش استفاده کنم ساده ترین کدی که نتیجه کار شما را با ایجاد فایل اکسل کنار برنامه ایجاد کنه چی هست ؟ اینم لازمه کویری موقت ایجاد بشه یا نام کویری مورد نظر کافی هست ؟ در واقع من میخوام مثلا Query1 به فایل اکسل تبدیل بشه.
تو مرحله بعد میخوام شرط محدوده را برا Query1 تعریف کنم مثلا تو نمونه شما ردیف چند تا چند یا نمونه خودم محدوده دو تا تاریخ مطمینم اگه بشه این شرط را تو کویری بیارم و بعدش با این نمونه شکیل اکسل خروجی بده یه نمونه عالی از کار در میاد
نمونه هایی که تو تالار بود من تست کردم فایل اکسل کنار برنامه ساخته نمیشه و همچنین ارور میداد وقتی فایل بازه
خیلی ازتون ممنون میشم بازم مثل همیشه راهنمایی کنید

atf1379
شنبه 25 فروردین 1403, 02:23 صبح
نکته دوم دکمه فیلتر و آن فیلتر در هر دو حالت یه نتیجه داره برای برداشتن فیلتر کدش را اصلاخ بفرمایید

سلام
با اجازه جناب آقای بهرامی این مورد رو بنده پاسخ بدهم
بنده چون خودم این نمونه رو امتحان کردم دو دکمه CmdFilter و CmdUnFilter بدون هیچ مشکی درست کار می کنن . شما وقتی مثلا در تکست باکس جستجوی کد پرسنلی عدد 6 رو وارد می کنی و بر روی دکمه فیلتر کلیک کنی فرم کانتینیو فیلتر میشه و در همین حالت که دکمه CmdUnFilter ظاهر شده
کلیک کنی فرم از حالت فیلتر خارج شده و کلیه رکورد به نمایش در می آین.
حتی اگه در تکست باکس های جستجو هم حرف یا کلمه ای رو وارد نکنی باز هم عمل فیلتر و خروج از فیلتر رو انجام میده و این حالت هم همینطور باید باشه چون شما وقتی بدون وارد کردن حرف یا کلمه ای بر روی دکمه فیلتر کلیک می کنی یعنی اینکه شما همه رکورد ها رو فیلتر کرده ای .
با کلیک کردن بر روی دکمه های CmdFilter و CmdUnFilter به حالت روشن و خاموش شدن علامت فیلتر در سمت پائین فرم (NavigationButtons) توجه بفرما !

eb_1345
شنبه 25 فروردین 1403, 03:51 صبح
و یه سوال چون خودم میخواستم از این روش استفاده کنم ساده ترین کدی که نتیجه کار شما را با ایجاد فایل اکسل کنار برنامه ایجاد کنه چی هست ؟ اینم لازمه کویری موقت ایجاد بشه یا نام کویری مورد نظر کافی هست ؟ در واقع من میخوام مثلا Query1 به فایل اکسل تبدیل بشه.
تو مرحله بعد میخوام شرط محدوده را برا Query1 تعریف کنم مثلا تو نمونه شما ردیف چند تا چند یا نمونه خودم محدوده دو تا تاریخ مطمینم اگه بشه این شرط را تو کویری بیارم و بعدش با این نمونه شکیل اکسل خروجی بده یه نمونه عالی از کار در میاد
نمونه هایی که تو تالار بود من تست کردم فایل اکسل کنار برنامه ساخته نمیشه و همچنین ارور میداد وقتی فایل بازه


سلام
ساده ترین راه اینست که شرط یا شروط فیلتر رو مستقیما در حالت دیزاین در کوئری برای فیلدهای مربوطه وارد کنی و محدوده قابل فیلتر رو در یک فرم مشخص نمائید
در نمونه ضمیمه دیگه خبری از ایجاد کوئری موقت نیست . و فقط با یک خط کد زیر اطلاعات کوئری به فایل اکسلی که آدرس آن در کد درج شده ارسال میشود


DoCmd.OutputTo acOutputQuery, "Query1", "Excel Workbook (*.xlsx)", CurrentProject.Path & "\DataExcel.xlsx", True, "", 0

به نظرم همین حالت راحتتر و بدون دردسرتره
از همین نمونه الگو برداری کن !

eb_1345
شنبه 25 فروردین 1403, 14:47 عصر
تو مرحله بعد میخوام شرط محدوده را برا Query1 تعریف کنم مثلا تو نمونه خودم محدوده دو تا تاریخ مطمینم اگه بشه این شرط را تو کویری بیارم و بعدش با این نمونه شکیل اکسل خروجی بده یه نمونه عالی از کار در میاد

یک نمونه با تعیین محدود تاریخ تقدیم شما

mazoolagh
شنبه 25 فروردین 1403, 19:36 عصر
تشکر ویژه از جناب بهرامی عزیز بابت زحمت و وقتی که برای ساخت این آموزش سودمند متقبل شدین،
و توضیح مفصل و دقیق کدها و روش استفاده.

همچنین سعه صدر و حوصله در پاسخگویی.

atf1379
شنبه 25 فروردین 1403, 21:43 عصر
تشکر ویژه از جناب بهرامی عزیز بابت زحمت و وقتی که برای ساخت این آموزش سودمند متقبل شدین،
و توضیح مفصل و دقیق کدها و روش استفاده.

همچنین سعه صدر و حوصله در پاسخگویی.

سلام و درود فراوان
خداوند به شما دو استاد بزرگوار ( استاد mazoolagh (https://barnamenevis.org/member.php?9893-mazoolagh) و استاد eb_1345 (https://barnamenevis.org/member.php?424036-eb_1345) ) جزای خیر و سلامتی عطا فرماید که تالار اکسس رو با حضور موثر و مستمرتون فعال و پا بر جا نگه داشته این . فعال نگه داشتن تالار اکسس توسط شما عزیزان در حالیست که بیشتر تالارهای دیگر سایت برنامه نویس مدت هاست حالت تعطیلی بلند مدت به خودشون گرفته اند و آنچنان فعالیتی در آنها صورت نمی گیره . بعنوان نمونه اگر سری به تالار VB6 (https://barnamenevis.org/forumdisplay.php?43-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%AF%D8%B1-6-VB) بزنید مشاهده می کنین که تا چه اندازه فعالیت اعضاء در این تالار کم رمق گردیده است و اگر سوالی در این تالار پرسیده شود شاید مدت ها زمان سپری شود که پاسخی برای آن سوال ارائه شود .

abdoreza57
شنبه 25 فروردین 1403, 22:50 عصر
درسته دوست خوبم
بعضی وقتا کارا دلی هست یه وقت کاری برا کسی انجامش میدی اصلا موضوع مادی اون مد نظرت نیست فقط اون حس خوبی که بهت دست میده را با هیچ ملاک و معیار مادی عوضش نمیکنی .
اگه یه جستجوی ساده تو همین تالار خودمون بزنید وزنه دانش و آگاهی سنگین این دو عزیز و قبلها آقای پیروزمهر را در کمتر کسی میتونید پیدا کنید .
اینجاست که آدم نه بابت سواد و دانش بالاشون بلکه به خاطر نوع دیدگاه و نگرش شون بهشون غبطه میخوره
منم به نوبه خودم از این عزیزان تشکر میکنم و براشون از خدا بهترین ها را آرزو میکنم
یه وقتی اینجا دکمه تشکر فعال بود نمیدونم چی شد از سایت برداشتن اصلا دلم نیومد این همه خوبی را از کنارش رد شم و فقط جوابم را گرفته و برم

eb_1345
شنبه 25 فروردین 1403, 23:27 عصر
از ابراز لطف و محبت دوستان عزیز و بزرگوار بسیار ممنون و سپاسگزارم

abdoreza57
یک شنبه 26 فروردین 1403, 00:20 صبح
یک نمونه با تعیین محدود تاریخ تقدیم شما
بسیار ممنونم ازتون
و سوال آخر اینکه چون من از توابع آقای آرادی برای تاریخ شمسی استفاده میکردم
اگه بخوام پسوند نام فایل اکسل تازیخ روز باشه بفرمایید چطور اینو بهش اضافه کنم
هر چند تو ورزن جدید آفیس تاریخ شمسی بهش اضافه شده ولی اگه 2007 باشه مشکل ساز خواهد بود
واسه همین ترجیخ میدم این ماژول تو برنامه باشه
خدا نگهدار

eb_1345
یک شنبه 26 فروردین 1403, 20:29 عصر
بسیار ممنونم ازتون
و سوال آخر اینکه چون من از توابع آقای آرادی برای تاریخ شمسی استفاده میکردم
اگه بخوام پسوند نام فایل اکسل تازیخ روز باشه بفرمایید چطور اینو بهش اضافه کنم
هر چند تو ورزن جدید آفیس تاریخ شمسی بهش اضافه شده ولی اگه 2007 باشه مشکل ساز خواهد بود
واسه همین ترجیخ میدم این ماژول تو برنامه باشه
خدا نگهدار
سلام
از آنجائیکه از کلمه Shamsi در تاریخ شمسی ورژن های جدید اکسس و تابع تاریخ جناب آزادی استفاده شده ممکن است در هنگام فراخوانی تابع تاریخ شمسی جناب آزادی در ورژن های جدید اکسس خطای تکراری بودن تابع Shamsi صادر شود . بنابراین بهتر است در تابع تاریخ جناب آزادی کلمه ای دیگر جایگزین کلمه Shamsi شود مثلاً AzadiShamsi جایگزین Shamsi شود .
ضمناً در پوشه برنامتون پوشه ای با عنوان ExcelFiles جهت فایل های ایجاد شده اکسل ایجاد کن!
پس از انجام دو کار فوق حالا از کدهای زیر برای ارسال اطلاعات به اکسل استفاده کن !


Dim strpath As String
Dim strFileName As String
strpath = Access.CurrentProject.path & "\ExcelFiles\"
If Len(Dir$(strpath, vbDirectory)) = 0 Then
MsgBox "پوشه فایل اکسل در مسیر برنامه موجود نمی باشد.", vbOKOnly + vbExclamation, "خطا"
Exit Sub
End If
strFileName = Azadishamsi & ".xlsx"
DoCmd.OutputTo acOutputQuery, "Query1", "Excel Workbook (*.xlsx)", strpath & strFileName, True

Nader700
یک شنبه 26 فروردین 1403, 22:00 عصر
سلام
از آنجائیکه از کلمه Shamsi در تاریخ شمسی ورژن های جدید اکسس و تابع تاریخ جناب آزادی استفاده شده ممکن است در هنگام فراخوانی تابع تاریخ شمسی جناب آزادی در ورژن های جدید اکسس خطای تکراری بودن تابع Shamsi صادر شود . بنابراین بهتر است در تابع تاریخ جناب آزادی کلمه ای دیگر جایگزین کلمه Shamsi شود مثلاً AzadiShamsi جایگزین Shamsi شود .
ضمناً در پوشه برنامتون پوشه ای با عنوان ExcelFiles جهت فایل های ایجاد شده اکسل ایجاد کن!
پس از انجام دو کار فوق حالا از کدهای زیر برای ارسال اطلاعات به اکسل استفاده کن !


Dim strpath As String
Dim strFileName As String
strpath = Access.CurrentProject.path & "\ExcelFiles\"
If Len(Dir$(strpath, vbDirectory)) = 0 Then
MsgBox "پوشه فایل اکسل در مسیر برنامه موجود نمی باشد.", vbOKOnly + vbExclamation, "خطا"
Exit Sub
End If
strFileName = Azadishamsi & ".xlsx"
DoCmd.OutputTo acOutputQuery, "Query1", "Excel Workbook (*.xlsx)", strpath & strFileName, True


استاد بهرامی عزیز خدا خیرتون بده
خیلی ممنون و سپاسگزارم
موفق باشید .

abdoreza57
یک شنبه 26 فروردین 1403, 23:26 عصر
بسیار ممنونم ازتون بعید بسیار عالی و مفید بود امیدوارم دوستان از این نمونه بتونن ایده بگیرن که واقعا بهترین نوع گزارش تو اکسل هست

abdoreza57
یک شنبه 26 فروردین 1403, 23:32 عصر
بسیار ممنونم ازتون بعید بسیار عالی و مفید بود امیدوارم دوستان از این نمونه بتونن ایده بگیرن که واقعا بهترین نوع گزارش تو اکسل هست