Page 1 of 2

เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Tue Dec 26, 2017 6:31 pm
by Arm_anucha
รบกวนขอสอบถามหน่อยครับ อยากให้เมื่อเวลาที่เราเปลี่ยนชื่อที่ Cell A1 เสร็จแล้ว ชื่อ Sheet ก็จะเปลี่ยนตามทันที โดยที่ไม่ต้องไปกด
Run จะเพิ่มเติม Code อย่างไรดีครับ

Code: Select all

Sub Test()

Dim WS As Worksheet

For Each WS In Sheets
   WS.Name = WS.Range("A1")
Next WS

End Sub

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Tue Dec 26, 2017 9:06 pm
by snasui
:D ใช้ Event Change เข้ามาช่วยได้ครับ

ไปที่ VBE > ไปที่ Windows Project Explorer > Double Click ที่ ThisWorkbook > เพิ่ม Code ตามด้านล่างครับ

Code: Select all

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Address(0, 0) = "A1" Then
        Call Test
    End If
End Sub

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Tue Dec 26, 2017 10:06 pm
by March201711
สงสัยคะ เพิ่มไปเพราะอะไรค่ะ

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Tue Dec 26, 2017 10:22 pm
by snasui
March201711 wrote:สงสัยคะ เพิ่มไปเพราะอะไรค่ะ
:D ประโยคนี้เป็นคำถาม จะต้องลงท้ายด้วย "คะ" ครับ

ที่ถูกคือ

สงสัยค่ะ เพิ่มไปเพราะอะไรคะ

ผมพยายามแจ้งทุกครั้งเพื่อให้ทบทวนการใช้งาน แต่ยังพบว่ายังเป็นเหมือนเดิม ในโอกาสต่อไป ผมจะให้เขียนแก้เองทุก ๆ โพสต์จนกว่าจะเขียนได้ถูกต้องนะครับ

สำหรับที่ถามมา คำตอบคือเพิ่มไปเพื่อให้เป็นอัตโนมัติ เมื่อคีย์ค่าเข้าไปในเซลล์ A1 แล้ว Enter Code นั้นจะทำงานทันทีครับ

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Tue Dec 26, 2017 10:39 pm
by March201711
ถ้าเราจะเปลี่ยนแต่ sheet เดียวต้องแก้ code vba อย่างไรคะ

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Tue Dec 26, 2017 10:47 pm
by snasui
:D นำตัวแปร Sh มาตรวจสอบว่าเป็นชีตที่ต้องการให้ Code ทำงานหรือไม่ครับ

เช่น

Code: Select all

    If Sh.Name = "Sheet1" And Target.Address(0, 0) = "A1" Then
        Call Test
    End If
