: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

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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่

Post a reply


This question is a means of preventing automated form submissions by spambots.
Smilies
:D :thup: :cp: :flw: :rz: :sg: :tt: :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :ard: :arl: :aru: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Add path VBA

Re: Add path VBA

#9

by Jirawat namrach » Wed Feb 19, 2025 1:23 pm

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

Re: Add path VBA

#8

by snasui » Wed Feb 19, 2025 10:45 am

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

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

ที่สำคัญ Code ที่ให้ไปจะต้องเอาไปใช้ทุกบรรทัด ลองสังเกตดูว่านำ Code ไปใช้ครบทุกบรรทัดแล้วหรือไม่ครับ

Re: Add path VBA

#7

by Jirawat namrach » Wed Feb 19, 2025 8:31 am

หลังจาก Run Folder แรก และได้ข้อมูลมาแล้ว พอขึ้น Folder ที่สอง ข้อมูลที่ได้มาจะทับข้อมูลเดิมที่มีอยู่ ต้องการให้ข้อมูลจาก Folder ที่สองบันทึกต่อจาก Folder แรก ต้องแก้ไข Code ยังไงครับอาจารย์

Re: Add path VBA

#6

by snasui » Tue Feb 18, 2025 9:48 pm

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

Re: Add path VBA

#5

by Jirawat namrach » Tue Feb 18, 2025 1:13 pm

ตาม Code ล่าสุด ได้ตามที่ต้องการครับ แต่อยากสอบถามเพิ่ม กรณีนี้เราสามารถระบุเจาะจงเป็น folder ได้หรือเปล่าครับ เพราะลักษณะ Code ที่ใช้งานนี้ มันจะไปค้นหาทุกไฟล์ แล้วมาเปรียบเทียบว่า มี "REPLACEMENT" และนามสกุล ".SLDDRW" หรือไม่ ทำให้การ Process ค่อนข้างนาน เนื่องจากไฟล์มีจำนวนมาก อย่างเช่น สามารถระบุ folder "C:\Users\Lenovo\Desktop\PATH\REPLACEMENT 3000" แล้วค้นหา .SLDDRW เสร็จแล้ว ก็ไป folder ถัดไป "C:\Users\Lenovo\Desktop\PATH\REPLACEMENT 4000" แล้วทำเหมือนกัน แบบนี้สามารถทำได้หรือเปล่าครับ

Re: Add path VBA

#4

by snasui » Tue Feb 18, 2025 11:41 am

: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

Re: Add path VBA

#3

by Jirawat namrach » Tue Feb 18, 2025 11:12 am

ขอโทษครับอาจารย์ ผมสื่อสารผิดเอง ตัวอย่าง Code ของอาจารย์ ได้ข้อมูลมาทั้งหมดครับ ต้องการแค่ .SLDDRW รบกวนด้วยครับอาจารย์

Re: Add path VBA

#2

by snasui » Tue Feb 18, 2025 10:21 am

: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

Add path VBA

#1

by Jirawat namrach » Tue Feb 18, 2025 8:14 am

รบกวนขอแนวทางปรับแต่ง 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
Attachments
Test1.xlsm
(97.53 KiB) Downloaded 4 times

Top