ค้นหาไฟล์ตามลำดับชั้น
กระทู้เก่าบอร์ด อ.Yeadram

 1,977   14
URL.หัวข้อ / URL
ค้นหาไฟล์ตามลำดับชั้น

อาจารย์ครับผมจะเขียน Code ไงดีครับ
แบบว่า
ให้กดปุ้มชื่อว่า Botton1 แล้วค้นหาไดร์ที่สามารถเปิด ยกตัวอย่าง

D:\test\sub01\subf02\text.xls

1.ถ้ามีไฟล์ให้เปิดไฟล์ text.xls
2.แต่ไม่มีไฟล์ text.xls ก็ให้ เปิด Fonder ลำดับต่อไปคือ subf02
3.แต่ถ้าไม่มี Fonder ชื่อ subf02 อีก ก็ให้ เปิด Fonder ลำดับต่อไปคือ sub01
4.แต่ถ้า Fonder ก็ให้เปิด ไดร์ ตามลำดับ D:


อาจารย์ครับผมยังมือใหม่นะคราบ

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

1 @R18205
อาจารย์....คราบ...ช่วยแนะนำผมที่
2 @R18207
แก้ไขคำถามนิดนะครับ

อาจารย์ครับผมจะเขียน Code ไงดีครับ
แบบว่า
ให้กดปุ้มชื่อว่า Botton1 แล้วค้นหาไดร์ที่สามารถเปิด ยกตัวอย่าง

D:\test\sub01\subf02\text.xls

1.ถ้ามีไฟล์ให้เปิดไฟล์ text.xls
2.แต่ไม่มีไฟล์ text.xls ก็ให้ เปิด Fonder ลำดับต่อไปคือ subf02
3.แต่ถ้าไม่มี Fonder ชื่อ subf02 อีก ก็ให้ เปิด Fonder ลำดับต่อไปคือ sub01
4.แต่ถ้าไม่มี Fonder ชื่อ sub01 อีก ก็ให้ เปิด Fonder ลำดับต่อไปคือ test
5.แต่ถ้าไม่มี Fonder ชื่อ test อีก ก็ให้ เปิด   D:\


อาจารย์ครับผมยังมือใหม่นะคราบ
3 @R18208
1. จำเป็นต้องเรียงลำดับชื่อโฟลเดอร์ที่ต้องการหาหรือป่าวครับ เช่น ต้องหาใน sub1 ก่อน ไม่มีแล้วค่อย sub2 หรือไม่จำเป็น
2. หรือแค่ต้องการหาไฟล์สมมุติชื่อ text.xls ที่ไดร์ฟ D: ไม่ว่าจะอยู่ในโฟลเดอร์ไหนก็ตาม
3. แล้วถ้าเกิดชื่อไฟล์ text.xls มีมากกว่าหนึ่งไฟล์ คืออยู่คนละโฟลเดอร์คุณจะทำยังไง

ปล. ผมถามเผื่อท่านอื่นจะได้ช่วยคิดให้ได้นะครับ ผมยังไม่มีเวลาถ้ารีบคงต้องรบกวนท่านอื่นช่วยตอบ
4 @R18210
อาจารย์ครับจริงๆแล้วอยากจะเปิดไฟล์ในไดร์
D:\test\sub01\subf02\text.xls นี้แหละครับ

แต่บางครั้งอาจจะไม่มีไฟล์ text.xls อยู่ในโฟนเดอร์ subf02 นี้แต่มีโฟนเดอร์
มีโฟนเดอร์อยู่ จุดประส่งค์ของผมคืออยากจะเปิดไปยัง directory
ที่ใกล้ที่สุดที่ไฟล์ text.xls เก็บอยู่ ดังนั้นตอคำถามครับอาจารย์อเป็นข้อๆนะคราบ

1. จำเป็นต้องเรียงลำดับชื่อโฟลเดอร์ที่ต้องการหาครับ เพื่อนำไปเปิดไฟล์
หรือ directory ที่ใกล้ที่สุดครับ และ ไฟล์ text.xls จะอยู่ในdirectoryนี้เท่านั้น
2. ต้องการหา text.xls ในเฉพาะ D:\test\sub01\subf02\ เท่านั้นคราบ
3. แต่ถ้าไฟล์ text.xls มีมากกว่าหนึ่งไฟล์ ก็ไม่สนใจครับแค่ต้องการจะเปิด
directory ตามลำดับครับเพื่อที่จะเข้าแหล่งจัดเก็บที่ใกล้ที่สุดครับ

