Page 1 of 1

สอบถามการบันทึกอัตโนมัติ

Posted: Wed Oct 09, 2019 7:07 pm
by sakajohn
ผมต้องการให้ ิ book1 saveทุกๆ 10 วินาที
ที่ workbook

Code: Select all

Private Sub Workbook_Open()
  alerttime = Now + TimeValue("00:00:10")
  Application.OnTime alerttime, "EventMacro"
End Sub
Module1

Code: Select all

Public Sub EvenMacro()

ActiveWorkbook.Save

alerttime = Now + TimeValue("00:00:10")
Application.OnTime alerttime, "EventMacro"

End Sub
พอเปิดโปรแกรมฟ้อง error
can not run the macro ....... รบกวนผู้รู้ช่วยแนะนำด้วยครับ
และขอถามเพิ่มด้วยว่า code นี้ถ้าเราแชร์ไฟล์ code จะยังรันได้มั้ยครับ

Re: สอบถามการบันทึกอัตโนมัติ

Posted: Wed Oct 09, 2019 8:34 pm
by snasui
:D เปลี่ยนชื่อ Public Sub EvenMacro() เป็น Public Sub EventMacro() ครับ

Re: สอบถามการบันทึกอัตโนมัติ

Posted: Fri Oct 11, 2019 4:13 pm
by sakajohn
ขอสอบถามเพิ่มเติมครับ จากคำสั่งข้างต้น พอปิดไฟล์งาน สักพักมันก็จะเปิดขึ้นมาเอง ไม่สามารถสั่งปิดได้เพราะอะไรครับ และจะต้องแก้ไขยังไงครับ

Re: สอบถามการบันทึกอัตโนมัติ

Posted: Fri Oct 11, 2019 8:12 pm
by snasui
:D เพิ่ม Code สำหรับ Stop Timer ด้วย ไม่เช่นนั้น Code มันจะ Run อยู่ ปิดไปแล้วมันก็เลยเปิดขึ้นมาใหม่ได้

การ Stop สามารถเรียกใช้โดย Event Workbook_BeforeClose สำหรับ Code สำหรับการ Stop Timer ดูได้ที่นี่ครับ https://snasui.com/viewtopic.php?t=9147#p57194

Re: สอบถามการบันทึกอัตโนมัติ

Posted: Mon Oct 14, 2019 10:35 am
by sakajohn
เรียนอาจารย์ครับ ผมลองเขียน Code แล้วแต่ยังเปิดเองอยู่เหมือนเดิมครับ ขอคำแนะนำด้วยครับ

Code: Select all

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
    Application.OnTime Now + TimeValue("00:00:10"), "EventMacro", , False

    'ThisWorkbook.Close
End Sub

Re: สอบถามการบันทึกอัตโนมัติ

Posted: Mon Oct 14, 2019 12:17 pm
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

'Code in Thisworkbook
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.Save
    Call StopTimer
End Sub

Private Sub Workbook_Open()
    Call EventMacro
End Sub

'Code in Module1
Dim t As Date
Public Sub EventMacro()
    On Error Resume Next
    t = Now + TimeValue("0:00:10")
    Application.OnTime t, "NextSave"
End Sub

Public Sub NextSave()
    On Error Resume Next
    ThisWorkbook.Save
    Call EventMacro
End Sub

Public Sub StopTimer()
    On Error Resume Next
    Application.OnTime t, "NextSave", , False
End Sub

Re: สอบถามการบันทึกอัตโนมัติ

Posted: Tue Oct 15, 2019 9:59 am
by sakajohn
ผมขอสอบถามเพิ่มเติมครับ ไฟล์ book1 ผมทำการแชร์ไฟล์ ทั้งหมด 4 เครื่อง มี 2 เครื่องที่เปิดโปรแกรมค้างไว้ตลอด อีก 2 เครื่องให้เปิดโปรแกรมเวลาบันทึกข้อมูลจากนั้นให้ทำการปิด โดยทำการเขียน code vba

Code: Select all

Workbooks.Open Filename:="\\Account\Data (D)\Book1.xlsm"
         ThisWorkbook.Activate
         Application.Goto Reference:="OFFSET(R10C30,0,2,1,4)"
         Selection.Copy
         Workbooks("Book1.xlsm").Activate
         Sheets("Sheet1").Select
         Application.Goto Reference:="OFFSET(R3C1,0,1,1,1)"
         Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
         Application.CutCopyMode = False
      
        ThisWorkbook.Activate
        Application.Goto Reference:="OFFSET(R10C30,0,10,1,1)"
        Selection.Copy
        Workbooks("Book1.xlsm").Activate
        Sheets("Sheet1").Select
        Application.Goto Reference:="OFFSET(R3C1,0,5,1,1)"
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        Application.CutCopyMode = False
        Range("H3").Select
        Selection.ClearContents
        Workbooks("Book1.xlsm").Save
        Workbooks("Book1.xlsm").Close
