: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

Add path VBA

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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: 145
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

Add path VBA

#1

Post by Jirawat namrach »

รบกวนขอแนวทางปรับแต่ง Code เพื่อก็อปปี้ Path PDF ใน Folder ที่มีคำว่า "REPLACEMENT" เท่านั้นครับ

Code: Select all

    Dim oFSO As Object
    Dim oFolder As Object
    Dim oFile As Object, sf
    Dim i As Integer, colFolders As New Collection, ws As Worksheet
    
    Set ws = Sheets("Path")
    ws.Range("a1 : a5000").ClearContents
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFolder = oFSO.GetFolder("C:\Users\Lenovo\Desktop\PATH")
    
    colFolders.Add oFolder
    
    Do While colFolders.Count > 0
        Set oFolder = colFolders(1)
        colFolders.Remove 1
    
        For Each oFile In oFolder.files
            If Right(oFile, 7) = ".SLDDRW" Then
                ws.Cells(i + 1, 1) = oFolder.Path
                ws.Cells(i + 1, 2) = oFile.Name
                i = i + 1
            End If
        Next oFile


        For Each sf In oFolder.SubFolders
            colFolders.Add sf
        Next sf
    Loop
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30972
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add path VBA

#2

Post by snasui »

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

Code: Select all

'Other code
For Each oFile In oFolder.files
'   If Right(oFile, 7) = ".SLDDRW" Then
    If InStr(oFile, "REPLACEMENT") Then
        ws.Cells(i + 1, 1) = oFolder.Path
        ws.Cells(i + 1, 2) = oFile.Name
        i = i + 1
    End If
Next oFile
'Other code
Jirawat namrach
Member
Member
Posts: 145
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

Re: Add path VBA

#3

Post by Jirawat namrach »

ขอโทษครับอาจารย์ ผมสื่อสารผิดเอง ตัวอย่าง Code ของอาจารย์ ได้ข้อมูลมาทั้งหมดครับ ต้องการแค่ .SLDDRW รบกวนด้วยครับอาจารย์
User avatar
snasui
Site Admin
Site Admin
Posts: 30972
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add path VBA

#4

Post by snasui »

:D ยังไม่ค่อยเข้าใจครับ

สิ่งที่เขียนไว้เดิมคือต้องการเฉพาะไฟล์ที่มีคำว่า .SLDDRW ไม่ทราบว่าติดปัญหาส่วนใดและต้องการจะเพิ่มเงื่อนไขใดครับ

ลองดูว่าด้านล่างนี้คือสิ่งที่ต้องการหรือไม่ครับ

Code: Select all

'Other code
For Each oFile In oFolder.Files
    If InStr(oFile, "REPLACEMENT") Then
       If Right(oFile, 7) = ".SLDDRW" Then
            ws.Cells(i + 1, 1) = oFolder.Path
            ws.Cells(i + 1, 2) = oFile.Name
            i = i + 1
       End If
    End If
Next oFile
'Other code
Jirawat namrach
Member
Member
Posts: 145
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

Re: Add path VBA

#5

Post by Jirawat namrach »

ตาม Code ล่าสุด ได้ตามที่ต้องการครับ แต่อยากสอบถามเพิ่ม กรณีนี้เราสามารถระบุเจาะจงเป็น folder ได้หรือเปล่าครับ เพราะลักษณะ Code ที่ใช้งานนี้ มันจะไปค้นหาทุกไฟล์ แล้วมาเปรียบเทียบว่า มี "REPLACEMENT" และนามสกุล ".SLDDRW" หรือไม่ ทำให้การ Process ค่อนข้างนาน เนื่องจากไฟล์มีจำนวนมาก อย่างเช่น สามารถระบุ folder "C:\Users\Lenovo\Desktop\PATH\REPLACEMENT 3000" แล้วค้นหา .SLDDRW เสร็จแล้ว ก็ไป folder ถัดไป "C:\Users\Lenovo\Desktop\PATH\REPLACEMENT 4000" แล้วทำเหมือนกัน แบบนี้สามารถทำได้หรือเปล่าครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30972
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add path VBA

#6

Post by snasui »

