:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

ต้องการ run macro หลังจากกด Enter

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
neziices
Member
Member
Posts: 14
Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016

ต้องการ run macro หลังจากกด Enter

#1

Post by neziices »

Book4.xlsx
(14.14 KiB) Downloaded 1 time
รบกวนสอบถามค่ะ
1.ต้องการ run macro หลังจากกด Enter โดยไม่สร้างปุ่มสามารถทำได้มั้ยคะ
2.ถ้าต้องการเพิ่มชื่อจาก column C6 เขียนแบบนี้ถูกมั้ยคะ

Code: Select all

Sub test()
    Dim WS As Worksheet
    Set WS = ActiveSheet
    WS.Name = WS.Range("I6").Value & " " & ActiveSheet.Rang("C6").Value
    
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการ run macro หลังจากกด Enter

#2

Post by snasui »

:D กรุณาแนบไฟล์มาใหม่เป็นนามสกุล .xlsm โดยต้องมี Code ไว้ในไฟล์นั้นเรียบร้อยแล้วจะได้ตอบต่อไปจากนั้นครับ
neziices
Member
Member
Posts: 14
Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016

Re: ต้องการ run macro หลังจากกด Enter

#3

Post by neziices »

ขออภัยค่ะ
Attachments
Book4.xlsm
(17.48 KiB) Downloaded 4 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการ run macro หลังจากกด Enter

#4

Post by snasui »

:D ตัวอย่าง Code สั่งให้รันเมื่อคีย์ค่าลงในเซลล์ใด ๆ แล้ว Enter ครับ

Code: Select all

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim WS As Worksheet
    Set WS = ActiveSheet
    WS.Name = WS.Range("I6").Value & " " & WS.Range("C6").Value
End Sub
ควรอธิบายขั้นตอนการทำงานมาอย่างละเอียดว่าการ Enter ที่กล่าวถึงนั้น ต้องทำงานไหน กับชีตใด เซลล์ได อย่างไร ก่อนหรือไม่ ไม่เช่นนั้นจะไม่ได้คำตอบที่เฉพาะเจาะจงครับ
neziices
Member
Member
Posts: 14
Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016

Re: ต้องการ run macro หลังจากกด Enter

#5

Post by neziices »

ิสิ่งที่ต้องการคือเมื่อมีการแก้ไขในเซลล์ I6 หลังจากกด enter ชื่อ Sheet1 เปลี่ยนตามค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการ run macro หลังจากกด Enter

#6

Post by snasui »

:D แนบไฟล์ล่าสุดหลังจากปรับปรุง Code มาแล้ว แจ้งมาด้วยว่า I6 ของชีตใด ชื่อชีตจะเปลี่ยนเป็นค่าใด จะได้ดูต่อไปจากนั้นครับ
neziices
Member
Member
Posts: 14
Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016

Re: ต้องการ run macro หลังจากกด Enter

#7

Post by neziices »

I6 ของ Sheet1 ค่ะ ชื่อชีตจะเปลี่ยนเป็น PV2312001 Social Security Office


ลองทดสอบโค้ดแล้วมีป้อปอัพขึ้นค่ะ
Attachments
Book4.xlsm
(19.39 KiB) Downloaded 2 times
Capture1.JPG
Capture1.JPG (25.26 KiB) Viewed 76 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการ run macro หลังจากกด Enter

#8

Post by snasui »

:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim WS As Worksheet
    Set WS = ActiveSheet
    If Sh.Name = Sheets(1).Name Then
        If Target.Address(0, 0) = "I6" Then
            WS.Name = VBA.Left(WS.Range("I6").Value & " " & WS.Range("C6").Value, 31)
        End If
    End If
End Sub
Code นี้จะทำงานเมื่อมีการเปลี่ยนค่าใน Sheet1 เซลล์ I6 เท่านั้น

เดิมที่เกิดปัญหาเพราะว่ากำหนดให้ชื่อชีตมีจำนวนมากกว่า 31 อักขระซึ่งมากกว่าข้อกำหนดของชื่อชีต Code ด้านบนได้ตัดให้เหลือเพียง 31 อักขระเรียบร้อยแล้วครับ
neziices
Member
Member
Posts: 14
Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016

