: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

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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่

Post a reply


This question is a means of preventing automated form submissions by spambots.
Smilies
:D :thup: :cp: :flw: :rz: :sg: :tt: :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :ard: :arl: :aru: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: ต้องการ run macro หลังจากกด Enter

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

#19

by neziices » Mon Nov 13, 2023 3:51 pm

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

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

#18

by puriwutpokin » Mon Nov 13, 2023 2:12 pm

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
ประมาณนี้ครับ

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

#17

by neziices » 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
ช่วยอธิบายโค้ดนี้หน่อยได้มั้ยคะ

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

#16

by puriwutpokin » 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))

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

#15

by neziices » Mon Nov 13, 2023 10:17 am

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

สอบถามเพิ่มเติมค่ะถ้าจะต้องการหาค่าเว้นวรรคสองค่า
เพื่อให้ได้ค่าที่ต้องการ ตัวอย่างเช่น 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

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

#14

by snasui » Fri Nov 10, 2023 7:57 pm

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 อักขระครับ

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

#13

by neziices » Fri Nov 10, 2023 4:42 pm

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, " "))
รบกวนอาจารย์ช่วยอธิบายโค้ดนี้หน่อยได้มั้ยคะ

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

#12

by snasui » Fri Nov 10, 2023 3:27 pm

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

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

ในโอกาสถัดไปจำเป็นจะต้องปรับ Code ตามความต้องการมาเองก่อน ติดปัญหาแล้วค่อยถามกัน ปรับได้เท่าไรก็เท่านั้น ถือว่าได้ปรับมาเองก่อนแล้วตามกฎการใช้บอร์ดข้อ 5 ด้านบน :roll: ครับ

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

#11

by neziices » Fri Nov 10, 2023 2:50 pm

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

เพิ่มเติมอีกนิดค่ะ ถ้าอยากจะให้ข้อความสั้นลงแก้ไขตรงเลข 31 จากโค้ด .Value, 31 ถูกมั้ยคะ
แล้วถ้าเราต้องการเพิ่มสูตรตัดข้อความจาก spacebar ในโค้ด ต้องใช้สูตรไหนคะ
เพราะลองใช้สูตร =trim กับ =left แล้วจะต้องกำหนดจำนวนตัวอักษร
ตัวอย่างเช่น ค่าที่ต้องการคือ PV2312001 Social
Attachments
Book4.xlsm
(23.02 KiB) Downloaded 5 times

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

#10

by snasui » Fri Nov 10, 2023 2:11 pm

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 เสียด้วยครับ

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

#9

by neziices » Fri Nov 10, 2023 11:49 am

อาจารย์คะ แล้วถ้าในกรณีที่ชื่อชีทไม่ใช่ 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

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

#8

by snasui » Fri Nov 10, 2023 10:02 am

: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 อักขระเรียบร้อยแล้วครับ

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

#7

by neziices » Fri Nov 10, 2023 9:46 am

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


ลองทดสอบโค้ดแล้วมีป้อปอัพขึ้นค่ะ
Attachments
Book4.xlsm
(19.39 KiB) Downloaded 2 times
Capture1.JPG
Capture1.JPG (25.26 KiB) Viewed 87 times

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

#6

by snasui » Thu Nov 09, 2023 8:28 pm

:D แนบไฟล์ล่าสุดหลังจากปรับปรุง Code มาแล้ว แจ้งมาด้วยว่า I6 ของชีตใด ชื่อชีตจะเปลี่ยนเป็นค่าใด จะได้ดูต่อไปจากนั้นครับ

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

#5

by neziices » Thu Nov 09, 2023 2:31 pm

ิสิ่งที่ต้องการคือเมื่อมีการแก้ไขในเซลล์ I6 หลังจากกด enter ชื่อ Sheet1 เปลี่ยนตามค่ะ

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

#4

by snasui » Thu Nov 09, 2023 1:46 pm

: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 ที่กล่าวถึงนั้น ต้องทำงานไหน กับชีตใด เซลล์ได อย่างไร ก่อนหรือไม่ ไม่เช่นนั้นจะไม่ได้คำตอบที่เฉพาะเจาะจงครับ

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

#3

by neziices » Thu Nov 09, 2023 9:40 am

ขออภัยค่ะ
Attachments
Book4.xlsm
(17.48 KiB) Downloaded 4 times

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

#2

by snasui » Wed Nov 08, 2023 8:13 pm

:D กรุณาแนบไฟล์มาใหม่เป็นนามสกุล .xlsm โดยต้องมี Code ไว้ในไฟล์นั้นเรียบร้อยแล้วจะได้ตอบต่อไปจากนั้นครับ

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

#1

by neziices » Wed Nov 08, 2023 6:13 pm

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

Top