Jirawat namrach wrote: Tue Feb 18, 2025 1:13 pm สามารถระบุ folder "C:\Users\Lenovo\Desktop\PATH\REPLACEMENT 3000" แล้วค้นหา .SLDDRW เสร็จแล้ว ก็ไป folder ถัดไป "C:\Users\Lenovo\Desktop\PATH\REPLACEMENT 4000" แล้วทำเหมือนกัน แบบนี้สามารถทำได้หรือเปล่าครับ
:D สามารถทำได้โดยเพิ่ม Procedure ขึ้นมา มีหน้าที่ส่งค่า Folder เป้าหมายไปดำเนินการใน Procedure เดิมสำหรับค้นหาไฟล์ ซึ่งต้องแปลงคำสั่งใน Procedure เดิมให้มี Parameter เพื่อรับค่า Folder เข้ามาดำเนินการ และหากมี Folder ที่ต้องส่งไปจัดการจำนวนมากอาจจะต้องเขียนให้ Loop จากค่าที่กำหนดไว้ในชีตหรือไฟล์ใด ๆ ไปใช้งานแทนเขียนเข้าไปตรง ๆ ใน Code

ตัวอย่าง Code เพื่อส่งไปจัดการแค่ 2 Folders ครับ

Code: Select all

Dim i As Long

Sub main()
    i = 0
    Call getpath2("C:\Users\Lenovo\Desktop\PATH\REPLACEMENT 3000")
    Call getpath2("C:\Users\Lenovo\Desktop\PATH\REPLACEMENT 4000")
End Sub

Sub getpath2(f As String)
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Dim oFSO As Object
    Dim oFolder As Object
    Dim oFile As Object, sf
'    Dim i As Integer, colFolders As New Collection, ws As Worksheet
    Dim colFolders As New Collection, ws As Worksheet
    Set ws = Sheets("Path")
'    ws.Range("a1 : a5000").ClearContents
    Set oFSO = CreateObject("Scripting.FileSystemObject")
'    Set oFolder = oFSO.GetFolder("C:\Users\Lenovo\Desktop\PATH")
    Set oFolder = oFSO.GetFolder(f)
    
    
    colFolders.Add oFolder
    
    Do While colFolders.Count > 0
        Set oFolder = colFolders(1)
        colFolders.Remove 1
    
        For Each oFile In oFolder.Files
            If InStr(oFile, "REPLACEMENT") Then
               If Right(oFile, 7) = ".SLDDRW" Then
                    ws.Cells(i + 1, 1) = oFolder.Path
                    ws.Cells(i + 1, 2) = oFile.Name
                    i = i + 1
               End If
            End If
        Next oFile

'        For Each sf In oFolder.SubFolders
'            colFolders.Add sf
'        Next sf
    Loop
    Application.ScreenUpdating = True
    Application.Calculation = xlAutomatic

End Sub
Jirawat namrach
Member
Member
Posts: 145
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

Re: Add path VBA

#7

Post by Jirawat namrach »

หลังจาก Run Folder แรก และได้ข้อมูลมาแล้ว พอขึ้น Folder ที่สอง ข้อมูลที่ได้มาจะทับข้อมูลเดิมที่มีอยู่ ต้องการให้ข้อมูลจาก Folder ที่สองบันทึกต่อจาก Folder แรก ต้องแก้ไข Code ยังไงครับอาจารย์
User avatar
snasui
Site Admin
Site Admin
Posts: 30972
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add path VBA

#8

Post by snasui »

:D Code นั้นไม่ควรที่จะทับข้อมูลเดิม ในเครื่องผมสามารถรันได้ปกติ

ลอง Debug ดูและแก้ Code มาเองดูก่อน ติดแล้วค่อยถามกันต่อครับ

ที่สำคัญ Code ที่ให้ไปจะต้องเอาไปใช้ทุกบรรทัด ลองสังเกตดูว่านำ Code ไปใช้ครบทุกบรรทัดแล้วหรือไม่ครับ
Jirawat namrach
Member
Member
Posts: 145
Joined: Mon Dec 12, 2022 5:05 pm
Excel Ver: 2016

Re: Add path VBA

#9

Post by Jirawat namrach »

ได้แล้วครับอาจารย์ ขอบคุณมากครับ
Post Reply