Re: ต้องการ run macro หลังจากกด Enter

#9

Post by neziices »

อาจารย์คะ แล้วถ้าในกรณีที่ชื่อชีทไม่ใช่ Sheet1 ตัวอย่างเช่นเดิมป็นชื่อ PV2312001 Social Security Office
โค้ด If Sh.Name = Sheets(1).Name Then จะต้องเปลี่ยนเป็น If Sh.Name = " ".Name Then ถูกมั้ยคะ
แล้วแล้วในกรณีที่มีหลายชีทถ้าอยากจะกำหนดให้ในการแก้ไขเซลล์ I6 กับ C6 สามารถเปลี่ยนทุกชีท ไม่ใช่เฉพาะ sheet1 จะเพิ่มโค้ดอย่างไรคะ


Code: Select all

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim WS As Worksheet
    Set WS = ActiveSheet
    If Sh.Name = " ".Name Then
        If Target.Address(0, 0) = "I6" Then
            WS.Name = VBA.Left(WS.Range("I6").Value & " " & WS.Range("C6").Value, 31)
        End If
    End If
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการ run macro หลังจากกด Enter

#10

Post by snasui »

neziices wrote: Fri Nov 10, 2023 11:49 am ถ้าในกรณีที่ชื่อชีทไม่ใช่ Sheet1 ตัวอย่างเช่นเดิมป็นชื่อ PV2312001 Social Security Office
โค้ด If Sh.Name = Sheets(1).Name Then จะต้องเปลี่ยนเป็น If Sh.Name = " ".Name Then ถูกมั้ยคะ
:D กรณีเช่นนี้ไม่จำเป็นต้องมีบรรทัดนี้ สามารถลบทิ้งหรือทำให้เป็น Comment รวมถึงลบหรือทำ End If ที่สัมพันธ์กับ If ตัวนี้ให้เป็น Comment เสียด้วยครับ
neziices
Member
Member
Posts: 14
Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016

Re: ต้องการ run macro หลังจากกด Enter

#11

Post by neziices »

ทำได้แล้วค่ะอาจารย์ ขอบคุณมากค่ะ

เพิ่มเติมอีกนิดค่ะ ถ้าอยากจะให้ข้อความสั้นลงแก้ไขตรงเลข 31 จากโค้ด .Value, 31 ถูกมั้ยคะ
แล้วถ้าเราต้องการเพิ่มสูตรตัดข้อความจาก spacebar ในโค้ด ต้องใช้สูตรไหนคะ
เพราะลองใช้สูตร =trim กับ =left แล้วจะต้องกำหนดจำนวนตัวอักษร
ตัวอย่างเช่น ค่าที่ต้องการคือ PV2312001 Social
Attachments
Book4.xlsm
(23.02 KiB) Downloaded 4 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการ run macro หลังจากกด Enter

#12

Post by snasui »

:D ตัวอย่าง Code เฉพาะที่ต้องปรับครับ

WS.Name = WS.Range("I6").Value & " " & VBA.Left(WS.Range("C6").Value, InStr(WS.Range("C6").Value, " "))

ในโอกาสถัดไปจำเป็นจะต้องปรับ Code ตามความต้องการมาเองก่อน ติดปัญหาแล้วค่อยถามกัน ปรับได้เท่าไรก็เท่านั้น ถือว่าได้ปรับมาเองก่อนแล้วตามกฎการใช้บอร์ดข้อ 5 ด้านบน :roll: ครับ
neziices
Member
Member
Posts: 14
Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016

Re: ต้องการ run macro หลังจากกด Enter

#13

Post by neziices »

snasui wrote: Fri Nov 10, 2023 3:27 pm WS.Name = WS.Range("I6").Value & " " & VBA.Left(WS.Range("C6").Value, InStr(WS.Range("C6").Value, " "))
รบกวนอาจารย์ช่วยอธิบายโค้ดนี้หน่อยได้มั้ยคะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการ run macro หลังจากกด Enter

#14

Post by snasui »

