Page 1 of 1

สอบถามการลบ Sheet ในไฟล์ Excel ครั้งละหลายๆ ไฟล์

Posted: Mon Jan 23, 2017 4:27 pm
by shikamaru
อาจารย์ครับ รบกวนอีกครั้งครับ ผมได้นำ Code Delete sheet ที่อาจารย์ แก้ไข ให้ทดสอบใช้แล้วครับ
ถ้าไฟล์ Test 1 , Test 2 และ Test 3 มีชื่อ Sheet Name = Sheet 1 ก็จะไม่ถูกลบ ซึ่ง Code ของอาจารย์ใช้งานได้ดีเลยครับ

แต่ผมมีความอยากรู้เพิ่มเติมครับ คือ ถ้าไฟล์ Test 1, Test 2 และ Test 3 มีชื่อ sheet Name ที่ไม่ต้องการลบออก ไม่เหมือนกัน
เช่น Test 1 >> Sheet Name = AA
Test 2 >> Sheet Name = BB
Test 3 >> Sheet Name = CC

ความต้องการ คือ เลือกทั้ง 3 ไฟล์พร้อมกัน และให้ลบ Sheet อื่นที่ไม่เกี่ยวข้องออก จากไฟล์ โดยแต่ละไฟล์จะต้องเหลือ
Test 1 >> เหลือ Sheet Name = AA
Test 2 >> เหลือ Sheet Name = BB
Test 3 >> เหลือ Sheet Name = CC

ผมลองแก้ไข Code แล้วแต่ติด Error ครับ รบกวนอาจารย์แนะนำครับ

Re: สอบถามการลบ Sheet ในไฟล์ Excel ครั้งละหลายๆ ไฟล์

Posted: Mon Jan 23, 2017 4:28 pm
by shikamaru
Code ที่ 1

Code: Select all

Sub RoundedRectangle2_Click()

'Sub DeleteSheet()

Dim i As Integer, strThisbook As Variant

strThisbook = Application.GetOpenFilename(Filefilter:= _
 "All File (*.*), *.*", Title:="Please select source file(s).", MultiSelect:=True)
        
If TypeName(strThisbook) = "Boolean" Then
        'MsgBox "Please select file(s)."
        Exit Sub
End If

Application.DisplayAlerts = False
For i = 1 To UBound(strThisbook)
        Set thisBook = Workbooks.Open(strThisbook(i))
        Application.ScreenUpdating = False
        For Each sh In thisBook.Worksheets
            If sh.Name <> "AA" Then
                sh.Delete
            Else
            If sh.Name <> "BB" Then
                sh.Delete
            Else
            If sh.Name <> "CC" Then
                sh.Delete
                        
            End If
        Next sh
        
        thisBook.Close True
Next i
Application.DisplayAlerts = True
End Sub


Re: สอบถามการลบ Sheet ในไฟล์ Excel ครั้งละหลายๆ ไฟล์

Posted: Mon Jan 23, 2017 4:29 pm
by shikamaru
Code ที่ 2

Code: Select all

Sub RoundedRectangle2_Click()

'Sub DeleteSheet()

Dim i As Integer, strThisbook As Variant

strThisbook = Application.GetOpenFilename(Filefilter:= _
 "All File (*.*), *.*", Title:="Please select source file(s).", MultiSelect:=True)
        
If TypeName(strThisbook) = "Boolean" Then
        'MsgBox "Please select file(s)."
        Exit Sub
End If

Application.DisplayAlerts = False
For i = 1 To UBound(strThisbook)
        Set thisBook = Workbooks.Open(strThisbook(i))
        Application.ScreenUpdating = False
        For Each sh In thisBook.Worksheets
            If sh.Name <> "AA" Or "BB" Or "CC" Then
                sh.Delete
                                  
            End If
        Next sh
        
        thisBook.Close True
Next i
Application.DisplayAlerts = True
End Sub

Re: สอบถามการลบ Sheet ในไฟล์ Excel ครั้งละหลายๆ ไฟล์

Posted: Mon Jan 23, 2017 4:31 pm
by shikamaru
ไฟล์แนบครับ
ในไฟล์แนบ ผมมี Code ที่ 2 นะครับอาจารย์

Re: สอบถามการลบ Sheet ในไฟล์ Excel ครั้งละหลายๆ ไฟล์

Posted: Mon Jan 23, 2017 4:32 pm
by shikamaru
ไฟล์ Test

Re: สอบถามการลบ Sheet ในไฟล์ Excel ครั้งละหลายๆ ไฟล์