ปกติผมไม่ตอบคำถามที่ยังไม่ปรับ Code มาเองหลังจากที่ผมตอบไปแล้ว หากมีคำถามต่อเนื่องไป กรุณาปรับ Code ที่ผมตอบไปมาเองก่อน ติดแล้วค่อยถามกันครับ

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Tue Dec 26, 2017 10:59 pm
by March201711
ขอบคุณค่ะ อาจารย์

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Tue Dec 26, 2017 11:18 pm
by Arm_anucha
ตรงตามความต้องการ
ขอบคุณครับอาจารย์

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Wed Dec 27, 2017 10:32 pm
by March201711
อาจารย์คะ เขียนcode ตามที่อาจารย์บอกแล้ว พอกด enter จะมี pop up ขึ้นมาแจ้งว่าให้แก้ไขค่ะ ไม่ทราบว่าทำผิดขั้นตอนตรงไหนบ้างคะ

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Thu Dec 28, 2017 12:29 am
by DhitiBank
ใน ThisWorkbook มีโพรซีเยอร์ชื่อซ้ำกันครับ คือ Workbook_SheetChange ให้ลบอันที่ไม่ต้องการทิ้งก่อน แล้วค่อยทดสอบใหม่ครับ

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Thu Dec 28, 2017 7:48 pm
by March201711
ลบอันที่ไม่ต้องการออกแล้วก็ยังไม่ได้คะ ขึ้น pop up มาแบบเดิมค่ะ
ตามเอกสารแนบค่ะ

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Thu Dec 28, 2017 8:25 pm
by snasui
:D Call test ที่อยู่หลัง Then ให้ตัดลงมาเป็นบรรทัดใหม่ ถ้าไม่ตัดลงมาเป็นบรรทัดใหม่ให้ลบ End If ทิ้งไปครับ

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Thu Dec 28, 2017 9:05 pm
by March201711
ก็ยังไม่ได้น่ะค่ะ ก็เปลี่ยนชื่อเฉพาะชื่อ sheet1 เป็นชื่อตาม cell a1อาจารย์บอกว่าแค่พิมพ์ชื่อ ตรง cell a1แล้ว enter sheet จะเปลี่ยนชื่อ auto แต่ก็ไม่ได้น่ะค่ะ

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Thu Dec 28, 2017 9:07 pm
by snasui
:D ผมดาวน์โหลดไฟล์มาทดสอบแล้วเปลี่ยนได้ปกติครับ

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Thu Dec 28, 2017 9:09 pm
by March201711
อาจารย์ช่วยบอกขั้นตอนได้ไหมคะ สงสัยข้าพเจ้าทำปิดขั้นตอนบางอย่างค่ะ

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Thu Dec 28, 2017 9:11 pm
by snasui
:D ขั้นตอนแค่เปลี่ยนชื่อในเซลล์ A1 ของ Sheet1 แล้ว Enter ยกเว้นไม่มีชีตที่ชื่อ Sheet1 หรือไม่ได้เปลี่ยนค่าในเซลล์ A1 ของชีตที่ชื่อว่า Sheet1 ครับ

เมื่อแก้ไขแล้วลองปิดไฟล์แล้วเปิดขึ้นมาใหม่แล้วค่อยทดสอบครับ

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Thu Dec 28, 2017 9:29 pm
by March201711
ไม่เห็นได้เลยคะ แก้แล้ว save ปิดแล้วเปิดใหม่ แล้วไปที่ cell a1 double click ใน cell a1 แล้ว enter ก็ไม่ได้ค่ะ งงจัง

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Thu Dec 28, 2017 9:37 pm
by snasui
:D ลองเข้าหน้าต่าง VBE (หน้าต่างที่ใช้เขียน Code) จากนั้นกดแป้น Ctrl+G เพื่อเปิดหน้าต่าง Immediate Windows จากนั้นคีย์ Statement ด้านล่างนี้ลงไปในหน้าต่าง Immediate Windows แล้ว Enter

application.EnableEvents = true

จากนั้นทดสอบการคีย์ค่าในเซลล์ A1 ของ Sheet1 อีกรอบครับ

ดูเหมือนจะแจ้งปัญหามาไม่ชัดเจนนะครับ ในไฟล์แนบพบว่า Code จะเปลี่ยนชื่อให้ทุกชีต แสดงว่า Events ทำงานแล้ว

ที่เปลี่ยนทุกชีตเพราะเขียน Code ให้ Loop เปลี่ยนทุกชิต หากต้องการจะเปลี่ยนเฉพาะ Sheet1 ก็ต้องปรับไม่ให้มีการ Loop เช่นเปลี่ยนเป็นด้านล่างครับ

Code: Select all

Sub test()
    Dim WS As Worksheet
    Set WS = ActiveSheet
    WS.Name = WS.Range("a1").Value
End Sub

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Thu Dec 28, 2017 9:52 pm
by March201711
อาจารย์คะ อยากให้เปลี่ยนเฉพาะ sheet1 sheet เดียวค่ะ พอกด enterแล้ว excel เปลี่ยนให้ทุก sheet เลยค่ะ

Re: เปลี่ยนชื่อ Sheet ตาม cell ที่กำหนด [VBA]

Posted: Thu Dec 28, 2017 9:53 pm
by snasui
:D อ่านโพสต์ด้านบน ผมเพิ่มให้แล้วครับ :roll: