: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
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

Delete File in folder [VBA]

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
humnoy12
Member
Member
Posts: 27
Joined: Mon Jun 12, 2017 8:48 am

Delete File in folder [VBA]

#1

Post by humnoy12 »

รบกวนช่วยปรับ Code หน่อยครับ
1.อยากจะเมื่อลบไฟล์ตามชื่อที่คอลัมน์ A ของไฟล์ Delete file แล้วสามารถไป Restore ใน Recycle Bin ได้ครับ
ตอนนี้ติดที่ลบไปแล้วไม่สามารถ Restore ได้ครับ
2. อยากจะลบไฟล์ใน Folder ทั้งหมดยกเว้นไฟล์ชื่อตามคอลัมน์ A

Code: Select all

Sub DeleteFiles()
  Dim Path As String
  Path = "C:\Users\One\Desktop\Test\"
  Shell Environ("comspec") & " /c DEL /Q " & """" & Path & Join(Application.Transpose(Range("A1", Cells(Rows.Count, "A").End(xlUp))), """ """ & Path & "") & """", vbHide
End Sub
Attachments
Delete file .xlsm
(12.87 KiB) Downloaded 2 times
AA.xlsx
(8.1 KiB) Downloaded 1 time
BB.xlsx
(8.13 KiB) Downloaded 1 time
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Delete File in folder [VBA]

#2

Post by snasui »

:D ช่วยโพสต์ Code ที่เขียนเพื่อ Restore File พร้อมแนบไฟล์ที่มี Code นั้นมาด้วย จะได้ตอบต่อไปจากนั้นครับ
humnoy12
Member
Member
Posts: 27
Joined: Mon Jun 12, 2017 8:48 am

Re: Delete File in folder [VBA]

#3

Post by humnoy12 »

ไม่ทราบว่าจะเขียนยังไงครับ แต่อยากให้ว่าเมื่อลบไฟล์แล้วให้เข้าไปอยู่ใน Recycle Bin ไม่ต้องลบแบบถาวร
เดียวลองศึกษาหาข้อมูลก่อนครับ
humnoy12
Member
Member
Posts: 27
Joined: Mon Jun 12, 2017 8:48 am

Re: Delete File in folder [VBA]

#4

Post by humnoy12 »

อันนั้นนี้ Code ส่งไฟล์ไปที่ Recycle Bin Code นี้หามาได้ครับ
ด้วยความสามารถผมคงยังเขียนไมไ่ด้ขนาดนี้

Code: Select all

Sub FileToToss(strFileToToss As String)
 
Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
 
Set fso = CreateObject("Scripting.FileSystemObject")
 
If Not fso.FileExists(strFileToToss) Then
   WScript.Quit
End If
 
If fso.GetExtensionName(strFileToToss) = "exe" Then
   WScript.Quit
End If
 
strFolderParent = fso.GetParentFolderName(strFileToToss)
strFileName = fso.GetFileName(strFileToToss)
 
 
'   Make sure recycle bin properties are set to NOT display request for delete confirmation
 
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
  
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer"
strValueName = "ShellState"
 
oReg.GetBinaryValue HKEY_CURRENT_USER, strKeyPath, _
    strValueName, strValue
 
strOrigBinSet = strValue(4)
strValue(4) = 39
 
errReturnA = oReg.SetBinaryValue _
   (HKEY_CURRENT_USER, strKeyPath, strValueName, strValue)
 
 
'  Use the Shell to send the file to the recycle bin
 
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(strFolderParent)
Set objFolderItem = objFolder.ParseName(strFileName)
 
objFolderItem.InvokeVerb ("Delete")
 
'  Restore the User's Property settings for the Recycle Bin

strValue(4) = strOrigBinSet
errReturnB = oReg.SetBinaryValue(HKEY_CURRENT_USER, strKeyPath, strValueName, strValue)

End Sub
Attachments
Delete file .xlsm
(15.11 KiB) Downloaded 2 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Delete File in folder [VBA]

#5

Post by snasui »

humnoy12 wrote: Mon Aug 27, 2018 11:26 pm อันนั้นนี้ Code ส่งไฟล์ไปที่ Recycle Bin Code นี้หามาได้ครับ
ด้วยความสามารถผมคงยังเขียนไมไ่ด้ขนาดนี้
:D ขอ Code ที่เขียนนำไฟล์จาก Recycle Bin กลับมาครับ
humnoy12
Member
Member
Posts: 27
Joined: Mon Jun 12, 2017 8:48 am

Re: Delete File in folder [VBA]

#6

Post by humnoy12 »

