Page 1 of 2
สอบถามเรื่องการแจ้งเตือนครับ
Posted: Fri Jul 13, 2018 5:16 pm
by Leng
พอดีผมต้องการเขียน vba โดยแจ้งเตือนถ้าหากไม่มีข้อมูลครับ
-ผมได้ทำการสร้าง user from และ textbox ครับ โดย textbox ที่ผมทำนั้นได้เขียน vlookup ไว้
เช่น
ถ้า textbox1 ได้ มีการลงข้อมูลว่า 1234 textbox2 ก็จะ Auto เป็น 4567 โดยการเซตข้อมูลไว้จาก sheet1
สิ่ที่ต้องการคือ
-ถ้าไม่มีข้อมูล อยากให้แจ้งเตือนว่า"กรุณาใส่ข้อมูลก่อน"
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Fri Jul 13, 2018 7:03 pm
by snasui

การใช้ VBA ต้องเขียนมาเองก่อนเสมอ แนบไฟล์ที่ได้เขียน Code ไว้แล้วมาถามกัน แจ้ง Procedure ที่ติดปัญหา บรรทัดที่ติดปัญหา จะได้สะดวกในการตอบครับ
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 8:07 am
by Leng
อาจารย์ครับไม่ทราบอาจารย์พอจะมีเว็บหรืออะไรให้ดูเป็นแนวทางไหมครับ
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 9:05 am
by snasui

คงต้องลอง Search ดู เช่น Link นี้เป็นต้นครับ
เตือน+VBA
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 9:14 am
by Leng
Code: Select all
Private Sub TextBox5_AfterUpdate()
If Me.TextBox5.Text = "" Then Exit Sub
emptyrow = WorksheetFunction.CountA(Range("A:A")) + 1
Worksheets("IN").Cells(emptyrow, 1).Value = TextBox1.Value
Worksheets("IN").Cells(emptyrow, 2).Value = TextBox2.Value
Worksheets("IN").Cells(emptyrow, 3).Value = TextBox4.Value
Worksheets("IN").Cells(emptyrow, 4).Value = ComboBox1.Value
Worksheets("IN").Cells(emptyrow, 5).Value = TextBox5.Value
Worksheets("IN").Cells(emptyrow, 6).Value = TextBox6.Value
Worksheets("IN").Cells(emptyrow, 7).Value = TextBox7.Value
Worksheets("IN").Cells(emptyrow, 8).Value = TextBox8.Value
Worksheets("IN").Cells(emptyrow, 9).Value = TextBox9.Value
If WorksheetFunction.CountIf(Sheets("Data").Range("A:D"), Me.TextBox5.Value) = 0 Then
Me.TextBox5.Value = ""
End If
With Me
.TextBox6 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 2, 0)
.TextBox7 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 3, 0)
.TextBox8 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 4, 0)
End With
End Sub
ปัญหาคือพอไม่มีข้อมูลในชีท data จะขึ้น error ครับและจะเด้งมาหน้าโค๊ดเลยรบกวนอาจารช่วยหน่อยครับถ้าไม่มีข้อมูลอยากให้ขึ้นว่า"กรุณาตรสจสอบข้อมูล.
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 9:26 am
by snasui

ตัวอย่างการปรับ Code ที่ใช้ตรวจสอบว่าไม่มีข้อมูลแล้วให้ออกจาก Procedure ครับ
Code: Select all
If WorksheetFunction.CountIf(Sheets("Data").Range("A:A"), Me.TextBox5.Value) = 0 Then
Me.TextBox5.Value = ""
MsgBox "Not found."
Exit Sub
End If
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 9:37 am
by Leng
Code: Select all
Private Sub TextBox5_AfterUpdate()
If Me.TextBox5.Text = "" Then Exit Sub
emptyrow = WorksheetFunction.CountA(Range("A:A")) + 1
Worksheets("IN").Cells(emptyrow, 1).Value = TextBox1.Value
Worksheets("IN").Cells(emptyrow, 2).Value = TextBox2.Value
Worksheets("IN").Cells(emptyrow, 3).Value = TextBox4.Value
Worksheets("IN").Cells(emptyrow, 4).Value = ComboBox1.Value
Worksheets("IN").Cells(emptyrow, 5).Value = TextBox5.Value
Worksheets("IN").Cells(emptyrow, 6).Value = TextBox6.Value
Worksheets("IN").Cells(emptyrow, 7).Value = TextBox7.Value
Worksheets("IN").Cells(emptyrow, 8).Value = TextBox8.Value
Worksheets("IN").Cells(emptyrow, 9).Value = TextBox9.Value
If WorksheetFunction.CountIf(Sheets("Data").Range("A:D"), Me.TextBox5.Value) = 0 Then
Me.TextBox5.Value = ""
End If
With Me
.TextBox6 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 2, 0)
.TextBox7 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 3, 0)
.TextBox8 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 4, 0)
End With
If WorksheetFunction.CountIf(Sheets("Data").Range("A:A"), Me.TextBox5.Value) = 0 Then
Me.TextBox5.Value = ""
MsgBox "Not found."
Exit Sub
End If
End Sub
ไม่สามารถ run ได้ครับ
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 9:42 am
by snasui

