Page 1 of 1
คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Mon Aug 08, 2011 10:02 pm
by Bafnet
สวัสดีคีครับ...อาจารย์
วันนี้ขออนุญาตเปิดหัวข้อใหม่ และมีเรื่องให้อาจารย์ช่วยเขีบน code คำสั่งให้หน่อยนะครับ
หน้าตา frmreport ใน Workbook("Dump.xlsm")
lone.jpg
มีเงื่อนไขดังนี้นะครับ
1.ข้อมูลอยู่ที่ Sheets("Report")
2.ที่ปุ่มคำสั่งที่เป็นรูป Exel ต้องการคำสั่งให้นำข้อมูล Sheets("Report").Range("A:T").value ไปยังสมุดงานใหม่ที่เราสั่งให้สร้างขึ้น
-สั่งสร้างสมุดงานใหม่ โดยกำหนดชื่อว่า "Report" & Now()
-ให้นำข้อมูลใน Workbook("Dump.xlsm").Worksheets("Report").Range("A:T").value ไปไว้ที่Sheet1.ของสมุดงานใหม่
- สั่ง Save As สมุดงานใหม่ในชื่อ Report & Now() เก็บไว้ที่ตำแหน่ง Desktop
- สั่งปิด สมุดงานดังกล่าว
เหตุผล คือจากความรู้ที่อาจารย์สอนเรื่องการกรองข้อมูลที่ผ่านมา ทำให้ได้ข้อมูลที่สำคัญ จึงอยากมีคำสั่ง ส่งออกข้อมูลไปเป็นไฟล์เอกเซลใหม่
เพื่อที่ผู้ใช้สามารถนำข้อมูลที่อยู่ในรูปแบบเอกเซล ไปต่อยอดตามความต้องการของแต่ละคนได้
อันนี้คงต้องรบกวนอาจารย์เขียนให้หน่อยนะครับ

ขอบคุณมากครับ
DumP.xlsm
Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Mon Aug 08, 2011 11:14 pm
by Bafnet
อาจารย์ครับ..ผมได้ทดลองบันทึกมาโครได้คำสั่งดังนี้
Private Sub CommandButton1_Click()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:="C:\Users\BPR-2\Desktop\Report.xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=True
Windows("DumP.xlsm").Activate
Columns("A:J").Select
Selection.Copy
Windows("Report.xlsx").Activate
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close
Windows("DumP.xlsm").Activate
End Sub
มีปัญหาดังนี้
1.
ActiveWorkbook.SaveAs Filename:="C:\Users\BPR-2\Desktop\Report.xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=True
ผมอยากให้ระบุเป็นแค่ :="C:\Desktop\Report.xlsx" เพื่อให้ใช้ได้กับทุกเครื่อง แต่พอใส่ตามนั้นมันก็ debug
2.เมื่อรันมาโครรอบที่สอง มันก็จะถามว่าต้องการแทนที่ไฟล์ Report เดิมหรือไม่ ถ้าตอบว่าใช่ ก็ได้ไฟล์ตามคำสั่ง
แต่ถ้าตอบว่าไม่ มันก็ Debug ครับ
จะทำอย่างไรครับเพื่อให้ผู้ใช้ สามารถกำหนดว่าจะแทนที่ไฟล์ Report เดิม หรือบันทึกชื่อเป็นไฟล์ตามที่ผู้ใช้ต้องการ
อาจารย์อย่าทิ้งผมนะ

ขอบคุณครับ
Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Tue Aug 09, 2011 7:01 am
by snasui

