: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

โค้ด VBA ประเภท worksheet change

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
godman
Silver
Silver
Posts: 643
Joined: Mon Jul 05, 2010 6:18 pm

โค้ด VBA ประเภท worksheet change

#1

Post by godman »

สวัสดีครับ
ปัญหาของผมมีดังนี้ ผมอยากให้เซลล์ซึ่งได้จากสูตร มีแต่สูตรครับ ที่มีคำว่า PM TOP PUNCH ให้มี msg box ว่าให้เรียกช่างเครื่อง ป้อบอัพ ขึ้นมา แต่ทำไมผมเขียนโค้ดแบบนี้แล้วทำไม่ได้ครับ ผมใช้ M5 ว่าถ้ามันมีค่าเท่ากับ M5 ให้แสดง แต่ผมก็อยากรู้จริงๆว่าจำเป็นต้องมี M5 ไหม ถ้าไม่มีแล้วให้มันดูเฉพะ คอลัมพ์ C ได้ไหม
ข้อสอง ผมอยากทราบว่า คำสั่ง Worksheet Change นี้มันมีข้อจำกัดอะไรบ้าง ผมเข้าใจถูกไหมว่ามันให้ใช้ 1 คำสั่งต่อ 1 workbook เท่านั้น
แนวทางการประยุกต์ต่อไปของผมคือ เพื่อเจอคำนี้คือคำอะไรซักอย่างจากสูตรให้มัน email ตอนเปิดไฟล์ไปยังผู้เกี่ยวข้องให้ซ่อมเครื่อง ไม่ทราบว่าจะเป็นเป็นไปได้ไหมครับ สำหรับความฝันของผม

Code: Select all

OptionExplicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$M$5" Then
    If Range("c10").Value = "PM TOP PUNCH" Then
        MsgBox "Please call Tool Room"
    End If
End If
End Sub
Attachments
Copy of IB Die PM record sheet.xls
เซล: C10 sheet summary กับ M5 ไม่ทราบว่า M5 จำเป็นต้องมีไหมครับ
(160 KiB) Downloaded 15 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: โค้ด VBA ประเภท worksheet change

#2

Post by snasui »

:D
godman wrote:ปัญหาของผมมีดังนี้ ผมอยากให้เซลล์ซึ่งได้จากสูตร มีแต่สูตรครับ ที่มีคำว่า PM TOP PUNCH ให้มี msg box ว่าให้เรียกช่างเครื่อง ป้อบอัพ ขึ้นมา แต่ทำไมผมเขียนโค้ดแบบนี้แล้วทำไม่ได้ครั
เพราะว่าเขียน Option Explicit ไม่ถูกต้องครับ ที่ถูกนั้นต้องเว้นวรรค ไม่ใช่เขียนติดกัน
godman wrote:ผมใช้ M5 ว่าถ้ามันมีค่าเท่ากับ M5 ให้แสดง แต่ผมก็อยากรู้จริงๆว่าจำเป็นต้องมี M5 ไหม ถ้าไม่มีแล้วให้มันดูเฉพะ คอลัมพ์ C ได้ไหม
ไม่จำเป็นต้องมี M5 แต่จะต้องทราบว่ามีเหตุการณ์ใดที่ให้โปรแกรมรู้ว่าเมื่อมีเหตุการณ์นั้นให้ตรวจสอบ C10 ทันที
godman wrote:ข้อสอง ผมอยากทราบว่า คำสั่ง Worksheet Change นี้มันมีข้อจำกัดอะไรบ้าง ผมเข้าใจถูกไหมว่ามันให้ใช้ 1 คำสั่งต่อ 1 workbook เท่านั้น
เข้าใจไม่ถูกต้องครับ Worksheet Change เป็น Event ที่ใช้ตรวจสอบว่า หากเกิดการเปลี่ยนแปลงในชีทนั่น ๆ แล้วต้องการให้โปรแกรมทำอะไร ไม่จำเป็นต้องมีแค่ 1 คำสั่ง จะมีกี่คำสั่งก็ได้ขึ้นกับความสามารถในการจัดการ เราไม่จำเป็นต้องเขียนคำสั่งลงใน Worksheet Change Event เพราะสามารถเขียนให้เรียกคำสั่งที่ Module อื่น ๆ ได้ตามต้องการ
godman wrote:แนวทางการประยุกต์ต่อไปของผมคือ เพื่อเจอคำนี้คือคำอะไรซักอย่างจากสูตรให้มัน email ตอนเปิดไฟล์ไปยังผู้เกี่ยวข้องให้ซ่อมเครื่อง ไม่ทราบว่าจะเป็นเป็นไปได้ไหมครับ สำหรับความฝันของผม
เป็นไปได้ครับ
godman
Silver
Silver
Posts: 643
Joined: Mon Jul 05, 2010 6:18 pm

Re: โค้ด VBA ประเภท worksheet change

#3

Post by godman »

ขอบคุณมากครับ สำหรับความฝันของผมจะเป็นจริงได้
อยากให้เปิดไฟล์มาถ้าเจอคำว่า PM TOP PUNCH ในคอลัมพ์ C อย่างน้อย 1 ตัวขึ้นไป จะให้มันป้อบอัพขึ้นมา ผมจะต้องแก้ไขโค้ดอย่างไร ผมลองเขียนโค้ดแบบนี้ มา
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$M$5" Then
If Range("c10").Value = "PM TOP PUNCH" Then
MsgBox "Please call Tool Room"
End If
End If
End Sub
Attachments
Copy of IB Die PM record sheet.xls
ไม่แน่ใจว่า ว่า M5 จะต้องไม่เป็นสูตรใช่ไหมครับ
(163.5 KiB) Downloaded 16 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: โค้ด VBA ประเภท worksheet change