ใส
แทน Code ด้านล่างนี้ ไม่ใช่ใส่เพิ่มครับ
Code: Select all
If WorksheetFunction.CountIf(Sheets("Data").Range("A:D"), Me.TextBox5.Value) = 0 Then
Me.TextBox5.Value = ""
End If
ข้อสังเกต ถ้าเพิ่มผมจะบอก Code แวดล้อมไปด้วยครับ
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 9:48 am
by Leng
ได้ละครับ แต่ติดปัญหาคือ พอ scan แล้วข้อมูลก็จะ add ลงหมดทั้งๆที่ขึ้น MsgBox "Not found." แล้ว
Code: Select all
Private Sub TextBox5_AfterUpdate()
If Me.TextBox5.Text = "" Then Exit Sub
emptyrow = WorksheetFunction.CountA(Range("A:A")) + 1
Worksheets("IN").Cells(emptyrow, 1).Value = TextBox1.Value
Worksheets("IN").Cells(emptyrow, 2).Value = TextBox2.Value
Worksheets("IN").Cells(emptyrow, 3).Value = TextBox4.Value
Worksheets("IN").Cells(emptyrow, 4).Value = ComboBox1.Value
Worksheets("IN").Cells(emptyrow, 5).Value = TextBox5.Value
Worksheets("IN").Cells(emptyrow, 6).Value = TextBox6.Value
Worksheets("IN").Cells(emptyrow, 7).Value = TextBox7.Value
Worksheets("IN").Cells(emptyrow, 8).Value = TextBox8.Value
Worksheets("IN").Cells(emptyrow, 9).Value = TextBox9.Value
If WorksheetFunction.CountIf(Sheets("Data").Range("A:D"), Me.TextBox5.Value) = 0 Then
Me.TextBox5.Value = ""
MsgBox "Not found."
Exit Sub
End If
With Me
.TextBox6 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 2, 0)
.TextBox7 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 3, 0)
.TextBox8 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 4, 0)
End With
If WorksheetFunction.CountIf(Sheets("Data").Range("A:D"), Me.TextBox5.Value) = 0 Then
Me.TextBox5.Value = ""
MsgBox "Not found."
Exit Sub
End If
End Sub
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 9:58 am
by snasui