ดูตัวอย่างที่กระทู้นี้ครับ ผู้ใช้สามารถเลือกได้เองว่าจะเซฟที่ไหน ไฟล์ชื่อใด
viewtopic.php?f=3&t=309
Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Tue Aug 09, 2011 5:35 pm
by Bafnet
อาจารย์ครับ...หมดปัญญาครับ
พอจะได้รูปแบบดังนี้
Private Sub Export()
Dim FileSaveName As String
Dim ri As Range
With Workbooks("DumP.xlsm").Worksheets("Report")
Set ri = .Range(.Range("A1"), .Range("J65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ri.Copy
Workbooks.Add
Range("A1").Select มัน Debug ตรงนี้ครับ เหมือนกับไม่รู้จัก A1
Selection.PasteSpecial xlPasteValues
Application.CutCopyMode = False
FileSaveName = Application.GetSaveAsFilename( _
filefilter:="Exel Files (*.xl),*.xl") 'กำหนดตรงนี้อย่างไรครับ เพราะจากกระทู้ตัวอย่างเป็น Text File
If FileSaveName <> "" Then
ActiveWorkbook.SaveAs Filename:=FileSaveName, FileFormat:=xlsx 'กำหนดตรงนี้อย่างไรครับ เพราะจากกระทู้ตัวอย่างเป็น Text File
MsgBox "Already save file " & FileSaveName
End If
Application.DisplayAlerts = False
ActiveWindow.Close
Workbooks("DumP.xlsm").Worksheets("Report").Activate
Application.DisplayAlerts = True
อาจารย์ช่วยหน่อยเถอะครับ อยู่กับตรงนี้มา4วันแล้วครับ

ไปต่อไม่ได้
ขอบคุณครับ
Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Tue Aug 09, 2011 8:17 pm
by snasui

ลองดูตัวอย่าง Code ตามด้านล่างครับ ผม Test แล้วสามารถบันทึกได้ ไม่มี Error ครับ
Code: Select all
Private Sub Export()
Dim FileSaveName As String
Dim ri As Range
With Workbooks("DumP.xlsm").Worksheets("Report")
Set ri = .Range(.Range("A1"), .Range("J65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ri.Copy
Workbooks.Add
Range("A1").Select
Selection.PasteSpecial xlPasteValues
Application.CutCopyMode = False
FileSaveName = Application.GetSaveAsFilename( _
filefilter:="Excel Files (*.xlsx),*.xlsx")
If FileSaveName <> "" Then
ActiveWorkbook.SaveAs Filename:=FileSaveName, FileFormat:=xlNormal
MsgBox "Already save file " & FileSaveName
End If
Application.DisplayAlerts = False
ActiveWindow.Close
Workbooks("DumP.xlsm").Worksheets("Report").Activate
Application.DisplayAlerts = True
End Sub
Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Tue Aug 09, 2011 8:27 pm
by Bafnet
สวัสดีครับ
อืม..ได้ในระดับหนึ่งแล้วครับ
Private Sub CommandButton2_Click()
Dim FileSaveName As String
Dim ri As Range
On Error Resume Next
With Workbooks("DumP.xlsm").Worksheets("Report")
Set ri = .Range(.Range("A1"), .Range("J65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ri.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
FileSaveName = Application.GetSaveAsFilename( _
filefilter:="Exel Workbook (*.xlsx),*.xlsx")
If FileSaveName <> "" Then
ActiveWorkbook.SaveAs Filename:=FileSaveName
MsgBox "บันทึกไฟล์สมบูรณ์" & FileSaveName
End If
Application.DisplayAlerts = False
ActiveWindow.Close
Workbooks("DumP.xlsm").Worksheets("Report").Activate
Application.DisplayAlerts = True
End Sub
อาจารย์ครับ หากต้องการส่งออกและSave ไฟล์ ในชื่อ Report.xlsx ที่ตำแหน่ง Desktop
โดยไม่ต้องให้ผู้ใช้เลือกและหากมีไฟล์ที่ชื่อ Report.xlsx อยู่แล้วก็ให้ทับไฟล์เดิมไปเลย
คืออยากส่งออกไปแบบเงียบๆ
รบกวนด้วยนะครับ

Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Tue Aug 09, 2011 8:39 pm
by Bafnet
อาจารย์ครับ
จาก Code ที่อาจารย์ให้มา
เมื่อนำไปใส่ในมาโคร ใช้ได้ครับ
แต่เมื่อนำคำสั่งดังกล่าวใช้ใน CommandButton ก็ debug ครับ ที่บรรทัดเดิม
Range("A1").Select
มันบอกว่า Class Range ล้มเหลว
แต่ก็สามารถแก้ไข ได้แล้วก่อนหน้านี้ โดยเปลี่ยนจาก
Workbooks.Add
Range("A1").Select
Selection.PasteSpecial xlPasteValues
เป็น
Workbooks.Add
ActiveSheet.Paste
รบกวนประเด็นที่ผมถามมาเพิ่มเติมด้วยนะครับ การกำหนดตายตัว
Bafnet wrote:สวัสดีครับ
อาจารย์ครับ หากต้องการส่งออกและSave ไฟล์ ในชื่อ Report.xlsx ที่ตำแหน่ง Desktop
โดยไม่ต้องให้ผู้ใช้เลือกและหากมีไฟล์ที่ชื่อ Report.xlsx อยู่แล้วก็ให้ทับไฟล์เดิมไปเลย
MsgBox"ส่งออกรายงานข้อมูลสมบูรณ์",VbOkonly,"Dump"
คืออยากส่งออกไปแบบเงียบๆ
รบกวนด้วยนะครับ ขอบคุณมากครับ

Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Tue Aug 09, 2011 8:43 pm
by snasui

ในการโพสต์ Code ช่วยทำ
ให้แสดงข้อความเป็น Code ด้วยครับ ผมและเพื่อน ๆ
จะได้สะดวกในการ Copy ไปทดสอบครับ กรณีท่อนใดติดปัญหาก็ค่อยยกออกมาถามเป็นตอน ๆ ไปครับ Code ทั้งหมดควรโพสต์ไว้ด้วยกันครับ
วิธีการคือนำ Code มาวางก่อน จากนั้นลากเมาส์คลุมแล้วคลิกคำว่า Code จะทำให้ Code ที่วางแสดงข้อความเป็น Code ดูตัวอย่างตามที่ผมโพสต์ได้ครับ
สำหรับการบังคับให้วางในโฟลเดอร์ใด ๆ เป็นชื่อไฟล์ใด ๆ แก้ที่ Code ด้านล่างครับ จาก
Code: Select all
FileSaveName = Application.GetSaveAsFilename( _
filefilter:="Excel Workbook (*.xlsx),*.xlsx")
เป็น
เช่น
Code: Select all
FileSaveName = "C:\Desktop\Report.xlsx"
Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Tue Aug 09, 2011 11:22 pm
by Bafnet
สวัสดีอีกครั้งครับ
ต้องขออภัยสำหรับการอ้าง Code ผมทำไม่เป็นครับ เคยนึกสงสัยอยู่ว่าอาจารย์ทำอย่างไร
อาจารย์ครับ ตอนนี้ยังไม่โดนใจครับ Code คำสั่ง ที่ได้ คือผมลองดูว่าเกิดผู้ใช้เปลี่ยนใจ
บอกยกเลิก ตอนที่อยู่หน้า Application.GetSaveAsFilename
มันก็ยังคงส่งออกไฟล์ข้อมูลดังกล่าว แต่อยู่ในชื่อไฟล์ FALSE.xlsx
จะปรับอย่างไร ให้กรณีผู้ใช้ Cancel ไม่เกิดลักษณะดังกล่าว และกลับไปที่ DumP
อีกประเด็นหนึ่งนะครับ ก็พยายามนะครับที่อยากหาวิธีที่ตรงใจที่สุด
ไปอ่านหนังสือพบการเขียนคำสั่งเพื่อตรวจสอบไฟล์ และคำสั่งเลือกไฟล์และลบไฟล์ที่เลือก
ก็เลยลองเอามารวมกัน เนื่องจากผมไม่อยากให้ Exel ถามว่าต้องการแทนที่ไฟล์ Reort.xlsx เดิมหรือไม่
ความตั้งใจคือตรวจสอบว่ามีชื่อไฟล์ Report.xlsx หรือไม่ ถ้ามีก็ให้ลบทิ้งซะ จากนั้นจึงไปสู่คำสั่งส่งออกต่อไป
Code: Select all
Private Sub CommandButton1_Click()
Dim MyWorkbook As Workbook
Dim FileSaveName As String
Dim MyFile As String
Dim ri As Range
MyFile = "Report.xlsx"
For Each MyWorkbook In Application.Workbooks
If MyWorkbook.Name = MyFile Then
MyWorkbook.Activate
End If
Next
Kill (MyFile)
With Workbooks("DumP.xlsm").Worksheets("Report")
Set ri = .Range(.Range("A1"), .Range("J65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ri.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
On Error Resume Next
FileSaveName = "Report.xlsx"
Workbooks("Report.xlsx").Saved = True
ActiveWorkbook.SaveAs Filename:="Report.xlsx"
Application.DisplayAlerts = False
ActiveWindow.Close
Workbooks("DumP.xlsm").Worksheets("Report").Activate
Application.DisplayAlerts = True
If Err > 0 Then
MsgBox "ไม่มีการส่งออกข้อมูล "
Exit Sub
Else
MsgBox "การส่งออกข้อมูลสมบูรณ์" & FileSaveName
End If
End Sub
ผมคงเขียนอะไรผิดในการรวมคำสั่งนี้
Code: Select all
MyFile = "Report.xlsx"
For Each MyWorkbook In Application.Workbooks
If MyWorkbook.Name = MyFile Then
MyWorkbook.Activate
End If
Next
Kill (MyFile) 'Debug
รู้สึกย่ำแย่ครับ เพราะเริ่มรู้สึกว่ารบกวนอาจารย์มาก ขออภัยด้วยครับ

Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Wed Aug 10, 2011 6:06 am
by Bafnet
Bafnet wrote:คือผมลองดูว่าเกิดผู้ใช้เปลี่ยนใจ
บอกยกเลิก ตอนที่อยู่หน้า Application.GetSaveAsFilename
มันก็ยังคงส่งออกไฟล์ข้อมูลดังกล่าว แต่อยู่ในชื่อไฟล์ FALSE.xlsx
จะปรับอย่างไร ให้กรณีผู้ใช้ Cancel ไม่เกิดลักษณะดังกล่าว และกลับไปที่ DumP
Code: Select all
FileSaveName = Application.GetSaveAsFilename(, filefilter:="Exel Files (*.xlsx),*.xlsx", Title:=" DumP โปรดระบุชื่อไฟล์และที่ตั้งเพื่อบันทึก")
If FileSaveName = "False" Then
MsgBox "ยกเลิกการส่งออกข้อมูล", vbOKOnly, "DumP"
Application.DisplayAlerts = False
ActiveWindow.Close
Workbooks("DumP.xlsm").Worksheets("Report").Activate
Application.DisplayAlerts = True
Exit Sub
ขอบคุณครับ
Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Wed Aug 10, 2011 6:46 am
by snasui

เห็นมี If มาดักและมี Exit Sub แสดงว่าทำได้แล้ว ยินดีด้วยครับ

Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Wed Aug 10, 2011 11:54 pm
by Bafnet
สวัสดีครับอาจารย์
ใกล้จะจบหน้า Report แล้วครับ
มีเรื่องสอบถามอาจารย์สักสองประเด็นนะครับ
ผมใช้ For Next เพื่อสั่งพิมพ์จดหมายถึงลูกค้าตามจำนวนลูกค้าในรายงาน
โดยมีการกำหนดชื่อเซล AA4=Total=COUNTA(Report!A2:A30000), กำหนดเซลชื่อ AB4 = Choice
และกำหนดที่ AA5= INDEX(Report!A2:A30000,Choice,1)
ประเด็นที่1. ก็คือว่า ผมต้องการระบุช่วงเซลเป็น AA5= INDEX(Report!A:A,Choice,1) เพราะกลัวข้อมูลบางสาขาจะมากกว่าที่กำหนดไว้
จะทำอย่างไรครับให้ INDEX ที่แถวแรกสุดเริ่มต้นที่ 0 ไม่ใช่ 1
ประเด็นที่2.จาก Code คำสั่ง
Code: Select all
Private Sub Mail()
Dim lng As Long, rs As Range, rt As Range
Dim Inx As Long, ry As Range, ro As Range
If Label17.Caption <> "FileC" Then
Exit Sub
End If
Application.ScreenUpdating = False
On Error Resume Next
i = InputBox(Message, "กำหนดลำดับเริ่มต้นที่ท่านต้องการ", Default, 11500, 7000)
Total = InputBox(Message, "กำหนดลำดับสุดท้าย", Default, 11500, 7000)
For i = i To [Total]
[Choice] = i
Sheet15.Range("A1").Value = Sheet18.Range("AB5").Value
With Worksheets("FileA")
On Error Resume Next
lng = Application.Match(Sheet15.Range("A1"), .Range("A:A"), 0)
Set rs = .Range("A" & lng).Resize(, 21)
Set rt = Sheet15.Range("A3")
End With
rs.Copy: rt.PasteSpecial xlPasteValues
Application.CutCopyMode = False
Rep.Rep
Sheet20.Range("D5").Value = Sheet15.Range("G29").Value
Sheet20.Range("D7").Value = Sheet15.Range("G30").Value
Sheet20.Range("D9").Value = Sheet15.Range("G31").Value
Sheet20.Range("D11").Value = Sheet15.Range("G32").Value
Sheet20.Range("D13").Value = Sheet15.Range("G33").Value
If [Choice] = 0 Then
Exit Sub
Else
Sheet20.PrintOut
End If
Next i
End Sub
ในกรณีที่กำหนดชื่อที่ Cell อย่างนี้เช่น Total , Choice ,i
เราต้องหรือควรจะประกาศตัวแปรอีกหรือไม่ อย่างไร
Code: Select all
i = InputBox(Message, "กำหนดลำดับเริ่มต้นที่ท่านต้องการ", Default, 11500, 7000)
Total = InputBox(Message, "กำหนดลำดับสุดท้าย", Default, 11500, 7000)
จากคำสั่งข้างต้น ผมต้องกำหนด ตัวเลข 11500,7000 เพื่อกำหนดตำแหน่งของ inputBox (ซึ่งต้องนั่งไล่จาก 100 และดูผลของการแสดงตำแหน่ง)
การเขียนที่ถูกต้องเพื่อกำหนดให้ InPutBox อยู่ในตำแหน่งกลางหน้าจอ Center ทำอย่างไรครับ?
คำสั่งข้างต้นใช้ได้ผลครับ แต่ที่สอบถามเพื่อเข้าใจเรื่องของการประกาศตัวแปรและการเขียนที่ถูกต้องครับ
ขอบพระคุณครับ

Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Thu Aug 11, 2011 7:14 am
by snasui
Bafnet wrote:ประเด็นที่1. ก็คือว่า ผมต้องการระบุช่วงเซลเป็น AA5= INDEX(Report!A:A,Choice,1) เพราะกลัวข้อมูลบางสาขาจะมากกว่าที่กำหนดไว้
จะทำอย่างไรครับให้ INDEX ที่แถวแรกสุดเริ่มต้นที่ 0 ไม่ใช่ 1
การให้แถวแรกเริ่มจาก 0 สามารถใช้ Offset แทน Index ครับ =Offset(Report!A1,0,0) สำหรับ Offset อ่านจากที่นี่ครับ
http://snasui.blogspot.com/2009/03/offset.html
Bafnet wrote:ในกรณีที่กำหนดชื่อที่ Cell อย่างนี้เช่น Total , Choice ,i
เราต้องหรือควรจะประกาศตัวแปรอีกหรือไม่ อย่างไร
การกำหนดชื่อเซลล์ไว้แล้วเราจะประกาศตัวแปรหรือไม่ก็ได้ครับ ปกติแม้เราให้ชื่อเซลล์ไว้แล้ว แต่การอ้างอิงก็ต้องอ้าง Collection.Object อยู่ดีครับ เช่นการอ้างถึงชื่อ Choice
Code: Select all
Worksheets("Sheet1").Range("Choice")
แต่หากเราประกาศตัวแปรเราสามารถอ้างสั้นลงได้ เพราะตอนที่เรา Assigned ได้อ้าง Collection ไว้ด้วย เช่น
Code: Select all
Set r = Worksheets("Sheet1").Range("Choice")
ประโยชน์ของการให้ชื่อเซลล์ช่วยในเรื่องไม่ต้องอ้างตำแหน่งเซลล์เข้าไปตรง ๆ ไม่ต้องคอยแก้ไข Code หากมีการย้ายเซลล์ไปตำแหน่งอื่น เพราะย้ายไปไหนชื่อเซลล์ก็จะเป็นชื่อเดิม
Bafnet wrote:การเขียนที่ถูกต้องเพื่อกำหนดให้ InPutBox อยู่ในตำแหน่งกลางหน้าจอ Center ทำอย่างไรครับ?
ปกติถ้าไม่กำหนดพิกัด ตัวหน้าต่าง Pop-up ทั้งหลายจะอยู่กลางจออยู่แล้วครับ
Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Sun Aug 14, 2011 1:51 am
by Bafnet
สวัสดีครับอาจารย์
snasui wrote:ปกติถ้าไม่กำหนดพิกัด ตัวหน้าต่าง Pop-up ทั้งหลายจะอยู่กลางจออยู่แล้วครับ

ขอบคุณมากมาย ผมก็ดันใส่มาเป็นหลายปี พอดีตัวอย่างในหนังสือมันใส่ครับแต่เป็น 100,100
ผมเลยหลงเข้าใจว่าต้องใส่เลขกำกับ
วันนี้มาก็มีเรื่องเรียนถามหน่อยครับ จากภาพ ฟอร์มใหญ่ชื่อ frmlone , ฟอร์มเล็กชื่อ frmlonex
Dump.jpg
อาจารย์ครับ ฟอร์มเล็กถูกเรียกใช้จากปุ่มคำสั่งในฟอร์มใหญ่ด้วยคำสั่ง
Code: Select all
Private Sub CommandButton26_Click()
frmlonex.Show
End Sub
ปัญหาคือพอเราปิดฟอร์มเล็ก ฟอร์มใหญ่ก็ปิดตามครับ
จะเขียนคำสั่งดักที่ Private Sub UserForm_Terminate()'ของฟอร์มเล็กอย่างไรครับ
เพื่อไม่ให้ฟอร์มใหญ่ปิดตาม หรือพูดง่ายๆว่ากลับไปทำงานที่ฟอร์มใหญ่ต่อ
Code: Select all
Private Sub CommandButton26_Click()
frmlone.Hide
frmlonex.Show
End Sub
Code: Select all
Private Sub UserForm_Terminate()
frmlone.Show
End Sub
อันนี้ได้ผลแต่ไม่ราบว่ามีวิธีไหนบ้างที่ไม่ต้องสั่ง frmlone.Hide
ขอบคุณครับ
Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Sun Aug 14, 2011 7:38 am
by snasui

เท่าที่อ่านเนื่องจากไปสั่งให้ Form ใหญ่ มันซ่อนด้วย Code นี้
Bafnet wrote:
Code: Select all
Private Sub CommandButton26_Click()
frmlone.Hide
frmlonex.Show
End Sub
เมื่อปิด Form เล็กก็ต้องเขียน Code ให้ Show Form ใหญ่ขึ้นมาก็ถูกแล้วครับ ถ้าไม่ต้องการให้มันซ่อนไปก่อนก็เอา
ออกไปครับ
Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Sun Aug 14, 2011 12:56 pm
by Bafnet
สวัสดีครับ
ผมคงอธิบายความต้องการผิดไป
เมื่อเอาคำสั่งออกไป ซึ่งผมเองก็ไม่ต้องการซ่อนฟอร์มใหญ่
ปัญหาผมคือเมื่อปิดฟอร์มเล็ก(X) ฟอร์มใหญ่ก็ปิดตาม
ทั้งๆที่ในฟอร์มเล็กมีคำสั่งนี้
Code: Select all
Private Sub UserForm_Terminate()
frmlone.Show
End Sub
ชักจะอธิบายไม่ถูกครับงง.

ไม่ต้องการให้ฟอร์มใหญ่ปิดตามฟอร์มเล็ก
Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Sun Aug 14, 2011 1:44 pm
by Bafnet
สวัสดีครับ
อาจารย์ครับผมเข้าใจแล้วครับ ผมลองสร้างไฟล์ใหม่
เวลาสั่งปิดฟอร์มเล็ก ก็ไม่มีผลกระทบกับฟอร์มใหญ่
แต่ในโปรแกรมที่ผมกำลังทำอยู่
เวลาสั่งปิดฟอร์มเล็ก ฟอร์มใหญ่ก็ดันปิดตามครับ
กำลังหาสาเหตุว่าเป็นเพราะอะไร
Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Sun Aug 14, 2011 1:58 pm
by Bafnet
สวัสดีอีกครั้งครับ
Bafnet wrote:แต่ในโปรแกรมที่ผมกำลังทำอยู่
เวลาสั่งปิดฟอร์มเล็ก ฟอร์มใหญ่ก็ดันปิดตามครับ
เจอสาเหตุแล้วครับ
เป็นเพราะผมไปกำหนด properties ตัวที่ชื่อ
ShowModal = False
ต้องขออภัยอาจารย์ด้วยนะครับ
ขอถามอีกเรื่องนะครับ
properties ตัวที่ชื่อ Cycle มีการกำหนดไว้ 2 แบบ
0-fmCycleAllforms
2-fmCyclecurentForm
มีความหมายอย่างไรครับ และใช้เมื่อใด
ขอบคุณครับ
Re: คำสั่ง ส่งออกข้อมูลเป็นไฟล์ Exel ใหม่
Posted: Sun Aug 14, 2011 2:45 pm
by snasui