อาจารย์ ช่วยผมที่นะคราาบ
5 @R18211
หมายถึงถ้ามีไฟล์ชื่อ text.xls ในพาธ
D:\test\sub01\subf02\text.xls
ก็ใให้เปิดไฟล์เลย แต่ถ้าไม่มีก็ถอยไปหาที่
D:\test\sub01\text.xls
ถ้ามีก็ไห้เปิดเลย แต่ถ้าไม่มีก็ถอยไปหาที่
D:\test\text.xls
ถ้ามีก็ไห้เปิดเลย แต่ถ้าไม่มีก็ถอยไปหาที่ Root
D:\text.xls
ถ้ามีก็ให้เปิด ไม่มีก็ขึ้นข้อความว่า ไม่พบไฟล์ อะไรแบบนี้หรือเปล่าครับ
6 @R18212
เกือบถูกครับ แตเป็นแบบนี้ครับอาจารย์

หมายถึงถ้ามีไฟล์ชื่อ text.xls ในพาธ
D:\test\sub01\subf02\text.xls ก็ให้เปิดไฟล์เลย

แต่ถ้าไม่มีก็ถอยไปหาที่
D:\test\sub01\subf02

แต่ถ้าไม่มีก็ถอยไปหาที่
D:\test\sub01

แต่ถ้าไม่มีก็ถอยไปหาที่
D:\test

แต่ถ้าไม่มีก็ถอยไปหาที่
D:

ถ้ามีก็ให้เปิด ไม่มีก็ขึ้นข้อความว่า ไม่พบไฟล์ อะไรแบบนี้หรือเปล่าครับ

เป็นแบบนี้ครับอาจารย์
7 @R18213
ผมว่าคุณเข้าใจไรผิดป่าวครับ

D:\test\sub01\subf02\text.xls
D:\test\sub01\subf02

ส่วน text.xls คือชื่อไฟล์ที่อยู่ในพาะ D:\test\sub01\subf02

มันคือพาธเดียวกันนะครับ
ทับทวนแนวคิดใหม่ให้ดีๆก่อนนะครับ ไม่งั้นเขียนโค๊คออกมาแล้วก็ใช้ไม่ได้อยู่ดีอะครับ
8 @R18214
เกือบถูกครับ แตแก่นิดนึง เป็นแบบนี้ครับอาจารย์
หมายถึงถ้ามีไฟล์ชื่อ text.xls ในพาธ
D:\test\sub01\subf02\text.xls ก็ให้เปิดไฟล์เลย
แต่ถ้าไม่มีก็ถอยไปเปิดโฟนเดอร์
D:\test\sub01\subf02\
แต่ถ้าไม่มีก็ถอยไปเปิดโฟนเดอร์
D:\test\sub01\
แต่ถ้าไม่มีก็ถอยไปเปิดโฟนเดอร์
D:\test\
แต่ถ้าไม่มีก็ถอยไปเปิด
D:\
ถ้ามีก็ให้เปิด ไม่มีก็ขึ้นข้อความว่า ไม่พบไฟล์ อะไรแบบนี้หรือเปล่าครับ
เป็นแบบนี้ครับอาจารย์
9 @R18215
555 คุณกับผมเข้าใจค่าพาธต่างกันอะครับ

D:\test\sub01\subf02\text.xls
D:\test\sub01\subf02\

สำหรับผมคือพาธเดียวกันถอยไม่ได้ คุณลองทำความเข้าใจเรื่อง Path ดูก่อนดีไม๊ครับ จะได้ออกแบบได้เข้าใจตรงกัน
10 @R18216
ถ้ามีไฟล์ใน Path ก็ให้เปิดไฟล์ครับ
แต่ถ้าไม่มีไฟล์อยู่ก็ให้เปิดโฟนเดอร์แทนครับ แบบนี้ครับอาจารย์