Posted: Mon Jan 23, 2017 5:06 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'--Other code
For Each sh In thisBook.Worksheets
	if thisBook.Name = "Test 1.XLSX" Then
		If sh.Name <> "AA" Then
			sh.Delete
		End If
	Elseif thisBook.Name = "Test 2.XLSX" Then
		If sh.Name <> "BB" Then
			sh.Delete
		Else
	ElstIf thisBook.Name = "Test 3.XLSX" Then
		If sh.Name <> "CC" Then
			sh.Delete
		End If			
	End If
Next sh
'--Other code

Re: สอบถามการลบ Sheet ในไฟล์ Excel ครั้งละหลายๆ ไฟล์

Posted: Tue Jan 24, 2017 3:51 pm
by shikamaru
ขอบคุณครับ อาจารย์

Re: สอบถามการลบ Sheet ในไฟล์ Excel ครั้งละหลายๆ ไฟล์

Posted: Wed Jan 25, 2017 4:56 pm
by shikamaru
รบกวนอาจารย์เพิ่มเติมครับ
พอดีไฟล์งานที่ผมต้องทำการลบ Sheet ชื่อไฟล์งานที่โหลดมาจะมีวันที่กำกับอยู่ด้านหลัง
เช่น Sales01012027.xlsx ซึ่งวันที่จะรันตามลำดับวัน ครับ จะทำให้ไฟล์ที่โหลดมาชื่อไฟล์จะไม่เหมือนเดิมทุกวัน
หากใช้ Code Delete Sheet ที่อาจารย์แก้ไขให้นั้น ผมต้องเปลี่ยนชื่อไฟล์ให้ตรงกับที่เขียน Code
ผมเลยแก้ไข Code นิดหน่อย เพื่อให้สามารถเลือกไฟล์มาลบ Sheet ได้โดยไม่ต้องเปลี่ยนชื่อไฟล์ให้ตรงกับใน Code
ผมกดรันแล้วไม่ Error แต่ผลลัพธ์ที่ได้ คือ ไม่มีการลบ Sheet ให้ครับ รบกวนอาจารย์อีกครั้งครับ

Re: สอบถามการลบ Sheet ในไฟล์ Excel ครั้งละหลายๆ ไฟล์

Posted: Wed Jan 25, 2017 4:58 pm
by shikamaru
Code

Code: Select all


Sub RoundedRectangle2_Click()

'Sub DeleteSheet()

Dim i As Integer, strThisbook As Variant
Dim sh As Worksheet, thisBook As Workbook
Dim ob As Workbook

strThisbook = Application.GetOpenFilename(Filefilter:= _
 "All File (*.*), *.*", Title:="Please select source file(s).", MultiSelect:=True)
        
If TypeName(strThisbook) = "Boolean" Then
        'MsgBox "Please select file(s)."
        Exit Sub
End If

Application.DisplayAlerts = False
For i = 1 To UBound(strThisbook)
        Set thisBook = Workbooks.Open(strThisbook(i))
        Application.ScreenUpdating = False
        For Each sh In thisBook.Worksheets
 If thisBook.Name = "All file ,*.xlsx" Then
            If sh.Name <> "AA" Then
            sh.Delete
            End If
            
        ElseIf thisBook.Name = "All file ,*.xlsx" Then
            If sh.Name <> "BB" Then
                sh.Delete
            End If
         ElseIf thisBook.Name = "All file ,*.xlsx" Then
            If sh.Name <> "CC" Then
                sh.Delete
            End If
        End If

       Next sh
        thisBook.Close True
        
Next i
Application.DisplayAlerts = True
End Sub


Re: สอบถามการลบ Sheet ในไฟล์ Excel ครั้งละหลายๆ ไฟล์

Posted: Wed Jan 25, 2017 6:35 pm
by snasui
:D เมื่อเป็นเช่นนั้นโปรแกรมจะทราบได้อย่างไรหรือใช้หลักการใดพิจารณาว่าไฟล์ใดจะต้องลบชีตใด ช่วยแจ้งมาด้วยครับ

Re: สอบถามการลบ Sheet ในไฟล์ Excel ครั้งละหลายๆ ไฟล์

Posted: Mon Jan 30, 2017 4:15 pm
by shikamaru
ไม่เป็นไรครับอาจารย์ ผมใช้วิธีการเปลี่ยน Code ด้านหลังในส่วนของชื่อไฟล์ แทนครับ ใช้ได้เหมือนกัน
ขอบคุณครับ