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

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 قرار بدهند . توجه شود علامت سیمی کالن(; ) از آخر کدها حذف شود.
سلام و وقت به خیر استاد بهرامی عزیز
منم ممنونم ازتون بابت این نمونه عالی و آموزش خوبتون فقط چند تکته وجود داره و یه سوال که میخواستم از خدمتتون بپرسم
نکته اول اینکه لینک آدرسی که تو این تاپیک قرار دادید درست نبود لطف کنید اصلاح کنید تا علاقمندان مستقیم به این گفتگو هدایت بشن
نکته دوم دکمه فیلتر و آن فیلتر در هر دو حالت یه نتیجه داره برای برداشتن فیلتر کدش را اصلاخ بفرمایید
نکته سوم بولد و رنگی شدن عنوان ستونهای اکسل را چطور بوجود آوردید خیلی جالب بود؟

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