View Full Version : سوال: خروجی سابفرم به اکسل
Masoud.eh
یک شنبه 28 خرداد 1402, 20:55 عصر
سلام دوستان گرامی
لطفا میشه دوستان کمک کنن که چجوری در کد زیر بجای فرم، سابفرم رو معرفی کنم؟
DoCmd.OutputTo acOutputForm, "frmS_LOADING", "ExcelWorkbook(*.xlsx)", Path2, True
سابفرم رو به اشکال زیر معرفی کردم ولی جواب نگرفتم
DoCmd.OutputTo acOutputForm, Form_frm_Main.sub_Main, "ExcelWorkbook(*.xlsx)", Path2, True
DoCmd.OutputTo acOutputForm, "Forms!frm_Main!sub_Main", "ExcelWorkbook(*.xlsx)", Path2, True
ممنون میشم راهنمایی بفرمائید.
simorgh2000
یک شنبه 28 خرداد 1402, 23:10 عصر
سلام دوست عزیز
بهتره سورس فرم یک کوئری قرار بدید و نتیجه کوئری به اکسل بفرستین اینجوری نام فیلدها در اکسل هم بصورت فارسی خواهد بود
Masoud.eh
دوشنبه 29 خرداد 1402, 13:21 عصر
دوست عزیز
سورس فرم کوئری در صورتی که فیلترهای خود اکسس اعمال بشه (فیلترهای مثل sort، Equals و ... در فرم دیتاشیت) نتیجه فیلتر در اکسل نمیاد و فقط فیلترهای اعمال شده در کوئری (و فرم اصلی متصل به کوئری) در اکسل خروجی مشاهده میشه.
بنابراین به نظر میاد برای خروجی اکسل از کلیه فیلترهای اعمال شده (چه فیلترهای خود اکسس و چه فیلترهای اعمال شده در کوئری) بایستی مستقیما از سابفرم خروجی اکسل گرفت.
mazoolagh
دوشنبه 29 خرداد 1402, 20:12 عصر
سلام و روز خوش
دو مورد هست که باید در نظر داشته باشین:
1- با فرض این که اسم کنترل subform شما در فرم اصلی sub_Main باشه میتونین اینجوری بنویسین:
DoCmd.OutputTo acOutputForm, me.sub_Main.form.name, "ExcelWorkbook(*.xlsx)", Path2, True
یا اصلا مستقیما اسم خود سابفرم (نه کنترل):
DoCmd.OutputTo acOutputForm, "your subform name", "ExcelWorkbook(*.xlsx)", Path2, True
2- مشکل شما با این روش حل نمیشه!
درسته که docmd.outputto هنگام اکسپورت به excel وضعیت فیلتر و سورت فرم رو در نظر میگیره،
ولی این در مورد سابفرم عمل نمیکنه.
گذشته از این، کل کوردهای دیتاسورس سابفرم اکسپورت میشه و نه رکوردهای نمایش داده شده در سابفرم.
راهنمایی جناب سیمرغ در پست 2 درست هست،
ولی باید وضعیت فیلتر و سورت رو هم خودتون در کوئری پیاده کنین که کدنویسی اش سخت میشه.
ولی میتونین به صورت زیر عمل کنین:
1- یک جدول موقت بسازین
2- و اون رو از روی رکوردست سابفرم پر کنین (در واقع از روی recordsetclone)
3- و این جدول رو اکسپورت کنین
anoor_h
دوشنبه 29 خرداد 1402, 20:15 عصر
این خیلی خوب عمل میکنه من دارمش
Private Sub Command53_Click()
On Error Resume Next
DoCmd.DeleteObject acQuery, strTempQryDef
On Error GoTo 0
Dim db As dao.Database
Dim qrydef As dao.QueryDef
Dim strSQL As String
Dim bolWithFilterOn As Boolean
Dim strRecordSource As String
strTempQryDef = combo22.Value
bolWithFilterOn = Me.sheet2subform.Form.FilterOn
strRecordSource = Me.sheet2subform.Form.RecordSource
If InStr(strRecordSource, "SELECT ") <> 0 Then
strSQL = strRecordSource
Else
strSQL = "SELECT * FROM [" & strRecordSource & "]"
End If
' just in case our sql string ends with ";"
strSQL = Replace(strSQL, ";", "")
If bolWithFilterOn Then
strSQL = strSQL & _
IIf(InStr(strSQL, "WHERE ") <> 0, " And ", " Where ") & _
Me.sheet2subform.Form.Filter
End If
Set db = CurrentDb
On Error GoTo m:
'create temporary query
Set qrydef = db.CreateQueryDef(strTempQryDef, strSQL)
''db.QueryDefs.Append qrydef
Set qrydef = Nothing
DoCmd.TransferSpreadsheet TransferType:=acExport, _
SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _
TableName:=strTempQryDef, _
Filename:=Replace(CurrentProject.Path & "\Tak" & "", "\", "") & strTempQryDef & ".xlsx"
wkbookPath = Replace(CurrentProject.Path & "\Tak" & "", "\", "") & strTempQryDef & ".xlsx"
Dim XL As Object
Set XL = CreateObject("Excel.Application")
With XL
.Visible = False
.DisplayAlerts = False
.Workbooks.Open wkbookPath
.Columns("A:G").EntireColumn.AutoFit
.ActiveWorkbook.Close (True)
.Quit
End With
Set XL = Nothing
' Delete the temporary query
db.QueryDefs.Delete strTempQryDef
Combo21.Requery
Set db = Nothing
Exit Sub:
m:
MsgBox "نقطه اي انتخاب نشده"
Masoud.eh
دوشنبه 29 خرداد 1402, 21:16 عصر
ممنون از پاسختون
از کد زیر جدیدا استفاده کردم که عالی عمل کرد
فقط دو مورد هست که اگر اصلاحش کنید ممنون میشم
1- اینکه فایل اکسل با نام و آدرس داده شده بصورت خودکار ذخیره بشه. (در path1 و path2)
2- ستون ها با توجه به فرم دیتاشیت راست چین، چپ چین یا وسط چین باشه.
Path1 = CurrentProject.Path & "" & Replace("Report", ChrW(1740), ChrW(1610))
If Len(Dir(Path1 & "", vbDirectory)) = 0 Then
MkDir Path1
End If
"Path2 = CurrentProject.Path & "\Report" & "\DISCHARG-" & Me.txt_DateTime & ".xlsx
Private Sub Command287_Click()
On Error GoTo Command287_Click_Err
Me.sub_Main.SetFocus
DoCmd.RunCommand acCmdSelectAllRecords
DoCmd.RunCommand acCmdCopy
Dim xlapp As Object
Set xlapp = CreateObject("Excel.Application")
With xlapp
.Workbooks.add
.activesheet.PasteSpecial Format:=2, Link:=False, DisplayAsIcon:=False
.range("a1").EntireRow.Delete
.Visible = True
.Columns.WrapText = False
.Columns.AutoFit
Command287_Click_Exit:
Exit Sub
End With
Command287_Click_Err:
MsgBox Error$
Resume Command287_Click_Exit
End Sub
mazoolagh
چهارشنبه 31 خرداد 1402, 12:20 عصر
برای فرمت بندی سلول های داکیومنت اکسل فکر کنم تاپیک داشتیم.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.