กรณีนำไฟล์กลับมาจาก Recycle Bin ไม่ต้องใช้ Code ครับ แค่เข้าไปเลือกบางไฟล์ที่ต้องการ Restore ครับ
ความต้องการคือ
1. ลบไฟล์จากชื่อที่คอลัมน์ A ลบแล้วให้ไปอยู่ใน Recycle Bin ครับ ถ้าต้องการนำไฟล์กลับมาเดียวเข้าไป Restore เฉพาะบางไฟล์ครับ
กับ
2. อยากจะลบไฟล์ทั้งหมดใน Folder ยกเว้นไฟล์ชื่อตามคอลัมน์ A
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Delete File in folder [VBA]

#7

Post by snasui »

humnoy12 wrote: Tue Aug 28, 2018 12:02 am 2. อยากจะลบไฟล์ทั้งหมดใน Folder ยกเว้นไฟล์ชื่อตามคอลัมน์ A
:D Loop เข้าไปยัง Folder แล้วตรวจสอบว่ามีชื่อไฟล์ในคอลัมน์ A หรือ ไม่ถ้าชื่อไม่ตรงลบทิ้ง สามารถนำ Code ตาม Link นี้มาประยุกต์ได้ครับ :arrow: https://www.snasui.com/viewtopic.php?t=4645#p30182
humnoy12
Member
Member
Posts: 27
Joined: Mon Jun 12, 2017 8:48 am

Re: Delete File in folder [VBA]

#8

Post by humnoy12 »

ยังไม่ค่อยเข้าใจเรื่อง Loop เข้าไปใน Folder แล้วถ้าเจอชื่อไฟล์ที่ไม่ตรงกับคอลัมน์ A ให้ลบทิ้ง
ช่วยปรับ Code หน่อยครับ ลองดูอยู่นานก็ยังไม่ได้

Code: Select all

Sub FileToToss(strFileToToss As String)
 
Const HKEY_CURRENT_USER = &H80000001
strComputer = "."
 
Set fso = CreateObject("Scripting.FileSystemObject")
 On Error Resume Next
If Not fso.FileExists(strFileToToss) Then
   WScript.Quit
End If
 
If fso.GetExtensionName(strFileToToss) = "exe" Then
   WScript.Quit
End If
 
strFolderParent = fso.GetParentFolderName(strFileToToss)
strFileName = fso.GetFileName(strFileToToss)
 
 
'   Make sure recycle bin properties are set to NOT display request for delete confirmation
 
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
  
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Explorer"
strValueName = "ShellState"
 
oReg.GetBinaryValue HKEY_CURRENT_USER, strKeyPath, _
    strValueName, strValue
 
strOrigBinSet = strValue(4)
strValue(4) = 39
 
errReturnA = oReg.SetBinaryValue _
   (HKEY_CURRENT_USER, strKeyPath, strValueName, strValue)
 
 
'  Use the Shell to send the file to the recycle bin
 
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(strFolderParent)
Set objFolderItem = objFolder.ParseName(strFileName)
 
objFolderItem.InvokeVerb ("Delete")
 
'  Restore the User's Property settings for the Recycle Bin

strValue(4) = strOrigBinSet
errReturnB = oReg.SetBinaryValue(HKEY_CURRENT_USER, strKeyPath, strValueName, strValue)

End Sub

Code: Select all

Sub FindAndOpenFiles()
    Dim FilePath As String
    Dim r As Range
    FilePath = "C:\Users\One\Desktop\Test"
    Set r = Sheet1.Range("A1", Cells(Rows.Count, "A").End(xlUp))
    For Each c In r
        FileToToss (FilePath & "\" & c)
    Next c
End Sub
Attachments
AA.xlsx
(8.1 KiB) Downloaded 1 time
BB.xlsx
(8.13 KiB) Downloaded 1 time
Delete file 2.xlsm
(17.72 KiB) Downloaded 4 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Delete File in folder [VBA]

#9

Post by snasui »

:D ตัวอย่างการ Loop เพื่อลบไฟล์ที่ชื่อไม่ตรงกับชื่อไฟล์ในคอลัมน์ A ครับ

Code: Select all

Sub FindAndOpenFiles()
    Dim fileName As String
    Dim rall As Range
    FilePath = "C:\FolderTEST"
    
    With Sheets("Sheet1")
        Set rall = .Range("a1", .Range("a" & .Rows.Count).End(xlUp))
    End With
    fileName = Dir(FilePath & "\*.xlsx")
    Do Until fileName = ""
        If Application.CountIf(rall, fileName) = 0 Then
            Kill fileName
        End If
        fileName = Dir()
    Loop
End Sub
Post Reply