#4

Post by snasui »

:D สามารถใช้ Code ด้านล่างที่ ThisWorkbook ครับ

Code: Select all

Private Sub Workbook_Open()
    If Sheets("Summary").Range("C10") = "PM TOP PUNCH" Then
        MsgBox "xyz"
    End If
End Sub
godman
Silver
Silver
Posts: 643
Joined: Mon Jul 05, 2010 6:18 pm

Re: โค้ด VBA ประเภท worksheet change

#5

Post by godman »

thank you so much สามารถนำไป apply ต่อไปได้มากมาย ขั้นตอนต่อไปของผมคือ ไปทำให้มัน protect password ไม่ให้สามาถกรอกข้อมูลอะไรได้จนกว่าคนที่เป็นช่างจะมาใส่ pw ได้และให้ email ไปยังผู้เกี่ยวข้องทราบครับว่าจำนวนเกิน สี่แสน แล้ว ผมจะลองพยายามก่อน ติดขัดตรงใหนคงต้องขอรบกวนท่านผุ้รู้อีกรอบ ขอบคุณมาก
godman
Silver
Silver
Posts: 643
Joined: Mon Jul 05, 2010 6:18 pm

Re: โค้ด VBA ประเภท worksheet change

#6

Post by godman »

จากเมื่อวานผมได้นำส่ิงที่่ท่านผู้รู้นำไปใช้งาน ใช้ได้ผล แต่ผมต้องการต่อยอดครับ
ผมได้ VBA นี้มาจากเพื่อนที่เป็น it แต่พอผมนำมาใช้ ผมคิดว่าผมก็สร้างเงื่อนไขได้ตรง แต่มันกลับขึ้น error ครับ ว่า Complie error in hidden module Module 5 บางทีก็ขึ้น User define type not define ประมาณนี้ ไม่ทราบว่าจะแก้ปัญหานี้ได้อย่างไรครับให้สามารถใช้งานได้สำหรับทุกเครื่อง สำหรับ password ให้ท่านจงใส่ 1234 ครับ หลักการคือ ให้เฉพาะช่างที่มี password นี้เป็นคนมาใส่ และซ่อมเสร็จแล้ว ให้ส่ง email แจ้งทุกท่านที่มีชื่อในช่อง n ครับ

Code: Select all

Sub EmailFromExcel()
    On Error GoTo PROC_EXIT
    Dim OL As New Outlook.Application

    Dim olMail As Outlook.MailItem
    Set olMail = OL.CreateItem(olMailItem)

    Dim SrcSheet As Excel.Worksheet
    Set SrcSheet = Sheets("StatusPage")

    With olMail
        .To = SrcSheet.Range("n3").Text + "@intriplex.co.th"
        .Subject = "Some documents are awaiting for approval."
        .Body = "Dear all concern, " & vbCrLf & vbCrLf & vbTab & _
        "Please consider to review and approve your document as link : file:///\\srv-05\Document_Control$\XX-Draft\DOC_APPROVE_STATUS\CheckOnStatus.xlsm" & vbCrLf & vbCrLf & _
        "Best regards," & vbCrLf & vbCrLf & _
        "Supaporn Klamthapthiraphon " & vbCrLf & _
        "Executive, Document Control " & vbCrLf & _
        "Precision Forming Group " & vbCrLf & vbCrLf & _
        "IntriPlex (Thailand) Ltd " & vbCrLf & _
        "158-160 Moo 1, Hi-Tech Industrial Estate, " & vbCrLf & _
        "T. Baanlane, A. Bangpa-in " & vbCrLf & _
        "Ayutthaya 13160  Thailand " & vbCrLf & vbCrLf & _
        "T : +66 (0) 35 729 183 " & vbCrLf & _
        "M: +66 (0) 86 089 9861 " & vbCrLf & _
        "F : +66 (0) 35 729 192 " & vbCrLf & _
        "www.mmi.com.sg " & vbCrLf & vbCrLf & _
        "This message may contain confidential or privileged information intended only for the use of the addressee(s) named above.  If you are not the intended recipient of this message, you are not to use, disseminate, distribute or reproduce this message contained herein to anyone.  If you have received this email in error, please notify the sender and delete this message. Thank You."

        .Display vbModal
        '.Send
    End With

PROC_EXIT:
    On Error GoTo 0
    OL.Quit
    Set OL = Nothing
End Sub
Attachments
IB_DiePM_RecordTEST.xls
error ตอนส่งเมล์
(262.5 KiB) Downloaded 17 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: โค้ด VBA ประเภท worksheet change

#7

Post by snasui »

:D ลองตามนี้ครับ
  1. เข้า VBE
  2. คลิกเมนู Tools > เลือก Microsoft Outlook 12.0 Object Library หรือที่มีในเครื่อง เช่น 14, 15 แล้วแต่รุ่นของ Microsoft Office ที่ใช้
  3. ทดสอบการ Run Code
Post Reply