sakajohn wrote:...ถ้าเราเกิดเปิด book 1 แล้วคีย์ข้อมูลอยู่ พอดีมีคนมาคีย์ข้อมูลที่ book 2 มันจะสั่งปิด book 1 โดยไม่มีการบันทึกค่าที่กำลังคีย์ที่ book 1 ครับ มันจะบันทึกค่าที่ Book 2 คีย์ลงไปเท่านั้น เป็นไปได้ไหมครับ ถ้าเปิดอยู่พร้อมกัน ก่อนจะปิด book 1 ให้ save ค่าที่ book1 ก่อน ตอนนี้ที่ book 1 ผมใส่ code ไว้ที่ This workbook
Code: Select all
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Saved = False
End Sub
มันก็ไม่บันทึกให้ครับ

เป็นไปไม่ได้ตั้งแต่มีคนมาเปิด Book2 ในเครื่องตัวเอง แล้วสั่งปิด Book1 โดยไปกระทบกับ Book1 ในเครื่องใด ๆ ที่มีการเปิดใช้อยู่แล้วให้ปิดไปด้วย เพราะจะปิดได้ก็แต่เพียง Book1 ในเครื่องตัวเองเท่านั้น
การเปิดไฟล์เดียวกันจากหลายเครื่องหากเป็นไฟล์ที่ไม่ได้ Shared มันจะฟ้องว่ามีคนเปิดอยู่แล้ว แต่หาก Shared จะเปิดและทำงานได้พร้อมกัน 255 คนครับ
sakajohn wrote:แก้ได้แล้วครับ
Code: Select all
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveWorkbook.Save
End Sub
คือที่ book 1 key ไป save ไป ถ้ามีคนมาคีย์ที่ book 2 แล้วปิด book 1 ค่าก็จะยังอยู่ แบบนี้มันจะมีปัญหาหรือเปล่าครับอาจารย์
ลักษณะแบบนี้ไม่ใช่วิธีการแก้ การทำเช่นนี้ไม่ได้ไม่ได้ช่วยให้ค่ายังคงอยู่ตามที่กล่าวมา หากเป็นไฟล์ที่ไม่ได้ Shared ข้อมูลใน Book1 จะเป็นของคนที่เปิดไฟล์และ Save คนล่าสุดและไม่สามารถตรวจสอบได้ว่าเป็นข้อมูลที่ใครเป็นคนคีย์
หลักการ Share ไฟล์ ไฟล์ที่เป็นข้อมูลไม่ควรมี Code เป็นไฟล์เพื่อการเก็บข้อมูลเท่านั้น และเปิด Shared เพื่อให้ไฟล์ที่มี Code สามารถเปิดไฟล์นี้ขึ้นมาทำงาน ทำเสร็จแล้วปิดไป
ไฟล์ที่ Shared จะสามารถทำงานพร้อมกันได้หลายคน การปิดและเปิดไฟล์ที่ Shared นี้จะเป็นอิสระจากกัน ไม่มีใครสามารถไปปิดไฟล์ที่เปิดพร้อมกันในเครื่องอื่นได้ ยกเว้นเดินไปปิดหรือแฮกเข้าไปปิด
จากสองไฟล์ที่แนบมาล่าสุด ไฟล์ใดเป็นไฟล์โปรแกรม ไฟล์ใดเป็นไฟล์ข้อมูล ได้ทำมาตามหลักการด้านบนแล้วหรือไม่ครับ