กระทู้เก่าบอร์ด อ.Yeadram
4,669 9
URL.หัวข้อ /
URL
การค้นหาไฟล์
สวัสดีครับอาจารย์ ทุกท่าน
ก่อนอื่นผมต้องขอโทษด้วยนะครับ ถ้าคำถามของผม ทำให้อาจารย์เกิดความยุ่งยากครับ
เป็นไปได้หรือเปล่าครับ ถ้าเราต้องการที่จะค้นหาไฟล์ (EXCEL) ที่ถูกเก็บอยู่ในเครื่องคอมฯ ของเรา ตามชื่อที่ต้องการที่จะค้นหา โดยสร้างเป็น Text Box
ค้นหา แล้วทำปุ่มค้นหา แล้วให้แสดง ไฟล์ที่ค้นพบ พร้อม path ใน ฟอร์ม
พอเจอแล้วก็สามารถ คลิก ที่ต้องการจะเปิดได้ครับ คล้ายๆ การค้นหาแบบ
Windows Explore ครับ
ขอบคุณมากครับ
ก่อนอื่นผมต้องขอโทษด้วยนะครับ ถ้าคำถามของผม ทำให้อาจารย์เกิดความยุ่งยากครับ
เป็นไปได้หรือเปล่าครับ ถ้าเราต้องการที่จะค้นหาไฟล์ (EXCEL) ที่ถูกเก็บอยู่ในเครื่องคอมฯ ของเรา ตามชื่อที่ต้องการที่จะค้นหา โดยสร้างเป็น Text Box
ค้นหา แล้วทำปุ่มค้นหา แล้วให้แสดง ไฟล์ที่ค้นพบ พร้อม path ใน ฟอร์ม
พอเจอแล้วก็สามารถ คลิก ที่ต้องการจะเปิดได้ครับ คล้ายๆ การค้นหาแบบ
Windows Explore ครับ
ขอบคุณมากครับ
9 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R05558
ขอบพระคุณมากครับ อาจารย์
ถ้าผมจะเปลี่ยนเงื่อนไขการค้นหาจาก HDD ทั้งลูก เป็นการกำหนดเจาะจง Fix Drive Fix Folder อาจารย์จะสามารถกรุณาให้ตัวอย่างได้หรือไม่
ครับ
ขอบคุณมากครับอาจารย์
ถ้าผมจะเปลี่ยนเงื่อนไขการค้นหาจาก HDD ทั้งลูก เป็นการกำหนดเจาะจง Fix Drive Fix Folder อาจารย์จะสามารถกรุณาให้ตัวอย่างได้หรือไม่
ครับ
ขอบคุณมากครับอาจารย์
3 @R05561
อย่างที่ผมได??แยกแยะออกเป็นขั้นตอน ในคำตอบแรกนะครับ
มันจะมี 3 งานหลักๆ
1 การหาไฟล์ (Browse)
2 การแสดงผล
3 การสร้างลิงค์ หรือการผูกเหตุการณ์เพื่อเรียกใช้คำสั่ง shell หรือคำสั่ง followhyperlink
ขั้นที่ 3 เอาไว้ก่อนนะครับ ยังไม่อธิบาย (หรือไม่ คุณ boonme อาจจะรู้วิธีทำแล้ว)
ขั้นที่ 2 มันจะต้องเกี่ยวเนื่องกับขั้นที่ 1 คือถ้าเขียนโค้ดในขั้นที่ 1 เป็นแล้ว ก็เอางานในขั้นที่ 2นี้ เข้าไปแทรกในโค้ดนั้นๆ ครับ
ส่วนขั้นที่ 1 จริงๆ มันมีวิธีได้หลายวิธีและแยกย่อย เช่น
1 การจำกัดบริเวณการหา ซึ่งอาจจะ
1.1 ให้ user ระบุ path เองใน textbox แล้วเราเอาพาธนั้นไปทำงานในโค้ด ค้นหา เช่นให้ user ระบุว่า D:\mywork\ เป็นต้น แล้วเราค่อยเอาสายอักขระนี้ไป ทำงานในฟังก์ชั่นค้นหา
1.2 ให้โปรแกรมของเราช่วยหา path ให้ ก็จะเป็นลักษณะ การหาโฟลเดอร์ ไม่ใช่หาไฟล์ และเพื่อความสะดวกดังกล่าว
1.2.1 ให้ใช้ ActiveX หรือคอมโพเนนท์ เสริมเข้ามาช่วย
1.2.2 การเขียนโค้ดทั้งหมดเพื่อเรียกฟังกชั่น API ให้เรียก filedialog ขึ้นมาเพื่อค้นหา (มันจะเป็น dialog ที่เราเห็นอยู่ทุกวัน เพราะมันเป็น Dialog พื้นฐานของวินโดวส์ จะมีฝังมาในคอมฯ ของเราอยู่แล้วในทุกเครืองที่ลงวินโดวส์ เราแค่เขียนโค้ด ไปหยิบมาใช้)
2 การค้นหาไฟล์ เราก็สามารถทำได้อีกอย่างน้อยๆ สองวิธี
2.1 การใช้ FileDialog เหมือนเดิมครับ แต่นั่นค่อนข้างจะไม่อัติโนมัติ เพราะผู้ใช้ต้องคอยนั่งคลิ๊กเอาเอาเรื่อยๆ จนกว่าจะเจอไฟล์ที่ต้องการ
2.2 การใช้ Filesystemobject เพื่อวนลูปค้นหาไฟล์ ซึ่งขั้นตอนนี้และครับที่มันอาจจะยาวนาน เพราะมันเป็นลูป เราถึงต้องควรอย่างยิ่งที่จะจำกัดบริเวณของมัน
ทั้งหมดนี้ผมเขียนมาเพื่อแยกแยะให้เข้าใจในเนื้องานนะครับ แต่ผมคงไม่ทำเป็นตัวอย่างให้ดูนะครับ (จริงๆ ก็พอมีแต่ผมทำเป็น VB6) คงไม่ได้มานั่งดัดนั่งแปลงเป็น Access มาให้ดู
ทีนี้เมื่อเข้าใจโครงสร้างของงาน เมื่อเข้าใจทางเลือก (ว่าเราควรเลือกแบบใดที่ง่ายต่อเราและเหมาะกับเราแล้ว) ผมจะแนะนำว่าให้คุณไปเอาโค้ดจากที่ไหนมาดัดแปลงได้บ้าง
1. ไปที่หน้าเว็บบอร์ดนี้แล้วค้น ด้วยคีย์เวอร์ดว่า "Browse" หรือ.......
2. ผมได้ลองค้นมาให้แล้วบ้างดังนี้
การใช้ Dialog ค้นหาโฟลเดอร์ -- >
http://www.mvps.org/access/api/api0002.htm
การใช้ Dialog ค้นหาไฟล์ -- > http://www.mvps.org/access/api/api0001.htm หรือไปดูวิธีการดัดแปลงบ้างแล้วบางส่วนที่ความเห็นของคุณ Gerald ที่ http://www.thai-access.com/yeadram_view.php?topic_id=381
การวนลูปค้นหาไฟล์ แบบ API -- >
http://www.mvps.org/access/api/api0006.htm
หรือการวนลูปค้นหาไฟล์ แบบ FilesystemObject --> อันนี้หาตัวอย่างดีๆ ไม่ได้ผมเลยไปก็อปปี้จากสคริปต์ VBS ของผมเองมาวาง อิอิ เป็นสคริปต์ไล่ลบ กากของไวรัสครับ คือพอดีไวรัสเล็กลงเครื่องครับ พอฆ่ามันตายได้แล้ว แต่ผลงานมันยังอยู่เยอะ เราต้องมานั่งไล่ลบผลงานของมันเอาเองครับ มันเยอะจัดและไม่แน่ใจว่าจะตามลบหมดทุกที่ก็เลยเขียนเป็นสคริปต์ไล่ลบเอาเอง ที่ให้ดูคือให้ดูวิธีการค้นหาไฟล์ครับ โดยค้นในโฟลเดอร์หลัก โฟลเดอร์ย่อย ซึ่งสามารถค้นได้แม้จะมีโฟลเดอร์หลายชั้น มันก็ค้นได้ทุกชั้นเลย ต้องไปอ่านไปดัดแปลงเอาเองต่อนะครับ
มันจะมี 3 งานหลักๆ
1 การหาไฟล์ (Browse)
2 การแสดงผล
3 การสร้างลิงค์ หรือการผูกเหตุการณ์เพื่อเรียกใช้คำสั่ง shell หรือคำสั่ง followhyperlink
ขั้นที่ 3 เอาไว้ก่อนนะครับ ยังไม่อธิบาย (หรือไม่ คุณ boonme อาจจะรู้วิธีทำแล้ว)
ขั้นที่ 2 มันจะต้องเกี่ยวเนื่องกับขั้นที่ 1 คือถ้าเขียนโค้ดในขั้นที่ 1 เป็นแล้ว ก็เอางานในขั้นที่ 2นี้ เข้าไปแทรกในโค้ดนั้นๆ ครับ
ส่วนขั้นที่ 1 จริงๆ มันมีวิธีได้หลายวิธีและแยกย่อย เช่น
1 การจำกัดบริเวณการหา ซึ่งอาจจะ
1.1 ให้ user ระบุ path เองใน textbox แล้วเราเอาพาธนั้นไปทำงานในโค้ด ค้นหา เช่นให้ user ระบุว่า D:\mywork\ เป็นต้น แล้วเราค่อยเอาสายอักขระนี้ไป ทำงานในฟังก์ชั่นค้นหา
1.2 ให้โปรแกรมของเราช่วยหา path ให้ ก็จะเป็นลักษณะ การหาโฟลเดอร์ ไม่ใช่หาไฟล์ และเพื่อความสะดวกดังกล่าว
1.2.1 ให้ใช้ ActiveX หรือคอมโพเนนท์ เสริมเข้ามาช่วย
1.2.2 การเขียนโค้ดทั้งหมดเพื่อเรียกฟังกชั่น API ให้เรียก filedialog ขึ้นมาเพื่อค้นหา (มันจะเป็น dialog ที่เราเห็นอยู่ทุกวัน เพราะมันเป็น Dialog พื้นฐานของวินโดวส์ จะมีฝังมาในคอมฯ ของเราอยู่แล้วในทุกเครืองที่ลงวินโดวส์ เราแค่เขียนโค้ด ไปหยิบมาใช้)
2 การค้นหาไฟล์ เราก็สามารถทำได้อีกอย่างน้อยๆ สองวิธี
2.1 การใช้ FileDialog เหมือนเดิมครับ แต่นั่นค่อนข้างจะไม่อัติโนมัติ เพราะผู้ใช้ต้องคอยนั่งคลิ๊กเอาเอาเรื่อยๆ จนกว่าจะเจอไฟล์ที่ต้องการ
2.2 การใช้ Filesystemobject เพื่อวนลูปค้นหาไฟล์ ซึ่งขั้นตอนนี้และครับที่มันอาจจะยาวนาน เพราะมันเป็นลูป เราถึงต้องควรอย่างยิ่งที่จะจำกัดบริเวณของมัน
ทั้งหมดนี้ผมเขียนมาเพื่อแยกแยะให้เข้าใจในเนื้องานนะครับ แต่ผมคงไม่ทำเป็นตัวอย่างให้ดูนะครับ (จริงๆ ก็พอมีแต่ผมทำเป็น VB6) คงไม่ได้มานั่งดัดนั่งแปลงเป็น Access มาให้ดู
ทีนี้เมื่อเข้าใจโครงสร้างของงาน เมื่อเข้าใจทางเลือก (ว่าเราควรเลือกแบบใดที่ง่ายต่อเราและเหมาะกับเราแล้ว) ผมจะแนะนำว่าให้คุณไปเอาโค้ดจากที่ไหนมาดัดแปลงได้บ้าง
1. ไปที่หน้าเว็บบอร์ดนี้แล้วค้น ด้วยคีย์เวอร์ดว่า "Browse" หรือ.......
2. ผมได้ลองค้นมาให้แล้วบ้างดังนี้
การใช้ Dialog ค้นหาโฟลเดอร์ -- >
http://www.mvps.org/access/api/api0002.htm
การใช้ Dialog ค้นหาไฟล์ -- > http://www.mvps.org/access/api/api0001.htm หรือไปดูวิธีการดัดแปลงบ้างแล้วบางส่วนที่ความเห็นของคุณ Gerald ที่ http://www.thai-access.com/yeadram_view.php?topic_id=381
การวนลูปค้นหาไฟล์ แบบ API -- >
http://www.mvps.org/access/api/api0006.htm
หรือการวนลูปค้นหาไฟล์ แบบ FilesystemObject --> อันนี้หาตัวอย่างดีๆ ไม่ได้ผมเลยไปก็อปปี้จากสคริปต์ VBS ของผมเองมาวาง อิอิ เป็นสคริปต์ไล่ลบ กากของไวรัสครับ คือพอดีไวรัสเล็กลงเครื่องครับ พอฆ่ามันตายได้แล้ว แต่ผลงานมันยังอยู่เยอะ เราต้องมานั่งไล่ลบผลงานของมันเอาเองครับ มันเยอะจัดและไม่แน่ใจว่าจะตามลบหมดทุกที่ก็เลยเขียนเป็นสคริปต์ไล่ลบเอาเอง ที่ให้ดูคือให้ดูวิธีการค้นหาไฟล์ครับ โดยค้นในโฟลเดอร์หลัก โฟลเดอร์ย่อย ซึ่งสามารถค้นได้แม้จะมีโฟลเดอร์หลายชั้น มันก็ค้นได้ทุกชั้นเลย ต้องไปอ่านไปดัดแปลงเอาเองต่อนะครับ
call delEXE(pth,pth)
function delEXE(pt, ot)
Set fo = fso.GetFolder(pt)
on error resume next
sq=fo.name
For Each fi In fo.Files
if fi.name=sq & "`.exe" or fi.name=sq & ".exe" then
'msgbox fi.path
fso.deletefile fi, true
end if
next
For Each sfdr In fo.SubFolders
sq=fo.path
if sfdr.parentfolder <> fo.parentfolder then
sq = sfdr.parentfolder
else
sq = fo.parentfolder
end if
call delEXE(sfdr.path & "\" , sq)
Next
on error goto 0
end function
4 @R05562
ขอบคุณมากครับอาจารย์
เท่าที่อาจารย์ให้มาก็มากพอแล้วครับ ผมจะพยามประยุกต์ ให้เองครับ
ขอบคุณมากครับอาจารย์ ถ้าติดขัดอย่างไร ผมจะรบกวนท่านอาจารย์อีก
ครั้งครับ ตอนนี้ผมกำลังทำโปรแกรม เกี่ยวกับการ ให้บริการหลังการขาย
เก็บข้อมูลร้องเรียนจากลูกค้าต่างประเทศอยู่ครับ
เท่าที่อาจารย์ให้มาก็มากพอแล้วครับ ผมจะพยามประยุกต์ ให้เองครับ
ขอบคุณมากครับอาจารย์ ถ้าติดขัดอย่างไร ผมจะรบกวนท่านอาจารย์อีก
ครั้งครับ ตอนนี้ผมกำลังทำโปรแกรม เกี่ยวกับการ ให้บริการหลังการขาย
เก็บข้อมูลร้องเรียนจากลูกค้าต่างประเทศอยู่ครับ
5 @R05913
รบกวน อ. ช่วยอธิบายการใช้ call delEXE(pth,pth) ซักหน่อย มันใช้ยังงัยครับ
6 @R05921
อืมม อ่านๆ ไป ก็งงตัวเองเหมือนกันว่าเขียนอะไรลงไป อิอิ
งั้นเอาใหม่ดีกว่า ผมไปเรียบเรียงมาใหม่ให้อ่านง่ายขึ้น ก็ได้ดังนี้ครับ
หากต้องการทดสอบให้ทำตามดังนี้
- คัดลอกทั้งหมด ลงใน notepad
- เซฟให้เป็นนามสกุล .vbs
- แนะนำ ให้วางไว้ในโฟลเดอร์ใดๆ ก็ตามที่มีโฟลเดอร์ย่อย จำนวนน้อยๆ ชั้น เพื่อการทดสอบที่รวดเร็ว
- ดับเบิ้ลคลิ๊กที่ไฟล์ แล้วไปเปิดดูผลงานที่ C:\txx.txt (สร้างขึ้นมาอัตโนมัติ ดูเสร็จก็ลบทิ้งได้เลย)
อย่าลืมว่าจุดประสงค์ของตัวอย่างนี้คือ .. ตัวอย่างการวนลูปเพื่อตรวจสอบไฟล์ในโฟลเดอร์ทุกระดับชั้น
งั้นเอาใหม่ดีกว่า ผมไปเรียบเรียงมาใหม่ให้อ่านง่ายขึ้น ก็ได้ดังนี้ครับ
Dim WshShell
Dim fso 'As New FileSystemObject
Dim fo 'As Folder
dim sfdr 'As Folder
Dim fi 'As File
Dim pth 'As String
Dim tx 'As TextStream
'-----------------------------------------------------------------------------------------
Set WshShell =CreateObject("WScript.Shell")
Set fso = CreateObject("scripting.filesystemobject")
Set tx = fso.createTextFile("c:\txx.txt", True, True)
pth=replace(wscript.scriptfullname,wscript.scriptname,"")
call ScanF(pth)
tx.Close
Set tx = Nothing
set wshshell = nothing
set fso = nothing
msgbox "Done!"
'--------------------------------------------------------------------------------------
function ScanF(pt)
on error resume next
Set fo = fso.GetFolder(pt)
tx.writeline fo.path & "\ ......."
For Each fi In fo.Files
tx.writeline vbtab & vbtab & fi.name
next
For Each sfdr In fo.SubFolders
call ScanF(sfdr.path & "\")
Next
on error goto 0
end function
หากต้องการทดสอบให้ทำตามดังนี้
- คัดลอกทั้งหมด ลงใน notepad
- เซฟให้เป็นนามสกุล .vbs
- แนะนำ ให้วางไว้ในโฟลเดอร์ใดๆ ก็ตามที่มีโฟลเดอร์ย่อย จำนวนน้อยๆ ชั้น เพื่อการทดสอบที่รวดเร็ว
- ดับเบิ้ลคลิ๊กที่ไฟล์ แล้วไปเปิดดูผลงานที่ C:\txx.txt (สร้างขึ้นมาอัตโนมัติ ดูเสร็จก็ลบทิ้งได้เลย)
อย่าลืมว่าจุดประสงค์ของตัวอย่างนี้คือ .. ตัวอย่างการวนลูปเพื่อตรวจสอบไฟล์ในโฟลเดอร์ทุกระดับชั้น
7 @R05926
โอ้ มันเป็นอย่างนี้นี่เอง ไม่ลืมวัตุประสงค์ครับ ว่าแต่ Apply ไปใช้ อย่างอื่น
น่ากลัวเหมือนกันนะนี่ ขอบคุณครับ
น่ากลัวเหมือนกันนะนี่ ขอบคุณครับ
8 @R08799
ออุญาตินำกระทู้เก่ามาถามต่อน่ะครับ
อยากให้ชื่อไฟล์ทั้งหมด ในโฟลเดอร์ ไปอยู่ใน table ต้องทำยังไงครับ
ผมลองศึกษาด้วยตัวเองหลายวันแล้วทำไม่ได้ เลยมาเห็นกระทู้นี้
น่าจะประยุกต์ได้ แต่ไม่รู้ว่าต้องทำยังไงครับ
คือว่าผมจะให้ combobox แสดงรายชื่อไฟล์ในโฟลเดอร์ ให้ User
เลือกไฟล์(.csv) เพื่อimport เข้าอีก table ครับ
อีกอย่างครับ
pth=replace(wscript.scriptfullname,wscript.scriptname,"")
ใช้ยังไงครับ แปลว่าอะไรครับ
(pt) คืออะไรครับ
อยากให้ชื่อไฟล์ทั้งหมด ในโฟลเดอร์ ไปอยู่ใน table ต้องทำยังไงครับ
ผมลองศึกษาด้วยตัวเองหลายวันแล้วทำไม่ได้ เลยมาเห็นกระทู้นี้
น่าจะประยุกต์ได้ แต่ไม่รู้ว่าต้องทำยังไงครับ
คือว่าผมจะให้ combobox แสดงรายชื่อไฟล์ในโฟลเดอร์ ให้ User
เลือกไฟล์(.csv) เพื่อimport เข้าอีก table ครับ
อีกอย่างครับ
pth=replace(wscript.scriptfullname,wscript.scriptname,"")
ใช้ยังไงครับ แปลว่าอะไรครับ
(pt) คืออะไรครับ
9 @R08800
ก็เอาไปวางในโมดูลแล้วหาวิธีเรียกใช้เอาเองครับ
Dim fso As New FileSystemObject
Dim fo As Folder
dim sfdr As Folder
Dim fi As File
Dim pth As String
function ScanF(pt)
on error resume next
Set fo = fso.GetFolder(pt)
For Each fi In fo.Files
' ใส่เงื่อนไขในการหา อยากได้ .csv ก็ระบุไป
if right(lcase(fi.name),4)=".csv" then _
docmd.runsql "Insert into table1(field1) values('" & fi.name & "');"
next
' ถ้าไม่อยากให้มีการหาในโฟลเดอร์ย่อย ก็ไม่ต้องเอาสามบรรทัดนี้
For Each sfdr In fo.SubFolders
call ScanF(sfdr.path & "\")
Next
on error goto 0
end function
------------
pth=.... นั่นคือการหาชื่อพาธครับ ว่าตอนนี้โค้ดกำลังทำงานอยู่ใน path ใดใน hdd ของเรา เช่น C:\ หรือ D:\New folder\ เป็นต้น
งานของคุณอาจไม่จำเป็น เพราะคุณรู้มันอยู่แล้วว่าอยู่ที่ไหน
ดังนั้นคุณก็ส่งค่า พาธ เข้าไปในฟังก์ชั่นได้เลย เช่น
ScanF("D:\Stock")
เป็นต้น
-----------
(pt) คืออะไร
มันคือ อาร์กิวเมนต์ ของฟังก์ชั่นครับ ไว้คอยรับค่าข้อมูลที่ฟังก์ชั่นต้องการใช้
ถ้ามองจากภายในฟังก์ชั่น มันก็คือตัวแปรตัวหนึ่ง
ถ้ามองจากภายนอก เราเรียกว่า อาร์กิวเมนต์
เพราะว่าฟังก์ชั่นนี้ เป็นฟังก์ชั่นแบบกึ่งสำเร็จ ทำงานในตัวเองให้สมบูรณ์ไม่ได้ ยังต้องการค่าอยู่ค่าหนึ่ง นั่นคือ พาธ
ฟังก์ชั่นนี้เอาไว้ค้นหาชื่อไฟล์
ถ้าฟังก์ชั่นมันพูดได้ เวลาที่เราสั่งงานมัน มันก็คงพูดว่า "จะให้หาที่ไหนครับ"
คำตอบตรงนั้นแหละครับ ที่มันต้องการ เราก็เลยตั้งค่าตัวแปรมาคอยรับคำตอบ
อย่างตัวอย่างเรียกใช้ ScanF("D:\Stock") นั่นคือสั่งให้มันหาไฟล์ในโฟล์เดอร์ D:\Stock ครับ
หรืออีกนัยหนึ่ง D:\Stock คือค่าที่เราส่งให้กับตัวแปร pt
Dim fso As New FileSystemObject
Dim fo As Folder
dim sfdr As Folder
Dim fi As File
Dim pth As String
function ScanF(pt)
on error resume next
Set fo = fso.GetFolder(pt)
For Each fi In fo.Files
' ใส่เงื่อนไขในการหา อยากได้ .csv ก็ระบุไป
if right(lcase(fi.name),4)=".csv" then _
docmd.runsql "Insert into table1(field1) values('" & fi.name & "');"
next
' ถ้าไม่อยากให้มีการหาในโฟลเดอร์ย่อย ก็ไม่ต้องเอาสามบรรทัดนี้
For Each sfdr In fo.SubFolders
call ScanF(sfdr.path & "\")
Next
on error goto 0
end function
------------
pth=.... นั่นคือการหาชื่อพาธครับ ว่าตอนนี้โค้ดกำลังทำงานอยู่ใน path ใดใน hdd ของเรา เช่น C:\ หรือ D:\New folder\ เป็นต้น
งานของคุณอาจไม่จำเป็น เพราะคุณรู้มันอยู่แล้วว่าอยู่ที่ไหน
ดังนั้นคุณก็ส่งค่า พาธ เข้าไปในฟังก์ชั่นได้เลย เช่น
ScanF("D:\Stock")
เป็นต้น
-----------
(pt) คืออะไร
มันคือ อาร์กิวเมนต์ ของฟังก์ชั่นครับ ไว้คอยรับค่าข้อมูลที่ฟังก์ชั่นต้องการใช้
ถ้ามองจากภายในฟังก์ชั่น มันก็คือตัวแปรตัวหนึ่ง
ถ้ามองจากภายนอก เราเรียกว่า อาร์กิวเมนต์
เพราะว่าฟังก์ชั่นนี้ เป็นฟังก์ชั่นแบบกึ่งสำเร็จ ทำงานในตัวเองให้สมบูรณ์ไม่ได้ ยังต้องการค่าอยู่ค่าหนึ่ง นั่นคือ พาธ
ฟังก์ชั่นนี้เอาไว้ค้นหาชื่อไฟล์
ถ้าฟังก์ชั่นมันพูดได้ เวลาที่เราสั่งงานมัน มันก็คงพูดว่า "จะให้หาที่ไหนครับ"
คำตอบตรงนั้นแหละครับ ที่มันต้องการ เราก็เลยตั้งค่าตัวแปรมาคอยรับคำตอบ
อย่างตัวอย่างเรียกใช้ ScanF("D:\Stock") นั่นคือสั่งให้มันหาไฟล์ในโฟล์เดอร์ D:\Stock ครับ
หรืออีกนัยหนึ่ง D:\Stock คือค่าที่เราส่งให้กับตัวแปร pt
Time: 0.3426s
ถามว่าแนะนำไหม ตอบ ไม่แนะนำครับ เพราะเครื่องทำงานหนักเกินความจำเป็นใช้เวลานานเกินความจำเป็น ยิ่งในยุคปัจจุบัน hdd ของแต่ละคนมีความจุใหญ่ขึ้น การจะให้หาทั่วทั้ง hdd เป็นเรื่องที่ต้องใช้เวลาและทรัพยากรเกินความจำเป็น
หรือถ้าต้องการทำจริงๆ ขอแนะนำให้ มีระบบจำกัดบริเวณของการค้นหาด้วยครับ
ถามว่าต้องการให้แสดงผล ทั้งชื่อและ?าธของไฟล์ที่หน้าฟอร์มได้หรือไม่
ตอบ ถ้าการค้นหาสำเร็จก็แสดงผลได้ครับ
ถามว่าต้องการให้ผลที่แสดง สามารถเป็นลิงค์เพื่อให้เปิดไฟล์ดังกล่าวได้เลยทำได้หรือไม่
ตอบ ทำได้ครับ เพราะ Excel เป็น Automation กับ Access อยู่แล้ว ดังนั้นใช้คำสั่ง FollowHyperlink ได้เลยครับ หรือถ้าจะประยุกต์ไปใช้กับไฟล์ชนิดอื่นที่ไม่ได้เป็น Automation กัน ก็ยังสามารถใช้คำสั่ง Shell ได้ครับ