snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
piman
Member
Posts: 62 Joined: Wed Jul 29, 2020 2:01 pm
Excel Ver: 2016
#1
Post
by piman » Sun Aug 16, 2020 1:26 pm
สวัสดีครับ
ตอนรันโปรแกรมขึ้นมา ถ้าค่าใน textbox ของเลขที่ตำแหน่งเป็นค่าว่าง ให้ปุ่มบันทึกไม่สามารถทำงานได้ครับ
แต่พอรันโปรแกรมแล้ว ยังสามารถกดปุ่มบันทึกได้อยู่ครับ
ด้านล่างคือ code ที่ผมเขียนไว้ในช่อง textbox รับค่าเลขที่ตำแหน่งครับ
ขอบคุณครับ
Code: Select all
Private Sub txtNumber_Change()
If Me.EnableEvents = False Then Exit Sub
If Me.txtNumber.Value = "" Then
Me.cmdSave.Enabled = False
Else
Me.cmdSave.Enabled = True
End If
End Sub
You do not have the required permissions to view the files attached to this post.
piman
Member
Posts: 62 Joined: Wed Jul 29, 2020 2:01 pm
Excel Ver: 2016
#2
Post
by piman » Sun Aug 16, 2020 1:37 pm
ข้อมูลเพิ่มเติมคร้บ พอเราเลือกข้อมูลที่จะไปแก้ไขแล้ว เรากดปุ่มรีเซ็ทค่าใน textbox ทั้งหมด ปุ่มบันทึกกลับล็อกให้ไม่สามารถใช้งานได้ครับ
แต่ตอนรันโปรแกรมขึ้นมาเลย ปุ่มบันทึกกลับไม่ล็อกให้ครับ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#3
Post
by snasui » Sun Aug 16, 2020 1:53 pm
สรุปว่าเช็ค เลขที่ หรือ เลขที่ตำแหน่ง ที่เขียนมาคือเช็ค เลขที่ ครับ
piman
Member
Posts: 62 Joined: Wed Jul 29, 2020 2:01 pm
Excel Ver: 2016
#4
Post
by piman » Sun Aug 16, 2020 3:11 pm
เลขที่ตำแหน่งครับ txtNumber ชื่อของ textbox เลขที่ตำแหน่งครับ
วัตถุประสงค์เพื่อต้องการไม่ให้สามารถกดปุ่มบันทึกได้ครับ ถ้าหากยังกรอกข้อมูลที่กำหนดไว้ไม่ครบครับ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#5
Post
by snasui » Sun Aug 16, 2020 5:35 pm
ตัวอย่าง Code ครับ
เมื่อเลือกรายการแล้วคลิกปุ่ม แก้ไข หาก TextBox เลขที่ตำแหน่งเป็นค่าว่างให้ปุ่ม ยันทึก ไม่ทำงาน
Code: Select all
Private Sub cmdEdit_Click()
If selected_list = 0 Then
MsgBox "กรุณาเลือกรายการที่ต้องการแก้ไข.", vbOKOnly + vbInformation, "แก้ไข"
Exit Sub
End If
Me.txtRownumber.Value = Application.WorksheetFunction.Match(Me.lstData.List(Me.lstData.ListIndex, 0), ThisWorkbook.Sheets("Data").Range("A:A"), 0)
'ข้อมูลส่วนตัว-------------
Me.txtNumber.Value = Me.lstData.List(Me.lstData.ListIndex, 1)
Me.txtNumberdep.Value = Me.lstData.List(Me.lstData.ListIndex, 2)
If Me.txtNumberdep.Value = "" Then
Me.cmdSave.Enabled = False
Else
Me.cmdSave.Enabled = True
End If
'Other code
เมื่อแก้ไข TextBox เลขที่ตำแหน่งให้เป็นค่าว่างให้ปุ่ม บันทึก ไม่ทำงาน
Code: Select all
Private Sub txtNumberdep_Change()
If Me.txtNumberdep.Value = "" Then
Me.cmdSave.Enabled = False
Else
Me.cmdSave.Enabled = True
End If
End Sub
piman
Member
Posts: 62 Joined: Wed Jul 29, 2020 2:01 pm
Excel Ver: 2016
#6
Post
by piman » Mon Aug 17, 2020 9:22 am
ขอบคุณครับผม
ผมขอสอบถามข้อมูลเพิ่มเติมครับ ผมทำการ Protect Sheet ทุก Sheet ที่มี แล้วใส่ code ปลดล็อกแล้วครับ
**แต่จะมี Sheet Searchdata ที่ใส่ code ปลดล็อกยังไงก็ไม่สามารถรันโปรแกรมได้ครับ ถ้าไม่ได้ทำการ Protect Sheet Searchdate สามารถรันได้ตามปกติครับ **
password protect sheet = "password"
แนบไฟล์ล่าสุดมาให้แล้วครับ
You do not have the required permissions to view the files attached to this post.
piman
Member
Posts: 62 Joined: Wed Jul 29, 2020 2:01 pm
Excel Ver: 2016
#7
Post
by piman » Mon Aug 17, 2020 10:01 am
แจ้งข้อมูลเพิ่มเติมครับ ลองกดปุ่มบันทึก ก็ขึ้น error เหมือนกันครับ
logic
Gold
Posts: 1510 Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365
#8
Post
by logic » Mon Aug 17, 2020 12:52 pm
เท่าดที่ดู เขียนเป็น
ActiveSheet.Unprotect "password"
คือปลดล็อคเฉพาะชีตที่ Active อยู่เท่านั้น
หากจะทำงานกับชีตที่ล็อคก็ตามไปปลดที่นั่นด้วยครับ
ใส่เวอร์ชันของเอ็กเซลในข้อมูลส่วนตัวด้วยครับ ดูวิธีที่ใต้โพสต์ของอาจารย์ ส่วนผมจัดการเรียบร้อยแล้ว
piman
Member
Posts: 62 Joined: Wed Jul 29, 2020 2:01 pm
Excel Ver: 2016
#9
Post
by piman » Mon Aug 17, 2020 1:15 pm
ถ้าระบุชื่อชีทไปเลย
Code: Select all
Sheets("searchdata").Unprotext "password"
ตัวอย่าง code แบบนี้ถูกต้องหรือไม่ครับ
logic
Gold
Posts: 1510 Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365
#10
Post
by logic » Mon Aug 17, 2020 1:18 pm
แบบนั้นเลยครับ
piman
Member
Posts: 62 Joined: Wed Jul 29, 2020 2:01 pm
Excel Ver: 2016
#11
Post
by piman » Mon Aug 17, 2020 1:19 pm
ขอบคุณมากครับ
piman
Member
Posts: 62 Joined: Wed Jul 29, 2020 2:01 pm
Excel Ver: 2016
#12
Post
by piman » Mon Aug 17, 2020 2:43 pm
สอบถามเพิ่มเติมครับ
กรณีที่ใช้ข้อมูลจาก 2 sheet ผมลองเขียน code
Code: Select all
Sheets("Data").Unprotect "password
Sheets("Searchdata").Unprotect "password"
แต่ยังขึ้น error ครับ
สามารถเขียนปลดล็อก 2 sheet ด้วย วิธีใดได้บ้างครับ
ขอบคุณครับ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#13
Post
by snasui » Mon Aug 17, 2020 7:42 pm
ที่เขียนมาก็ใช้ได้แล้วครับ
การปลด Lock จะต้องปลดทุกชีตที่เกี่ยวข้องกับ Code นั้น ๆ ถ้า Code ได้เปลี่ยนค่าใน 10 ชีตก็ต้องปลด Lock ทั้ง 10 ชีตเสียก่อนครับ
ทางที่ดีให้ Loop ปลด Lock ทุกชีตเสียก่อน ทำงานเสร็จค่อย Loop เพื่อ Lock เอาไว้เหมือนเดิม จะได้ไม่ต้องมานั่งเลือกว่าจะปลดและป้องกันชีตใดครับ
piman
Member
Posts: 62 Joined: Wed Jul 29, 2020 2:01 pm
Excel Ver: 2016
#14
Post
by piman » Mon Aug 17, 2020 9:43 pm
ขอบคุณครับ ผมได้ตัวอย่าง code จากเพื่อนสมาชิกแล้วครับ
ทีนี้ผมลองรัน แล้วเจอ error 1 ตำแหน่งที่ code ด้านล่างครับ
Code: Select all
Private Sub cmdDataemployee_Click()
Me.Hide
Userform1.Show
End Sub
หลังจากรัน code จะแสดงหน้าของฟอร์ม frmmain มาก่อนครับ แล้วกดปุ่มข้อมูลพนักงาน เพื่อไปที่ฟอร์ม userform1 ครับ
จากนั้นขึ้น error ที่
ครับ รบกวนด้วยครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#15
Post
by snasui » Tue Aug 18, 2020 7:59 am
ในขั้นตอนการเปิด Form มีการ Call Procedure ที่ชื่อว่า reset และใน Procedure นี้มีการ Clear ข้อมูลในชีต Searchdata ซึ่งจะทำให้เกิด Error เพราะยังไม่ได้ปลด Lock ก่อนที่จะ Clear
การใช้ Code จำเป็นต้องฝึก Debug ให้เป็น อย่างง่าย ๆ คือคลิกเข้าไปในยังแถบที่ลูกศรสีเหลืองชี้ในภาพ จะเกิดสัญญลักษณ์สีเลือดหมูเพื่อกำหนดว่าเมื่อทำการ Run Code มาแล้วให้ Code มาหยุด ณ ตำแหน่งนี้ จากนั้นกดแป้น F8 เพื่อที่จะรันไปทีละ Step เมื่อถึงบรรทัดใดที่ Code ไม่ทำตามคำสั่งก็หมายความว่าบรรทัดนั้นก่อให้เกิดปัญหาครับ
เมื่อจะยกเลิกการหยุด Code ก็ให้คลิกซ้ำในตำแหน่งเดิมเพื่อให้สัญญลักษณ์สีเลือดหมูหายไปครับ
You do not have the required permissions to view the files attached to this post.
piman
Member
Posts: 62 Joined: Wed Jul 29, 2020 2:01 pm
Excel Ver: 2016
#16
Post
by piman » Tue Aug 18, 2020 9:57 am
ขอบคุณมากครับผม สามารถรันได้แล้วครับ
เบื้องต้นผมใส่ Unprotect ทุกจุดที่มี Error เลยครับ
zxczxcvzxcvb
Member
Posts: 3 Joined: Mon Aug 17, 2020 6:27 pm
Excel Ver: 2013
#17
Post
by zxczxcvzxcvb » Tue Aug 18, 2020 11:46 am
สอบถามข้อมูลเพิ่มเติมครับ
ถ้าสมมุติเรากำหนดให้ใส่ข้อมูลใน Textbox1 ได้สามตัวแล้ว
อยากให้เคอร์เซอร์เลื่อนไปอยู่ TextBox2 เอง
จะใช้ Code ไหนครับ