Page 1 of 1

เขียนVBA:การกระจายข้อมูลdataตามsheetที่เป็นชื่อร้านvendorนั้นๆ

Posted: Thu Jan 19, 2023 2:30 am
by nattapon-G
DATA test by vendor.xlsx
ผมอยากจะกระจายข้อมูลที่เกี่ยวกับชิ้นงานโดยจะแบบตามประเภทvendorแต่ละที่ครับ โดยvendorแต่ละที่จะมีsheetอยู่และในsheetนั้นจะมีข้อมูลของชิ้นงานประจำvendorนั้นๆ

Code: Select all

Sub vencollect()
    Dim r As Range, d As Object, s As Worksheet
    Set d = CreateObject("Scripting.Dictionary")
    Application.DisplayAlerts = False
    For Each s In Worksheets
        If s.Name <> Sheets(1).Name Then
            s.Delete
        End If
    Next s
    With Sheets(1)
        For Each r In .Range("c2", .Range("c" & .Rows.Count).End(xlUp))
            If Not d.Exists(r.Value) Then
                d.Add r.Value, r.Value
                Set s = Worksheets.Add(after:=Worksheets(Sheets.Count))
                s.Name = r.Value
                s.Range("z1").Value = "Vendor"
                s.Range("z2").Value = r.Value
                .UsedRange.AdvancedFilter xlFilterCopy, _
                    s.Range("z1:z2"), s.Range("a1")
                s.Range("z1:z2").Clear
            End If
        Next r
    End With
    Application.DisplayAlerts = True
    MsgBox "Finish", vbInformation
End Sub
อันนี้เป็นโค้ดที่ผมลองแล้วพบปัญหาที่" s.Name = r.Value" ขึ้นว่า Method 'name' of object '_Workbook' failed" (1004) ครับ
ผมเลยอยากได้โค้ดที่สามารถกระจายข้อมูลที่เกี่ยวกับชิ้นงานโดยจะแบบตามประเภทvendorแต่ละที่และตั้งชื่อSheetเป็นชื่อvendorนั้นๆครับ

Re: เขียนVBA:การกระจายข้อมูลdataตามsheetที่เป็นชื่อร้านvendorนั้นๆ

Posted: Thu Jan 19, 2023 5:47 am
by snasui
:D กรุณาแนบไฟล์ที่มี Code นั้นแล้วมาอีกครั้งครับ

ไฟล์ที่มี Code จะต้องมีนามสกุล .xlsm เป็นอย่างน้อย ไม่ใช่ .xlsx อย่างที่แนบมาครับ

Re: เขียนVBA:การกระจายข้อมูลdataตามsheetที่เป็นชื่อร้านvendorนั้นๆ

Posted: Thu Jan 19, 2023 6:40 am
by nattapon-G
นี่ครับขอบคุณครับ

Re: เขียนVBA:การกระจายข้อมูลdataตามsheetที่เป็นชื่อร้านvendorนั้นๆ

Posted: Thu Jan 19, 2023 6:45 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Sub vencollect()
    Dim r As Range, d As Object, s As Worksheet
    Dim strShName As String
    Set d = CreateObject("Scripting.Dictionary")
    Application.DisplayAlerts = False
    For Each s In Worksheets
        If s.Name <> Sheets(1).Name Then
            s.Delete
        End If
    Next s
    With Sheets(1)
        For Each r In .Range("c2", .Range("c" & .Rows.Count).End(xlUp))
            If IsError(r.Value) Then
                MsgBox "Found error in '" & r.Address(0, 0) & _
                    "' please check your data.", vbExclamation
                Exit Sub
            End If
            strShName = VBA.Replace(r.Value, ": ", "_")
            If Not d.Exists(strShName) And strShName <> "" Then
                d.Add strShName, strShName
                Set s = Worksheets.Add(after:=Worksheets(Sheets.Count))
                s.Name = strShName
                s.Range("z1").Value = "Vendor"
                s.Range("z2").Value = r.Value
                .UsedRange.AdvancedFilter xlFilterCopy, _
                    s.Range("z1:z2"), s.Range("a1")
                s.Range("z1:z2").Clear
            End If
        Next r
    End With
    Application.DisplayAlerts = True
    MsgBox "Finish", vbInformation
End Sub

Re: เขียนVBA:การกระจายข้อมูลdataตามsheetที่เป็นชื่อร้านvendorนั้นๆ

Posted: Thu Jan 19, 2023 7:11 pm
by nattapon-G
ขอบคุณครับอาจารย์ :thup: :thup: :D