neziices wrote: Fri Nov 10, 2023 4:42 pm InStr(WS.Range("C6").Value, " ")
:D แปลว่าให้หาว่าค่าวรรคอยู่ในลำดับที่เท่าไรของ WS.Range("C6").Value สมมุติว่าผลลัพธ์คือ 20 เมื่อแทนค่านี้ลงใน Code ที่ครอบอยู่ด้านนอกเป็น

VBA.Left(WS.Range("C6").Value, 20) แปลว่าให้ตัดอักขระด้านซ้ายของ WS.Range("C6").Value มา 20 อักขระครับ
neziices
Member
Member
Posts: 14
Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016

Re: ต้องการ run macro หลังจากกด Enter

#15

Post by neziices »

ขอบคุณมากค่ะอาจารย์

สอบถามเพิ่มเติมค่ะถ้าจะต้องการหาค่าเว้นวรรคสองค่า
เพื่อให้ได้ค่าที่ต้องการ ตัวอย่างเช่น PV2312003 Social Security
ตรงโค้ดเราจะเพิ่มเงื่อนไข

Code: Select all

WS.Name = WS.Range("I6").Value & " " & VBA.Left(WS.Range("C6").Value, InStr(WS.Range("C6").Value, " "&" "))
ได้มั้ยคะ หรือจะต้องกำหนดจำนวนอักขระเท่านั้นคะ
Attachments
Book4.xlsm
(23.16 KiB) Downloaded 2 times
User avatar
puriwutpokin
Guru
Guru
Posts: 3801
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: ต้องการ run macro หลังจากกด Enter

#16

Post by puriwutpokin »

ลองปรับส่วนนี้ดูครับ

Code: Select all

WS.Name = WS.Range("I6").Value & " " & Application.Trim(Left(Application.Substitute(WS.Range("C6").Value, " ", Application.Rept(" ", 99)), 150))
:shock: :roll: :D
neziices
Member
Member
Posts: 14
Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016

Re: ต้องการ run macro หลังจากกด Enter

#17

Post by neziices »

puriwutpokin wrote: Mon Nov 13, 2023 12:28 pm ลองปรับส่วนนี้ดูครับ

Code: Select all

WS.Name = WS.Range("I6").Value & " " & Application.Trim(Left(Application.Substitute(WS.Range("C6").Value, " ", Application.Rept(" ", 99)), 150))
ขอบคุณมากค่ะคุณ puriwutpokin
ช่วยอธิบายโค้ดนี้หน่อยได้มั้ยคะ
User avatar
puriwutpokin
Guru
Guru
Posts: 3801
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: ต้องการ run macro หลังจากกด Enter

#18

Post by puriwutpokin »

neziices wrote: Mon Nov 13, 2023 1:26 pm
puriwutpokin wrote: Mon Nov 13, 2023 12:28 pm ลองปรับส่วนนี้ดูครับ

Code: Select all

WS.Name = WS.Range("I6").Value & " " & Application.Trim(Left(Application.Substitute(WS.Range("C6").Value, " ", Application.Rept(" ", 99)), 150))
ขอบคุณมากค่ะคุณ puriwutpokin
ช่วยอธิบายโค้ดนี้หน่อยได้มั้ยคะ
Application.Substitute(WS.Range("C6").Value, " ", Application.Rept(" ", 99)) ตรงนี้ เป็นการเพิ่มช่องว่างเข้าไป99 ช่องว่างครับ
จะได้ค่าเป็น

Code: Select all

The                                                                                                   Revenue                                                                                                   Department
แล้วมา Left ที่ตำแหน่ง มากกว่า 99 หรือ 99*2 ก็ได้ครับ
แล้วได้ค่าแล้วมา Trim เอาค่าว่างออกครับจะได้ The Revenue
ประมาณนี้ครับ
:shock: :roll: :D
neziices
Member
Member
Posts: 14
Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016

Re: ต้องการ run macro หลังจากกด Enter

#19

Post by neziices »

ขอบคุณอาจารย์ Santipong และคุณ puriwutpokin มากๆค่ะ สูตรที่ให้มาใช้ได้ตามความต้องการค่ะ
Post Reply