: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

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and 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
รบกวนสอบถามค่ะ
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
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
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 »

ขออภัยค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
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: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
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


ลองทดสอบโค้ดแล้วมีป้อปอัพขึ้นค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
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: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
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
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
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: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
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, " "&" "))
ได้มั้ยคะ หรือจะต้องกำหนดจำนวนอักขระเท่านั้นคะ
You do not have the required permissions to view the files attached to this post.
User avatar
puriwutpokin
Guru
Guru
Posts: 3792
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: 3792
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