รบกวนผู้รู้ด้าน Excel หน่อยคร้าบบบบบ
ขอเกริ่นรายงานที่ผมทำก่อนนะครับ
ผมเขียนสูตรในการกรอกสินต้าจากการผลิตอะครับ ใน Excel 1 file จะมีทั้งหมด 32 sheet เนื่องจากผมทำรายงานการผลิตทั้งเดือน (31 sheet) + สรุปประจำเดือน (1 sheet) อะครับ ซึ่ง sheet ประจำวัน 31 sheet จะต้องมาลิงค์กับ sheet ประจำเดือนอะครับ เลยต้องทำให้อยู่ใน file เดียวกัน
และผู้ที่กรอกข้อมูลจะกรอกรายการสินค้าที่ผลิตได้ ซึ่งจะได้ข้อมูลดิบ เพื่อไปทำตาราง pivot table เพื่อหารายการที่ซ้ำและรวมผลจำนวนออกมาเลยอะครับ แต่ทุกๆครั้งของการ refresh ข้อมูล จะต้อง unprotect sheet ก่อน แล้วถึงจะ refresh ข้อมูลได้ โดยผู้กรอกข้อมูลอะครับเป็นผู้ใช้รายงานนั้น แต่ด้วยที่ว่าผู้ใช้ไม่รู้เรื่อง Excel เลย ผมเป็นคนเขียนสูตรให้ทั้งหมด ผมเลยไม่อยากให้ใครรู้รหัสอะครับ
เลยต้องหาวิธีแก้ไข โดยการเขียน Code VBA ให้กดปุ่มที่ผมสร้างขึ้นมาแล้วทำการ Refresh ตาราง Pivot table โดยผมใช้ Code ตามนี้ครับ
Private Sub CommandButton1_Click()
ActiveSheet.Unprotect "5555"
ActiveSheet.PivotTables("Pivot table01").PivotCache.Refresh
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="5555"
End Sub
ผมสามารถทำได้ครับ แต่ปัญหาที่ตามมา คือ ตอนที่ผม Protect sheet นั้น ผมได้เลือกให้สามารถ Edit Objects (แก้ไขวัตถุ) ได้ แต่พอผมคลิกที่ปุ่มให้ Refresh มันก็ Protect sheet ให้เหมือนเดิมนะครับ แต่ไม่มี Edit Objects (แก้ไขวัตถุ) ทำให้ Code VBA อันอื่นๆที่ผมเขียนไปเกิดผลกระทบตาม ไม่สามารถ Edit Objects (แก้ไขวัตถุ) ได้อะครับ ผมจึงต้องไป unprotect แล้วก็ protect อีกรอบ แบบเลือก Edit Objects (แก้ไขวัตถุ) ซึ่งถ้าให้ผู้ใช้ข้อมูลที่เค้าไม่มีความรู้เรื่อง Excel เลย เค้าก็สามารถรู้รหัสหรือไปแก้ไข cell ต่างๆ ทำให้สูตรเปลี่ยนอะไรประมาณนี้อะครับ
ดังนั้น ปัญหาตรงนี้ต้องแก้ยังไงอะครับ หรือ ผมต้องเพิ่ม Code ของ Pivot table ที่ให้มัน Unprotect และกลับไป protect อีกรอบ โดยต้องใส่อะไรที่ทำให้มันกลับไป เลือก Edit Objects (แก้ไขวัตถุ) เหมือนเดิม รึเปล่า
หรือมี Code ไหนที่ Unprotect แล้วกลับไป Protect ค่าเดิมที่เราเลือกให้แก้ไข้ได้ ในส่วนที่เราต้องการ อย่างตัว Edit Objects (แก้ไขวัตถุ) ที่ผมเลือกอะครับ
รบกวรผู้รู้ช่วยหน่อยนะครับ T T / ขอบคุณมากๆนะครับ
ขอสอบถามผู้รู้ Excel หน่อยครับ การ Protect Cell & Code VBA
ขอเกริ่นรายงานที่ผมทำก่อนนะครับ
ผมเขียนสูตรในการกรอกสินต้าจากการผลิตอะครับ ใน Excel 1 file จะมีทั้งหมด 32 sheet เนื่องจากผมทำรายงานการผลิตทั้งเดือน (31 sheet) + สรุปประจำเดือน (1 sheet) อะครับ ซึ่ง sheet ประจำวัน 31 sheet จะต้องมาลิงค์กับ sheet ประจำเดือนอะครับ เลยต้องทำให้อยู่ใน file เดียวกัน
และผู้ที่กรอกข้อมูลจะกรอกรายการสินค้าที่ผลิตได้ ซึ่งจะได้ข้อมูลดิบ เพื่อไปทำตาราง pivot table เพื่อหารายการที่ซ้ำและรวมผลจำนวนออกมาเลยอะครับ แต่ทุกๆครั้งของการ refresh ข้อมูล จะต้อง unprotect sheet ก่อน แล้วถึงจะ refresh ข้อมูลได้ โดยผู้กรอกข้อมูลอะครับเป็นผู้ใช้รายงานนั้น แต่ด้วยที่ว่าผู้ใช้ไม่รู้เรื่อง Excel เลย ผมเป็นคนเขียนสูตรให้ทั้งหมด ผมเลยไม่อยากให้ใครรู้รหัสอะครับ
เลยต้องหาวิธีแก้ไข โดยการเขียน Code VBA ให้กดปุ่มที่ผมสร้างขึ้นมาแล้วทำการ Refresh ตาราง Pivot table โดยผมใช้ Code ตามนี้ครับ
Private Sub CommandButton1_Click()
ActiveSheet.Unprotect "5555"
ActiveSheet.PivotTables("Pivot table01").PivotCache.Refresh
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="5555"
End Sub
ผมสามารถทำได้ครับ แต่ปัญหาที่ตามมา คือ ตอนที่ผม Protect sheet นั้น ผมได้เลือกให้สามารถ Edit Objects (แก้ไขวัตถุ) ได้ แต่พอผมคลิกที่ปุ่มให้ Refresh มันก็ Protect sheet ให้เหมือนเดิมนะครับ แต่ไม่มี Edit Objects (แก้ไขวัตถุ) ทำให้ Code VBA อันอื่นๆที่ผมเขียนไปเกิดผลกระทบตาม ไม่สามารถ Edit Objects (แก้ไขวัตถุ) ได้อะครับ ผมจึงต้องไป unprotect แล้วก็ protect อีกรอบ แบบเลือก Edit Objects (แก้ไขวัตถุ) ซึ่งถ้าให้ผู้ใช้ข้อมูลที่เค้าไม่มีความรู้เรื่อง Excel เลย เค้าก็สามารถรู้รหัสหรือไปแก้ไข cell ต่างๆ ทำให้สูตรเปลี่ยนอะไรประมาณนี้อะครับ
ดังนั้น ปัญหาตรงนี้ต้องแก้ยังไงอะครับ หรือ ผมต้องเพิ่ม Code ของ Pivot table ที่ให้มัน Unprotect และกลับไป protect อีกรอบ โดยต้องใส่อะไรที่ทำให้มันกลับไป เลือก Edit Objects (แก้ไขวัตถุ) เหมือนเดิม รึเปล่า
หรือมี Code ไหนที่ Unprotect แล้วกลับไป Protect ค่าเดิมที่เราเลือกให้แก้ไข้ได้ ในส่วนที่เราต้องการ อย่างตัว Edit Objects (แก้ไขวัตถุ) ที่ผมเลือกอะครับ
รบกวรผู้รู้ช่วยหน่อยนะครับ T T / ขอบคุณมากๆนะครับ