ยกเลิกการซ่อนไฟล์ Hidden
กระทู้เก่าบอร์ด อ.Yeadram

 3,137   4
URL.หัวข้อ / URL
ยกเลิกการซ่อนไฟล์ Hidden

เรียนถามอาจารย์ทุกท่าน

อยากจะยกเลิกไฟล์ที่ถูกซ่อนทั้งหมดในโฟนเดอร์ที่ชื่อ SCAN โดยใช้ ACCESS ผมจะเขียน CODE ยังไงครับ

4 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R13077
ขอโทษนะครับ ไม่มีเวลาใส่รายละเอียดให้

ใช้ function
Dir()
SetAttr
แล้ววน Loop เอา
2 @R13081
อาจารย์ PichaiTC หรืออาจารย์ท่านไหนก็ได้ช่วยใส่รายละเอียด ตัวอย่าง
Sample ให้ผมที่ ผมไม่เก่งเรื่องโค๊ตแต่ก็พอจะเข้าใจบ้างนิดหน่อย

3 @R13092
ปกติไม่เคยทำเลยนะครับ เลยไม่รู้ว่ามีฟังก์ชั่นที่ง่ายกว่านี้หรือเปล่า แบบว่าสั่ง Attrib all ได้เลย (หากท่านใดอ่านแล้วมีวิธีแนะนำที่ดีกว่าก็เชิญเลยนะครับ)
ส่วนตัว อ่านคำถามแล้ว นึกถึงการใช้ visual basic script ก่อนเลย คิดว่าง่ายสุด คืออยากสั่ง Attrib ก็สั่งใน Prompt เลย เช่น
หากต้องการสั่ง Attrib ทุกไฟล์ในไดร์ฟ D: โฟลเดอร์ SCAN ที่เป็น Hidden ออก
1. ใน Windows เราก็เลือกในปุ่ม Start เลือกหัวข้อ Run คีย์ cmd
2. ย้ายตำแหน่งไปที่ไดร์ฟ D:
3. ไปยังโฟลเดอร์ DATA โดยใช้คำสั่ง CD\SCAN
4. สั่งยกเลิก Attrib Hidden ไฟล์ โดยใช้คำสั่ง Attrib *.* -h
5. เมื่อรูปแบบบนคำสั่ง DOS Prompt เป็นแบบนี้ เราก็มาเขียนในรูปแบบของ vba ได้ประมาณนี้:

    Dim objShell
    Set objShell = CreateObject("WScript.shell")
    Call objShell.Run("cmd /c CD C:\ & D: & CD\SCAN & Attrib *.* -h", 1, True)
    Set objShell = Nothing

ความยุ่งยากของการใช้ objShell.Run
- การต่อคำสั่งใน objShell.Run ใช้ & ซึ่งเหมือนกับการต่อ String ใน VBA ฉนั้นหากเราสร้างค่าตัวแปรแบบไม่กำหนดชื่อโฟลเดอร์ตายตัว จะต้องระวังเรื่องการต่อ String ซ้อน String ซึ่ง & ใน VBA กับ "&" ที่เป็น String สำหรับ objShell.Run หากไม่คล้องจะ งง มากๆ
- หากเป็น Long file name คือ ชื่อไฟล์ หรือ โฟลเดอร์ ที่ไม่ใช่รูปแบบของ ชื่อ 8 นามสกุล 3 ซึ่งต้องใช้รูปแบบของ "" คล่อมชื่อนั้นอีกทีบนคำสั่ง DOS

ซึ่งล้วนแต่ต้องมีพื้นฐานมาก่อนถึงจะเข้าใจอ่ะครับ จะเขียนก็อีกเยอะ
ก็เลยหันมาดูฟังก์ชั่นที่ คุณ PichaiTC แนะนำ เลยลองเขียนเป็นฟังก์ชั่นง่ายๆดูครับ

Function UnHidden(Path_name As String)
    Dim strFile As String
    Dim strText As String
    strText = ""
    strFile = Dir(Path_name, vbHidden)
    Do While strFile <> ""
        SetAttr Path_name & strFile, vbNormal ' หากต้องการเซ็ทเป็น Hidden เหมือนเดิม ให้ใช้เป็น vbHidden แทน vbNormal
        strFile = Dir() ' เปลี่ยนชื่อไฟล์ถัดไป
    Loop
    MsgBox "ยกเลิกค่า Attrib Hidden ไฟล์ทั้งหมด ในโฟลเดอร์ " & Path_name & " เรียบร้อยแล้ว"
End Function


การใช้งาน
- นำฟังก์ชั่นข้างบน ใส่ลงใน Module
- สร้างปุ่มบนฟอร์ม ใส่โค๊ดด้านล่างนี้ที่ Event > On Click ของปุ่ม เช่น อยากแก้ในโฟลเดอร์ SCAN ที่อยู่ในไดร์ฟ D:
- UnHidden ("D:\SCAN\") ' ต้องมี \ ต่อท้ายเสมอนะครับ
- แล้วใช้งานได้เลยครับ

ลองดูแล้วปรับแก้เอานะครับ อธิบายมากกว่านี้ผมคงไม่ไหวแล้ว รายละเอียดคงต้องค่อยๆเรียนรู้กันไปครับ
4 @R13093
แก้ไขหน่อยครับ สร้างตัวแปรเกินไปหน่อย เป็นแค่นี้พอครับ

Function UnHidden(Path_name As String)
    Dim strFile As String
    strFile = Dir(Path_name, vbHidden)
    Do While strFile <> ""
        SetAttr Path_name & strFile, vbNormal ' หากต้องการเซ็ทเป็น Hidden เหมือนเดิม ให้ใช้เป็น vbHidden แทน vbNormal
        strFile = Dir() ' เปลี่ยนชื่อไฟล์ถัดไป
    Loop
    MsgBox "ยกเลิกค่า Attrib Hidden ไฟล์ทั้งหมด ในโฟลเดอร์ " & Path_name & " เรียบร้อยแล้ว"
End Function

@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2289s