ลองพยายาม Debug และแก้ไขมาดูก่อน นำสิ่งที่พยายามแล้วยังติดอยู่มาถามกันต่อครับ
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 10:02 am
by Leng
ได้ละครับขอบคุณอาจารย์มากครับ
Code: Select all
Private Sub TextBox5_AfterUpdate()
If WorksheetFunction.CountIf(Sheets("Data").Range("A:D"), Me.TextBox5.Value) = 0 Then
Me.TextBox5.Value = ""
MsgBox "Not found."
Exit Sub
End If
emptyrow = WorksheetFunction.CountA(Range("A:A")) + 1
Worksheets("IN").Cells(emptyrow, 1).Value = TextBox1.Value
Worksheets("IN").Cells(emptyrow, 2).Value = TextBox2.Value
Worksheets("IN").Cells(emptyrow, 3).Value = TextBox4.Value
Worksheets("IN").Cells(emptyrow, 4).Value = ComboBox1.Value
Worksheets("IN").Cells(emptyrow, 5).Value = TextBox5.Value
Worksheets("IN").Cells(emptyrow, 6).Value = TextBox6.Value
Worksheets("IN").Cells(emptyrow, 7).Value = TextBox7.Value
Worksheets("IN").Cells(emptyrow, 8).Value = TextBox8.Value
Worksheets("IN").Cells(emptyrow, 9).Value = TextBox9.Value
With Me
.TextBox6 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 2, 0)
.TextBox7 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 3, 0)
.TextBox8 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 4, 0)
End With
End Sub
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 1:27 pm
by Leng
ติดปัญหาครับรบกวนอาจารย์หน่อยครับ
-เวลาแสกนทีแรกข้อมูลไม่ขึ้นครับแต่แสกนทีที่ 2 ข้อมูลขึ้นปกติครับรบกวนอาจารย์หน่อยครับ
Code: Select all
Private Sub TextBox5_AfterUpdate()
If WorksheetFunction.CountIf(Sheets("Data").Range("A:D"), Me.TextBox5.Value) = 0 Then
Me.TextBox5.Value = ""
MsgBox "Not found."
Exit Sub
End If
emptyrow = WorksheetFunction.CountA(Range("A:A")) + 1
Worksheets("IN").Cells(emptyrow, 1).Value = TextBox1.Value
Worksheets("IN").Cells(emptyrow, 2).Value = TextBox2.Value
Worksheets("IN").Cells(emptyrow, 3).Value = TextBox4.Value
Worksheets("IN").Cells(emptyrow, 4).Value = ComboBox1.Value
Worksheets("IN").Cells(emptyrow, 5).Value = TextBox5.Value
Worksheets("IN").Cells(emptyrow, 6).Value = TextBox6.Value
Worksheets("IN").Cells(emptyrow, 7).Value = TextBox7.Value
Worksheets("IN").Cells(emptyrow, 8).Value = TextBox8.Value
Worksheets("IN").Cells(emptyrow, 9).Value = TextBox9.Value
With Me
.TextBox6 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 2, 0)
.TextBox7 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 3, 0)
.TextBox8 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 4, 0)
End With
End Sub
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 1:29 pm
by snasui

แนบไฟล์ล่าสุดมาด้วยเสมอจะได้ดูต่อไปจากนั้นครับ
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 1:37 pm
by Leng
Code: Select all
Private Sub TextBox5_AfterUpdate()
If WorksheetFunction.CountIf(Sheets("Data").Range("A:D"), Me.TextBox5.Value) = 0 Then
Me.TextBox5.Value = ""
MsgBox "Not found."
Exit Sub
End If
emptyrow = WorksheetFunction.CountA(Range("A:A")) + 1
Worksheets("IN").Cells(emptyrow, 1).Value = TextBox1.Value
Worksheets("IN").Cells(emptyrow, 2).Value = TextBox2.Value
Worksheets("IN").Cells(emptyrow, 3).Value = TextBox4.Value
Worksheets("IN").Cells(emptyrow, 4).Value = ComboBox1.Value
Worksheets("IN").Cells(emptyrow, 5).Value = TextBox5.Value
Worksheets("IN").Cells(emptyrow, 6).Value = TextBox6.Value
Worksheets("IN").Cells(emptyrow, 7).Value = TextBox7.Value
Worksheets("IN").Cells(emptyrow, 8).Value = TextBox8.Value
Worksheets("IN").Cells(emptyrow, 9).Value = TextBox9.Value
With Me
.TextBox6 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 2, 0)
.TextBox7 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 3, 0)
.TextBox8 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 4, 0)
End With
End Sub
ติดปัญหาครับรบกวนอาจารย์หน่อยครับ
-เวลาแสกนทีแรกข้อมูลไม่ขึ้นครับแต่แสกนทีที่ 2 ข้อมูลขึ้นปกติครับรบกวนอาจารย์หน่อยครับ
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 1:42 pm
by snasui