บางเครื่องเวลาสั่ง run โปรแกรม จะฟ้อง Error run-time 1004 This file is locked.Try the command again later. ที่Code จะ error
Workbooks("Book1.xlsm").Save พอจะปิดก็จะขึ้น error เหมือนเดิมครับ ต้องใช้วิธี close window ปิดทั้งหมดครับ จะแก้ไขยังไงได้บ้างครับ

Re: สอบถามการบันทึกอัตโนมัติ

Posted: Tue Oct 15, 2019 4:36 pm
by sakajohn
อาจารย์ครับ พอปิดแล้วมันก็ยังเปิดขึ้นเองอยู่นะครับ

Re: สอบถามการบันทึกอัตโนมัติ

Posted: Tue Oct 15, 2019 7:43 pm
by snasui
:D ไฟล์ที่แชร์กันนั้นจะต้องไม่ใช่ไฟล์ที่มี Code นามสกุลควรเป็น .xlsx แม้มี Code ก็จะไม่ทำงาน เป็นข้อกำหนดของการ Share File ครับ

ผมลองทดสอบไม่พบว่าไฟล์เกิดขึ้นมาใหม่ครับ

กรณีต้องการทดสอบเอง ให้สร้างปุ่มขึ้นมา 1 ปุ่มแล้ว Assign Procedure ที่ชื่อว่า StopTime ให้กับปุ่ม หากต้องการจะหยุดการจับเวลาให้คลิกปุ่มนี้ จากนั้นสังเกตว่า Code การจับเวลายังรันต่อเนื่องอยู่อีกหรือไม่ ถ้าไม่รันอีก แสดงว่า StopTimer ทำงานได้ผล หากปิดไฟล์ไปแล้วย่อมจะต้องไม่เปิดไฟล์ขึ้นมาใหม่ครับ และเมื่อคลิกด้วยมือแล้วทำงานได้ การเรียกใช้ด้วย Event Before Close ก็ควรจะทำงานได้เช่นกันครับ

Re: สอบถามการบันทึกอัตโนมัติ

Posted: Fri Oct 18, 2019 9:54 am
by sakajohn
สิ่งที่ผมต้องการคือ ที่เครื่อง A Book1จะทำหน้าที่เหมือนรายงานแสดงผลว่า เครื่องจักรแต่ละตัวกำลังผลิตงานอะไรอยู่และเสร็จเมื่อไหร โดยBook1 จะทำการแชร์ไฟล์และให้ เครื่อง B C D ทำการบันทึกข้อมูล ผมต้องการให้เมื่อเครื่อง B C D บันทึกข้อมูลแล้วหน้าจอเครื่อง A แสดงข้อมูลแบบ Real-Time ครับ ผมเลยกำหนดให้ Book1 ทำการ save ตัวเองทุกๆ 10 วินาที เพื่อให้ข้อมูล update ตลอดครับ แต่อาจารย์บอกว่า ไม่สามารถเขียนcodeบนไฟล์ที่แชร์ข้อมูลได้ ผมข้อคำแนะนำในการที่จะให้ได้ผลตามที่ต้องการด้วยครับ

Re: สอบถามการบันทึกอัตโนมัติ

Posted: Fri Oct 18, 2019 9:45 pm
by snasui
:D การแชร์ไฟล์ลักษณะการทำงานจะเป็นเช่นนี้ครับ
  1. ไฟล์ที่แชร์จะเป็นฐานข้อมูลหรือไฟล์ที่ใช้ทำงานร่ามกัน ไม่มี Code ใด ๆ ในไฟล์นี้
  2. ผู้ใช้งานแต่ละคนเปิดไฟล์ที่แชร์ เมื่อจะทำงาน ไม่ว่าจะเปิดขึ้นมาด้วยมือหรือมีไฟล์โปรแกรมเปิดขึ้นมาก็ตามให้ Save ก่อน 1 ครั้ง การ Save นี้สำคัญ ทำเพื่อให้ไฟล์ที่เปิดขึ้นมานั้นมีการ Update ล่าสุดเป็นปัจจุบันหากมีการทำงานพร้อมกันหลายคน
  3. ทำงานเสร็จแล้ว Save อีกรอบ (ลักษณะจะเป็น Save > บันทึก > Save)

Re: สอบถามการบันทึกอัตโนมัติ

Posted: Sat Oct 19, 2019 9:19 am
by sakajohn
ขอบคุณครับ