กระทู้เก่าบอร์ด อ.Yeadram
        
           3,357   4		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        ยกเลิกการซ่อนไฟล์ Hidden      
    
      เรียนถามอาจารย์ทุกท่าน 
อยากจะยกเลิกไฟล์ที่ถูกซ่อนทั้งหมดในโฟนเดอร์ที่ชื่อ SCAN โดยใช้ ACCESS ผมจะเขียน CODE ยังไงครับ
    
  อยากจะยกเลิกไฟล์ที่ถูกซ่อนทั้งหมดในโฟนเดอร์ที่ชื่อ SCAN โดยใช้ ACCESS ผมจะเขียน CODE ยังไงครับ
				4 Reply in this Topic. Dispaly 1  pages and you are on page number 1 
				
        
    2 @R13081    
        
  
      อาจารย์ PichaiTC หรืออาจารย์ท่านไหนก็ได้ช่วยใส่รายละเอียด ตัวอย่าง
Sample ให้ผมที่ ผมไม่เก่งเรื่องโค๊ตแต่ก็พอจะเข้าใจบ้างนิดหน่อย
    
    
  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 แนะนำ เลยลองเขียนเป็นฟังก์ชั่นง่ายๆดูครับ
การใช้งาน
- นำฟังก์ชั่นข้างบน ใส่ลงใน Module
- สร้างปุ่มบนฟอร์ม ใส่โค๊ดด้านล่างนี้ที่ Event > On Click ของปุ่ม เช่น อยากแก้ในโฟลเดอร์ SCAN ที่อยู่ในไดร์ฟ D:
- UnHidden ("D:\SCAN\") ' ต้องมี \ ต่อท้ายเสมอนะครับ
- แล้วใช้งานได้เลยครับ
ลองดูแล้วปรับแก้เอานะครับ อธิบายมากกว่านี้ผมคงไม่ไหวแล้ว รายละเอียดคงต้องค่อยๆเรียนรู้กันไปครับ
    
  ส่วนตัว อ่านคำถามแล้ว นึกถึงการใช้ 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
      Time: 0.0600s
    
      
		
ใช้ function
Dir()
SetAttr
แล้ววน Loop เอา