การใช้ File Dialog ค้นหาภาพ และเปิดด้วย Paint ด้วย Access VBA
ในตัวอย่างนี้ จะเป็นการสร้างปุ่มเพื่อเปิดหน้าจอค้นหาไฟล์ (Browse Dialogue) เพื่อค้นหาไฟล์ภาพ แล้วมีปุ่มเพื่อให้เปิดดูด้วย โปรแกรม Paint เพื่อให้ผู้ใช้สามารถจัดการกับภาพ และสั่งพิมพ์นอกโปรแกรม Access ได้
จุดประสงค์สุดท้ายคือการเรียกไฟล์ Paint มาเปิดภาพ ดังนั้น เราต้องมีการกรอง หรือตรวจเชคว่า ไฟล์ที่เลือกนั้นเป็นไฟล์ภาพหรือไม่ ในตัวอย่างนี้ กำหนดให้เป็นไฟล์ ประเภท jpg หรือ gif เท่านั้น
วิธีการ
เมื่อเลือกไฟล์ และกดปุ่ม OK จะแสดง Path และชื่อไฟล์ในกล่องข้อความ และมีปุ่มกดดูภาพปรากฎขึ้น
เมื่อคลิกปุ่ม เปิดดูภาพ จะเปิดโปรแกรม Paint และแสดงภาพที่เลือก
Dim fileAddress As String
Dim fileExt As String
Dim strFile As String
Dim strFolder As String
Dim varItem As Variant
Me.Text3.Value = ""
Me.cmdViewFile.Visible = False
Set f = Application.FileDialog(3)
f.AllowMultiSelect = False
f.Title = "โปรดเลือกไฟล์ภาพที่ต้องการ"
f.Filters.Clear
f.Filters.Add "JPG Files", "*.jpg"
f.Filters.Add "GIF Files", "*.gif"
f.Filters.Add "Bitmap Files", "*.bmp"
f.Filters.Add "All Files", "*.*"
If f.Show Then
fileAddress = f.SelectedItems(1)
Me.Text3 = fileAddress
Me.cmdViewFile.Visible = True
End If
Set f = Nothing
End Sub
http://www.pcreview.co.uk/forums/re-vba-using-shell-open-jpg-file-ms-paint-t3837282.html
http://www.devhut.net/2013/02/26/ms-access-vba-determine-a-files-extension/
http://social.msdn.microsoft.com/Forums/office/en-US/2e053d45-5ad1-4340-a678-3a2d83625965/access-2010-applicationfiledialog-filtersadd-fails
จุดประสงค์สุดท้ายคือการเรียกไฟล์ Paint มาเปิดภาพ ดังนั้น เราต้องมีการกรอง หรือตรวจเชคว่า ไฟล์ที่เลือกนั้นเป็นไฟล์ภาพหรือไม่ ในตัวอย่างนี้ กำหนดให้เป็นไฟล์ ประเภท jpg หรือ gif เท่านั้น
วิธีการ
- สร้างปุ่ม ชื่อ Command0 เขียนข้อความที่ปุ่มเป็น ค้นหาไฟล์
- สร้าง กล่องข้อความ (Textbox) ชื่อ Text3
- สร้างปุ่ม ชื่อ cmdViewFile กำหนดค่าเริ่มต้นให้มองไม่เห็น (ที่แถบ Format ตั้งค่า Visible เป็น No) เขียนข้อความที่ปุ่มเป็น เปิดดูภาพ
- ที่ปุ่ม ค้นหาไฟล์ (Command0) ให้เขียนโค้ดข้างล่างนี้
Private Sub Command0_Click()
Dim f As Object
Dim fileAddress As String
Dim fileExt As String
Dim strFile As String
Dim strFolder As String
Dim varItem As Variant
Me.Text3.Value = ""
Me.cmdViewFile.Visible = False
Set f = Application.FileDialog(3)
f.AllowMultiSelect = False
If f.Show Then
fileAddress = f.SelectedItems(1)
End If
Set f = Nothing
fileExt = Right(fileAddress, Len(fileAddress) - InStrRev(fileAddress, "."))
If ((fileExt <> "gif") And (fileExt <> "jpg")) Then
MsgBox "ไม่ใช่ไฟล์ภาพ"
Else
Me.Text3.Value = fileAddress
Me.cmdViewFile.Visible = True
End If
End Sub - ที่ปุ่ม cmdViewFile ให้เขียนโค้ดข้างล่างนี้
Private Sub cmdViewFile_Click()
Dim thisFile As String
thisFile = Me.Text3.Value
Shell Chr(34) & "C:\Windows\System32\mspaint.exe" & Chr(34) & " " & _
Chr(34) & thisFile & Chr(34), 1
End Sub
เมื่อเลือกไฟล์ และกดปุ่ม OK จะแสดง Path และชื่อไฟล์ในกล่องข้อความ และมีปุ่มกดดูภาพปรากฎขึ้น
เมื่อคลิกปุ่ม เปิดดูภาพ จะเปิดโปรแกรม Paint และแสดงภาพที่เลือก
ดาวน์โหลดไฟล์ คลิกที่นี่
ปรับปรุงใหม่
โค้ดข้างต้นมีการตรวจเชคไฟล์ที่เลือก แต่คิดว่าน่าจะดีกว่า ถ้ากำหนดตัวกรอง Filters ให้กับหน้าจอค้นหาไฟล์ คือให้แสดงเฉพาะไฟล์ภาพชนิดที่ต้องการเท่านั้น โค้ด ปรับใหม่ ได้ดังนี้
Private Sub Command0_Click()
Dim f As ObjectDim fileAddress As String
Dim fileExt As String
Dim strFile As String
Dim strFolder As String
Dim varItem As Variant
Me.Text3.Value = ""
Me.cmdViewFile.Visible = False
Set f = Application.FileDialog(3)
f.AllowMultiSelect = False
f.Title = "โปรดเลือกไฟล์ภาพที่ต้องการ"
f.Filters.Clear
f.Filters.Add "JPG Files", "*.jpg"
f.Filters.Add "GIF Files", "*.gif"
f.Filters.Add "Bitmap Files", "*.bmp"
f.Filters.Add "All Files", "*.*"
fileAddress = f.SelectedItems(1)
Me.Text3 = fileAddress
Me.cmdViewFile.Visible = True
End If
Set f = Nothing
End Sub
ที่มา
http://www.devhut.net/2013/02/26/ms-access-vba-determine-a-files-extension/
http://social.msdn.microsoft.com/Forums/office/en-US/2e053d45-5ad1-4340-a678-3a2d83625965/access-2010-applicationfiledialog-filtersadd-fails
ความคิดเห็น
แสดงความคิดเห็น