نمایش نتایج 1 تا 18 از 18

نام تاپیک: ارسال اطلاعات کلی یا فیلتر شده جداول یا کوئری به اکسل از طریق ساخت کوئری موقت

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    کاربر دائمی آواتار eb_1345
    تاریخ عضویت
    مرداد 1398
    محل زندگی
    تهران
    پست
    828

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

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

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

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •