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

ใช้ 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:สงสัยคะ เพิ่มไปเพราะอะไรค่ะ

ประโยคนี้เป็นคำถาม จะต้องลงท้ายด้วย "คะ" ครับ
ที่ถูกคือ
สงสัย
ค่ะ เพิ่มไปเพราะอะไร
คะ
ผมพยายามแจ้งทุกครั้งเพื่อให้ทบทวนการใช้งาน แต่ยังพบว่ายังเป็นเหมือนเดิม ในโอกาสต่อไป
ผมจะให้เขียนแก้เองทุก ๆ โพสต์จนกว่าจะเขียนได้ถูกต้องนะครับ
สำหรับที่ถามมา คำตอบคือเพิ่มไปเพื่อให้เป็นอัตโนมัติ เมื่อคีย์ค่าเข้าไปในเซลล์ 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

นำตัวแปร 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

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

ผมดาวน์โหลดไฟล์มาทดสอบแล้วเปลี่ยนได้ปกติครับ
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

ขั้นตอนแค่เปลี่ยนชื่อในเซลล์ 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

ลองเข้าหน้าต่าง 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

อ่านโพสต์ด้านบน ผมเพิ่มให้แล้วครับ
