Page 1 of 1

คำถาม VBA จะไม่ให้ User ใช้งานไฟล์ถ้าเปิดใน networkdrive

Posted: Fri Feb 27, 2015 7:25 pm
by eieisung
เนื่องจากตอนนี้กระจายงานให้ user ผ่านทาง Network Drive มีหลาย Path
และด้วยจำนวน User มีหลายร้อยคนบางคนชอบเปิดไฟล์บน Network Drive เลย ทำให้ช้า อืด ไฟล์มีปัญหา

ดังนั้น ผมจึงอยากตรวจสอบว่าถ้าเค้าเปิดไฟล์นี้บน Network Drive อยู่ให้ปิดไฟล์อัตโนมัติครับ

คำถามคือ จะทำอย่างไร ถึงจะรู้ว่าที่ตั้งไฟล์ที่กำลังเปิดนี้ อยู่บน Network Drive ครับ

Re: คำถาม VBA จะไม่ให้ User ใช้งานไฟล์ถ้าเปิดใน networkdrive

Posted: Fri Feb 27, 2015 7:28 pm
by snasui
:D ลองตรวจสอบ Path ของไฟล์ที่กำลังเปิดด้วย Code ว่าได้ค่ามาอย่างไร แตกต่างจาก Path ปกติที่ต้องการให้ใช้อย่างไร ใช้ความแตกต่างนั้นในการปิดไฟล์ครับ

Re: คำถาม VBA จะไม่ให้ User ใช้งานไฟล์ถ้าเปิดใน networkdrive

Posted: Sun Mar 01, 2015 2:36 pm
by menem

Code: Select all

Sub y()
    Dim fs, d, s, t
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set d = fs.GetDrive(Left(ActiveWorkbook.Path, 2))
    Select Case d.DriveType
        Case 0: t = "Unknown"
        Case 1: t = "Removable"
        Case 2: t = "Fixed"
        Case 3: t = "Network"
        Case 4: t = "CD-ROM"
        Case 5: t = "RAM Disk"
    End Select
    s = "Drive " & d.DriveLetter & ": - " & t
    MsgBox s
    
End Sub

อ้างอิงจาก
https://msdn.microsoft.com/en-us/librar ... 64195.aspx


หรือปรับเป็น

Code: Select all

Sub yy()
    Dim fs, d, s, t
    Set fs = CreateObject("Scripting.FileSystemObject")
    For Each d In fs.drives
    Select Case d.DriveType
        Case 0: t = "Unknown"
        Case 1: t = "Removable"
        Case 2: t = "Fixed"
        Case 3: t = "Network"
        Case 4: t = "CD-ROM"
        Case 5: t = "RAM Disk"
    End Select
    s = "Drive " & d.DriveLetter & ": - " & t
    MsgBox s
    Next
End Sub

Re: คำถาม VBA จะไม่ให้ User ใช้งานไฟล์ถ้าเปิดใน networkdrive

Posted: Sun Mar 01, 2015 4:18 pm
by eieisung
ตอบคุณ snasui
ขอบคุณครับ
แต่เนื่องจาก user แต่ละคนมีพาทย่อยเป็นของตัวเอง และจะไม่มีสิทธิใช้พาทใหญ่ร่วมกัน
ดังนั้น ที่เครื่องของแต่ละคนจะถูก Map Network Drive ด้วยพาทของตัวเองเท่านั้น
Drive ที่ Map ขึ้นมาก็มีต่างๆ เช่น T: S: V: หรืออื่นๆตามแต่ที่ Drive ในเครื่องนั้นจะอำนวย
และเมื่อใช้คำสั่งตรวจสอบพาท จะไม่ได้พาทที่เป็น Network Drive จริงๆ(\\brabra\pathใหญ่\pathย่อย)
แต่จะได้เป็น (T: S: V: หรืออื่นๆ)\pathย่อย แทน จึงทำให้ตรวจสอบไม่ได้ว่าเป็น Network Drive จริงหรือไม่ครับ

ตอบคุณ menem
ขอบคุณครับ

Re: คำถาม VBA จะไม่ให้ User ใช้งานไฟล์ถ้าเปิดใน networkdrive

Posted: Sun Mar 01, 2015 5:37 pm
by snasui
eieisung wrote:ตอบคุณ snasui
ขอบคุณครับ
แต่เนื่องจาก user แต่ละคนมีพาทย่อยเป็นของตัวเอง และจะไม่มีสิทธิใช้พาทใหญ่ร่วมกัน
ดังนั้น ที่เครื่องของแต่ละคนจะถูก Map Network Drive ด้วยพาทของตัวเองเท่านั้น
Drive ที่ Map ขึ้นมาก็มีต่างๆ เช่น T: S: V: หรืออื่นๆตามแต่ที่ Drive ในเครื่องนั้นจะอำนวย
และเมื่อใช้คำสั่งตรวจสอบพาท จะไม่ได้พาทที่เป็น Network Drive จริงๆ(\\brabra\pathใหญ่\pathย่อย)
แต่จะได้เป็น (T: S: V: หรืออื่นๆ)\pathย่อย แทน จึงทำให้ตรวจสอบไม่ได้ว่าเป็น Network Drive จริงหรือไม่ครับ
:D ตรวจสอบแล้วไม่ได้ผลเช่นไรก็โพสต์ Code มาถามกันต่อ ที่ผมตอบไปก็เป็นหลักการในการตรวจสอบเพื่อหาความแตกต่างเท่านั้นครับ