:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

VBA Get File Name

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Jirawat namrach
Member
Member
Posts: 136
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

VBA Get File Name

#1

Post by Jirawat namrach »

รบกวนสอบถามหน่อยครับ ตามตัวอย่างมีการเปิด Folder ตาม cell G1:G2 ซึ่งเป็น Folder ย่อยใน ...Register\Drawing Control Copy SCAN\ และ Copy ชื่อไฟล์ มาวาง ถ้าต้องการค้นหาไฟล์ .pdf และ .jpg ใน ...Register\Drawing Control Copy SCAN\ ทั้งหมดที่เดียว โดยไม่ต้องกำหนดตาม G1:G25 ต้องแก้ Code ยังไงครับ

Code: Select all

For i = 1 To r
Path = "\\Lbox\eds\DCC\Register\Drawing Control Copy SCAN\" & Range("g" & i).Value
Set fso = New Scripting.FileSystemObject
Set fldr = fso.GetFolder(Path)
x = Range("a" & Rows.Count).End(xlUp).Offset(1, 0).Row
For Each fil In fldr.Files
s.Sheets("Reg").Cells(x, 1) = fso.GetBaseName(fil.Name)
x = x + 1
Next fil
Next i

You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30796
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: VBA Get File Name

#2

Post by snasui »

:D ลองศึกษาการ Loop ไปยัง Sub Folder ตาม Link นี้ดูแล้วปรับปรุง Code ดู ติดตรงไหนค่อยถามกันต่อครับ

https://snasui.com/viewtopic.php?t=19553
https://snasui.com/viewtopic.php?t=2710
Jirawat namrach
Member
Member
Posts: 136
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

Re: VBA Get File Name

#3

Post by Jirawat namrach »

ขอบคุณครับอาจารย์
Jirawat namrach
Member
Member
Posts: 136
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

Re: VBA Get File Name

#4

Post by Jirawat namrach »

สอบถามเพิ่มเติมครับ ตอนนี้ติดปัญหาว่า ตัว Code จะค้นหาเฉพาะไฟล์ใน Subfolder แต่บาง Folder ไม่มี Subfolder มีไฟล์ PDF เลย ต้องแก้ไขแบบไหน ให้สามารถค้นหาไฟล์ทั้งหมดใน Folder ครับ ไม่ว่าจะมี Sub หรือไม่มีก็ตาม

Code: Select all

Path = "\\Lbox\eds"
Set fso = New FileSystemObject
Set basefolder = fso.GetFolder(Path)
Set SubFolders = basefolder.SubFolders
l = 1
For Each folder In SubFolders
    Set files = folder.files
    For Each File In files
    If Right(File.Name, 4) = ".pdf" Then
    With Sheets("Reg")
        .Cells(l, 1).Value = fso.GetBaseName(File.Name)
    l = l + 1
    End With
    End If
    Next File
Next folder
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30796
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: VBA Get File Name

#5

Post by snasui »

:D กรุณาแนบตัวอย่างโครงสร้างของ Path พร้อมไฟล์ภายในที่จะใช้งานมาด้วย จะได้ช่วยทดสอบครับ
Jirawat namrach
Member
Member
Posts: 136
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

Re: VBA Get File Name

#6

Post by Jirawat namrach »

แนบไฟล์ตัวอย่างครับ รบกวนด้วยครับอาจารย์
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30796
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: VBA Get File Name

#7

Post by snasui »

:D ตัวอย่าง Code ครับ

Code: Select all

Dim r As Long

Sub main()
    
    With Sheets(1).Range("A1")
        .Formula = "Folder contents:"
        .Font.Bold = True
        .Font.Size = 12
    End With
    
    With Sheets(1)
        .Range("A3").Value = "Folder Path:"
        .Range("B3").Value = "Folder Name:"
        .Range("C3").Value = "Size:"
        .Range("D3").Value = "Subfolders:"
        .Range("E3").Value = "Files:"
        .Range("F3").Value = "File Names:"
        .Range("A3:G3").Font.Bold = True
    End With
    ' and include subfolders (true/false)
    ListFolders = "C:\Downloads\test", True
    Columns("A:F").AutoFit
End Sub


Sub ListFolders(SourceFolderName As String, IncludeSubfolders As Boolean)
    DoEvents
    Application.DisplayAlerts = False
    
    Dim fso As Scripting.FileSystemObject
    Dim SourceFolder As Scripting.folder, SubFolder As Scripting.folder
    
    Set fso = New Scripting.FileSystemObject
    Set SourceFolder = fso.GetFolder(SourceFolderName)
    
    On Error Resume Next
    
    r = Range("f65536").End(xlUp).Row + 1
    
    With Sheets(1)
        .Cells(r, 1).Value = SourceFolder.Path
        .Cells(r, 2).Value = SourceFolder.Name
        .Cells(r, 3).Value = SourceFolder.Size
        .Cells(r, 4).Value = SourceFolder.SubFolders.Count
        .Cells(r, 5).Value = SourceFolder.files.Count
    End With
    
    Findfiles (SourceFolder.Path)
    
    If IncludeSubfolders Then
        For Each SubFolder In SourceFolder.SubFolders
            ListFolders SubFolder.Path, True
        Next SubFolder
        Set SubFolder = Nothing
    End If
      
    Set SourceFolder = Nothing
    Set fso = Nothing

End Sub

Sub Findfiles(d As String)
    Dim fname As String
    
    fname = Dir(d & "\*.pdf*")
    Do While fname <> ""
        Sheets(1).Cells(r, 6).Value = fname
        r = r + 1
        fname = Dir
    Loop
    
End Sub
กำหนดค่า "C:\Downloads\test" ใน Code ให้เป็น Path ที่ต้องการใช้งานจริง Code นี้นำมาจาก Link ตัวที่สองที่ให้ไว้ด้านบนครับ :roll:

กรณีต้องการคลิกด้วยปุ่ม ให้กำหนด Sub main ให้กับปุ่มนั้นครับ
Jirawat namrach
Member
Member
Posts: 136
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

Re: VBA Get File Name

#8

Post by Jirawat namrach »

ขอบคุณครับอาจารย์
Post Reply