: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 11 times
AA.xlsx
(8.1 KiB) Downloaded 12 times
BB.xlsx
(8.13 KiB) Downloaded 10 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
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 13 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
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: 31253
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 11 times
BB.xlsx
(8.13 KiB) Downloaded 9 times
Delete file 2.xlsm
(17.72 KiB) Downloaded 13 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
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