ตัวอย่างการปรับ Code ครับ
Code: Select all
Private Sub TextBox5_AfterUpdate()
if me.textbox5.text = "" then exit sub
If WorksheetFunction.CountIf(Sheets("Data").Range("A:A"), Me.TextBox5.Value) = 0 Then
'Me.TextBox5.Value = ""
MsgBox "Not found."
Exit Sub
End If
'Other code...
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 1:47 pm
by Leng
Code: Select all
Private Sub TextBox5_AfterUpdate()
If Me.TextBox5.Text = "" Then Exit Sub
If WorksheetFunction.CountIf(Sheets("Data").Range("A:A"), Me.TextBox5.Value) = 0 Then
'Me.TextBox5.Value = ""
MsgBox "Not found."
Exit Sub
End If
emptyrow = WorksheetFunction.CountA(Range("A:A")) + 1
Worksheets("IN").Cells(emptyrow, 1).Value = TextBox1.Value
Worksheets("IN").Cells(emptyrow, 2).Value = TextBox2.Value
Worksheets("IN").Cells(emptyrow, 3).Value = TextBox4.Value
Worksheets("IN").Cells(emptyrow, 4).Value = ComboBox1.Value
Worksheets("IN").Cells(emptyrow, 5).Value = TextBox5.Value
Worksheets("IN").Cells(emptyrow, 6).Value = TextBox6.Value
Worksheets("IN").Cells(emptyrow, 7).Value = TextBox7.Value
Worksheets("IN").Cells(emptyrow, 8).Value = TextBox8.Value
Worksheets("IN").Cells(emptyrow, 9).Value = TextBox9.Value
With Me
.TextBox6 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 2, 0)
.TextBox7 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 3, 0)
.TextBox8 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox5), Sheets("Data").Range("lookupdata"), 4, 0)
End With
End Sub
ยังเหมือนเดิมครับ
-เวลาแสกนทีแรกข้อมูลไม่ขึ้นครับแต่แสกนทีที่ 2 ข้อมูลขึ้นปกติครับรบกวนอาจารย์หน่อยครับ
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 1:52 pm
by snasui

บอกค่าทดสอบมาให้ครบทุกช่องเสมือนทำงานจริงจะได้ทดสอบดูได้ ตอนนี้ผมเพียงทดสอบกรอกแค่ TextBox5 ที่ใช้ Scan เท่านั้น ซึ่งพบว่าทำงานได้ตามปกติครับ
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 1:59 pm
by Leng
พอแสกนทีที่ 1 ข้อมูลที่ vlookup ไว้ไม่ขึ้นครับ
พอแสกนทีที่ 2 ข้อมูลที่ vlookup ขึ้นตามปกติครับ
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 2:23 pm
by snasui

ดูแล้วไม่เข้าใจครับ
เพื่อให้การ Debug เกิดความกระชับ รวดเร็ว สิ่งที่ต้องทำคือ ให้แนบมาเฉพาะ Code ที่เกี่ยวข้องกับประเด็นปัญหา ส่วนที่ไม่เกี่ยวข้องให้ Mark ทิ้งไปก่อน
- Mark Code การขยายหน้าจอและซ่อนเมนูออกไป
- Mark การกดปุ่ม Exit แล้วปิดไฟล์ออกไป
- Mark การซ่อนชีตซ่อนหัวบรรทัดออกไป
จากที่ถามมาในโพสต์แรกคือตามด้านล่าง
Leng wrote: Fri Jul 13, 2018 5:16 pm
พอดีผมต้องการเขียน vba โดยแจ้งเตือนถ้าหากไม่มีข้อมูลครับ
-ผมได้ทำการสร้าง user from และ textbox ครับ โดย textbox ที่ผมทำนั้นได้เขียน vlookup ไว้
เช่น
ถ้า textbox1 ได้ มีการลงข้อมูลว่า 1234 textbox2 ก็จะ Auto เป็น 4567 โดยการเซตข้อมูลไว้จาก sheet1
สิ่งที่ต้องการคือ
-ถ้าไม่มีข้อมูล อยากให้แจ้งเตือนว่า"กรุณาใส่ข้อมูลก่อน"
ช่วยทำไฟล์สภาพนี้มา หรือหากแก้ได้แล้วให้ระบุปัญหาที่เป็น ณ ปัจจุบัน แนบไฟล์ด้วยสภาพแวดล้อมที่เกิดปัญหานั้นมาอีกที อย่าลืมที่ผมแจ้งไปด้านบนว่าให้นำมาถามเฉพาะ Code ที่เกี่ยวข้องกับปัญหาเท่านั้น เพื่อให้เกิดความสะดวกต่อการเข้าถึงปัญหาครับ
Re: สอบถามเรื่องการแจ้งเตือนครับ
Posted: Sat Jul 14, 2018 2:33 pm
by Leng
ต้องขอโทษด้วยครับ