แต่บางครั้งมันไมมีโฟนเดอร์ subf02 ก็เลยต้องถอยไปเปิดโฟนเดอร์ sub01แทน
และบางครั้งไม่มีโฟนเดอร์ sub01จึงเปิดโฟนเดอร์ลำดับถัดมา test แทนครับ

ผมก็มือให้ครับอาจารย์ ยังไงผมขอความกรุณาผมทีครับ
11 @R18217
- จากคำพูดคุณที่ว่า
ถ้ามีไฟล์ใน Path ก็ให้เปิดไฟล์ครับ
แต่ถ้าไม่มีไฟล์อยู่ก็ให้เปิดโฟนเดอร์แทนครับ

คือตกลงหมายถึง ถ้ามีไฟล์ใน D:\test\sub01\subf02\text.xls ก็ให้สั่งเปิดไฟล์ text.xls
แต่ถ้าไม่มีก็ให้เป็นการเปิด Explorer พาธไปที่ D:\test\sub01\subf02\ แทน
แต่ถ้าไม่มีโฟลเดอร์ subf02 ให้เปิดอีก ก็เปิด Explorer พาธไปที่ D:\test\sub01\
ประมาณนี้หรือครับ เหนื่อยจัง

และอีกอย่างนะครับ ผมไม่เชื่อว่าคุณเขียนคำว่า Fonder คือ Folder, โฟนเดอร์ คือ โฟลเดอร์ ผิด ผมคิดว่าคุณตั้งใจเขียนแบบนี้เอง

ขอแนะนำนิดนะครับ ควรใช้ศัพท์ให้ถูกต้องนะครับ ผมก็ไม่ใช่คนใช้คำถูกเท่าไหร่ แต่เพื่อการสื่อสารกับคนอื่น และคำว่า Folder มันใช้ในฟังก์ชั่น ชุดคำสั่ง และ Property ของฟังก์หลายตัว เช่น VBScript, Scripting Runtime ใช้จนติดแล้วอีกหน่อยคุณจะ งง และทำให้คนอื่น งง ตามคุณไปด้วยนะครับ
12 @R18218
ประมาณนี้แหละครับครัย อาจารย์ เข้าใจถูกแล้ว ผมต้องขอโทษที่พิมพ์ผิดจริงๆ แต่ก็ไม่รู้จะเข้าไปแก้ตรงไหน พอรู้ตัวอีกทีก็ post ไปแล้วครับ ต้อขอโทษจริงๆที่ต้องให้อาจารย์เหนื่อย
แต่อาจารย์ช่วยผมทีนะครับ
13 @R18221
ไม่รู้จะตรงความต้องการแค่ไหนนะครับ ปรับแต่งดูแล้วกันครับ

1. ใส่โค๊ดลงใน Module
Option Explicit

Public Sub TTT(sPath As String, sName As String)
    Dim strFile As String, Temp As String
    If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
    If sName Like "*\*" Then sName = Replace(sName, "\", "")
    Temp = sPath & sName
On Error GoTo err_msg
    strFile = Dir(Temp, vbNormal)
    Do While strFile = ""
        Temp = Last_Chr(Temp, "\")
        strFile = Dir(Temp, vbDirectory)
        If Right(Temp, 1) = ":" And strFile = "" Then MsgBox "No File": Exit Do
    Loop
        CreateObject("WScript.Shell").Run """" & Temp & """"
err_exit: Exit Sub
err_msg: MsgBox "ใส่ค่าฟังก์ชั่นผิดพลาด", vbInformation, "Error": Resume err_exit
End Sub
Private Function Last_Chr(txt_String As String, txt_Chr As String) As String
    Dim TCount As Integer, NCount As Integer
    NCount = 1
    Do
        TCount = InStr(NCount, txt_String, txt_Chr)
        If TCount > 0 Then
            NCount = 1 + TCount
        End If
    Loop Until TCount = 0
    Last_Chr = Left(txt_String, NCount - 2)
End Function


2. ใส่โค๊ดที่ปุ่ม Event > On Click

Call TTT("D:\test\sub01\subf02\", "text.xls")
14 @R18224
อาจารย์ครับ ทำได้แล้วครับ

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