Page 1 of 1

เรียงรายชื่อในชีท ด้วยcode vba

Posted: Fri Jul 13, 2018 1:21 pm
by March201711
อยากทราบว่าจะเรียงรายชื่อตามตัวอักษร เช่น a ถึง z, ก ถึง ฮ หรือ 1 ถึง 9 ใน sheet ต้องใช้ code vba อย่างไรคะ

Re: เรียงรายชื่อในชีท ด้วยcode vba

Posted: Fri Jul 13, 2018 6:57 pm
by snasui
:D การจะบอกว่าทำอย่างไร กรุณาพยายามมาก่อนด้วยตัวเองทุกครั้ง นั่นหมายถึงมี Code ที่เขียนมาเองแล้วประกอบคำถามครับ

Re: เรียงรายชื่อในชีท ด้วยcode vba

Posted: Sat Jul 14, 2018 10:08 am
by March201711
ลองทำดูแล้วค่ะ แต่ก็อไม่เรียง

Re: เรียงรายชื่อในชีท ด้วยcode vba

Posted: Sat Jul 14, 2018 12:49 pm
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Dim sh As Worksheet
Dim ts As Worksheet

For Each sh In Worksheets
    For Each ts In Worksheets
        If ts.Name < sh.Name Then
            ts.Move before:=sh
        End If
    Next ts
Next sh


Re: เรียงรายชื่อในชีท ด้วยcode vba

Posted: Sat Jul 14, 2018 4:31 pm
by March201711
ถามต่อนิดนึงค่ะ ทำไม run data แล้ว ลำดีบตัวอักษร ATS มาก่อน Acและทำไม a12 ถึงอยู่ท้ายสุดคะ

อยากให้เรียงตัวเลขก่อนตัวอักษร โดยไม่สขใจว่าตัวอักษรว่าจะเล็กหรือใหญ่ ถ้ามีขีดล่างให้อยู่ต่อท้ายตัวอักษร A ค่ะ

Re: เรียงรายชื่อในชีท ด้วยcode vba

Posted: Sat Jul 14, 2018 4:44 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Dim sh As Worksheet
Dim ts As Worksheet
For Each sh In Worksheets
    For Each ts In Worksheets
        If LCase(ts.Name) < LCase(sh.Name) Then
            ts.Move before:=sh
        End If
    Next ts
Next sh

Re: เรียงรายชื่อในชีท ด้วยcode vba

Posted: Sat Jul 14, 2018 5:15 pm
by March201711
ได้แล้วค่ะ แต่ถ้าอยากจะให้ code เลือกเฉพาะ sheet ที่มีสี high light สีส้ม move sheet ไปอยู่ที่sheetแรกๆเรียงตามลำดับตามตัวอักษร พอจะปรับแก้code อย่างไรบ้างคะ

Re: เรียงรายชื่อในชีท ด้วยcode vba

Posted: Sat Jul 14, 2018 5:20 pm
by snasui
:D ลองปรับ Code เพิ่มมาเองก่อนเสมอไป ได้แค่ไหนก็แค่นั้นแต่ต้องปรับมาเองก่อนครับ

Re: เรียงรายชื่อในชีท ด้วยcode vba

Posted: Sat Jul 14, 2018 6:01 pm
by March201711
ลองทำดูแล้วค่ะ แต่ใช้วิธี บันทึก marco เอา โดยเลือกเฉพาะเจาะจง sheet เอาเอง ถ้ามีการเพิ่ม sheet ขึ้นมาใหม่แล้วเราต้องแก้ใน code เรื่อยไปเองค่ะ ถ้าเราอยากให้ เครื่องเห็นเองต้องกำหนดเงื่อนไขอย่างไรคะ

Re: เรียงรายชื่อในชีท ด้วยcode vba

Posted: Sat Jul 14, 2018 6:08 pm
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Dim sh As Worksheet
Dim ts As Worksheet
Dim i As Integer
Dim a() As Variant
Application.ScreenUpdating = False
For Each sh In Worksheets
    For Each ts In Worksheets
        If LCase(ts.Name) < LCase(sh.Name) Then
            ts.Move before:=sh
        End If
    Next ts
Next sh
For Each sh In Worksheets
    If sh.Tab.Color <> False Then
        ReDim Preserve a(i)
        a(i) = sh.Index
        i = i + 1
    End If
Next sh
Worksheets(a).Move before:=Worksheets(1)
Application.ScreenUpdating = True

Re: เรียงรายชื่อในชีท ด้วยcode vba

Posted: Sat Jul 14, 2018 6:18 pm
by March201711
:D ทำได้แล้วค่ะ ขอบคุณอาจารย์มากๆเลยค่ะ :thup: :D

Re: เรียงรายชื่อในชีท ด้วยcode vba

Posted: Sat Jul 14, 2018 6:28 pm
by March201711
สงสัยคำสั่งว่า

Code: Select all

Application.ScreenUpdating = False

Code: Select all

Application.ScreenUpdating = True
ทำไมต้องใส่เปิดและปิดด้วยคะ
และ

Code: Select all

 ReDim Preserve a(i)
        a(i) = sh.Index
        i = i + 1 
ความหมายว่าอย่างไรคะ อาจารย์ เพื่อจะได้ศึกษาเป็นความรู้ต่อไปค่ะ

Re: เรียงรายชื่อในชีท ด้วยcode vba

Posted: Sat Jul 14, 2018 6:50 pm
by snasui
March201711 wrote: Sat Jul 14, 2018 6:28 pm สงสัยคำสั่งว่า

Code: Select all

Application.ScreenUpdating = False

Application.ScreenUpdating = True
ทำไมต้องใส่เปิดและปิดด้วยคะ
:D เพื่อป้องกันหน้าจอวูบวาบ หากวูบวาบบ่อยครั้งจะคำนวณช้าครับ
March201711 wrote: Sat Jul 14, 2018 6:28 pm

Code: Select all

ReDim Preserve a(i)
        a(i) = sh.Index
        i = i + 1 
ความหมายว่าอย่างไรคะ อาจารย์ เพื่อจะได้ศึกษาเป็นความรู้ต่อไปค่ะ
ใจความหลักคือ เป็นการขยายขอบเขตตัวแปร Array เพื่อรองรับสมาชิกตัวต่อไป โดยขยายขอบเขตตามค่าตัวแปร i และจะมีการกำหนดสมาชิกให้กับ Array ในตำแหน่งที่ i จากนั้นจะกำหนดค่าตัวแปร i เพิ่มขึ้นครั้งละ 1 ครับ การจะเข้าใจสิ่งเหล่านี้ต้องศึกษาให้เข้าใจเรื่อง Array ครับ

Re: เรียงรายชื่อในชีท ด้วยcode vba

Posted: Sat Jul 14, 2018 7:11 pm
by March201711
:D ขอบคุณอาจารย์มากค่ะ จะพยายามทำความเข้าใจ ศึกษาต่อไปเรื่อยๆค่ะ :D