Page 1 of 3

เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Wed Dec 18, 2013 6:32 pm
by suka
เรียนอาจารย์และท่านผู้รู้ค่ะ

เมื่อใช้ไฟล์แชร์ร่วมกัน และมีการบันทึกข้อมูลไปวางที่ไฟล์แชร์พร้อมกัน
เกิดปัญหาตามภาพรูปแนบค่ะ

พอกดยอมรับของฉันทั้งหมด ข้อมูลก็ไปทับข้อมูลใหม่ของผู้อื่น
พอกดยอมรับของผู้อื่นทั้งหมด ข้อมูลใหม่ของเราก็โดนทับหายค่ะ

ขอรบกวนแนะนำทางแก้น่ะค่ะ ขอบคุณค่ะ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Wed Dec 18, 2013 6:40 pm
by snasui
:D เลือกเป็นยอมรับของฉันหรือยอมรับของผู้อื่นแล้วแต่ว่าต้องการของใคร หากต้องการยอมรับทั้งหมดค่อยเลือกยอมรับทั้งหมด (ไม่ว่าจะทั้งหมดของใคร)
ปกติการบันทึกแบบแชร์ไฟล์ ควรสั่งให้ Refresh และเมื่อบันทึกแล้ว Save ทันทีครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Wed Dec 18, 2013 7:27 pm
by suka
Code ทั้งชุดในไฟล์ที่ใช้บันทึกข้อมูลเพื่อวางไปยังไฟล์ที่ใชแชร์ค่ะ

Code: Select all

Sub PasteData()
Dim wbShare As Workbook
Dim formBook As Workbook
Dim i As Integer
Dim rs As Range
Dim rt As Range
Set formBook = ThisWorkbook
Set wbShare = Workbooks("Ph_BookShare.xlsx")
    Application.ScreenUpdating = False
    With formBook
    i = Worksheets("Enterthedata").Range("C224")
    End With
    With Worksheets("Template")
        Set rs = .Range(.Range("A2"), .Range("AF" & i + 1))
    End With

    Set rt = wbShare.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
    If Worksheets("Enterthedata").Range("C224") = True Then
        MsgBox "Please check your data. This transaction already recorded."
        Exit Sub
    End If
  
    If Worksheets("Enterthedata").Range("B204") = "" Then
        MsgBox "Your data is empty. Fill your data and click record button again."
        Exit Sub
    End If
    rs.Copy: rt.PasteSpecial xlPasteValues
   
    Application.CutCopyMode = False
    Sheets("Enterthedata").Range("D2,K2,B204:B219,D204:D219,L204:L219,D221,E221,E204:F219,L204:M219,O204:O219").ClearContents
    With Worksheets("Enterthedata")
        .Range("N1") = .Range("N1") + 1
    End With
       Application.ScreenUpdating = True
        Windows("Ph_BookShare.xlsx").Activate
        ActiveWorkbook.Save
       Windows("Purchases.xlsm").Activate
      ActiveWorkbook.Save
End Sub
Code ก่อน End Sub จากเดิม

Code: Select all

Application.ScreenUpdating = True
        Windows("Ph_BookShare.xlsx").Activate
        ActiveWorkbook.Save
ปรับเป็นตามนี้ได้ไหมคะ

Code: Select all

Application.ScreenUpdating = True
        Windows("Ph_BookShare.xlsx").Activate
        ActiveWorkbook.RefreshAll
        ActiveWorkbook.Save

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Wed Dec 18, 2013 8:05 pm
by suka
จะใช้ Code อย่างไรเพื่อสั่งให้ Refresh ไฟล์คะ Code ด้านบนไม่ Refresh ตามรูปแนบค่ะ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Wed Dec 18, 2013 9:18 pm
by snasui
:D ใช้ Code ActiveWorkbook.Save ก่อนที่จะบันทึกรายการเพื่อทำการ Refresh หลังจากบันทึกรายการแล้วค่อย Save โดย Code นี้อีกรอบครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Wed Dec 18, 2013 10:33 pm
by bank9597
:D เพิ่งเจอปัญหานี้มาหมาดๆครับ

วิธีแก้ปัญหาของผมคือ ให้ไฟล์ที่รับข้อมูลปิด แล้วเวลาจะปัญทึกข้อมูลก็ให้เขียนโค๊ดสั่งเปิดไฟล์ขึ้นมาทำการบันทึก และก็เซฟปิดไป

ทำแบบนี้จะไม่มีปัญหาการเซฟทับกัน และยังทำให้ข้อมูล refresh อัตโนมัตเมื่อมีการเปิดปิดไฟล์ :D

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Thu Dec 19, 2013 4:45 pm
by suka
snasui wrote::D ใช้ Code ActiveWorkbook.Save ก่อนที่จะบันทึกรายการเพื่อทำการ Refresh หลังจากบันทึกรายการแล้วค่อย Save โดย Code นี้อีกรอบครับ
ใช่วาง Code แบบนี้ไหมคะอาจารย์ error ตามรูปแนบค่ะ

Code: Select all

Application.ScreenUpdating = True
        Windows("Ph_BookShare.xlsx").Activate
        ActiveWorkbook.Save
        ActiveWorkbook.Refresh
        ActiveWorkbook.Save

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Thu Dec 19, 2013 4:48 pm
by suka
bank9597 wrote::D เพิ่งเจอปัญหานี้มาหมาดๆครับ

วิธีแก้ปัญหาของผมคือ ให้ไฟล์ที่รับข้อมูลปิด แล้วเวลาจะปัญทึกข้อมูลก็ให้เขียนโค๊ดสั่งเปิดไฟล์ขึ้นมาทำการบันทึก และก็เซฟปิดไป

ทำแบบนี้จะไม่มีปัญหาการเซฟทับกัน และยังทำให้ข้อมูล refresh อัตโนมัตเมื่อมีการเปิดปิดไฟล์ :D
ขอบคุณค่ะคุณ bank9597 ได้เป็นอีกหนึ่งทางเลือกค่ะ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Thu Dec 19, 2013 4:53 pm
by bank9597
:D ศึกษาตามลิงค์ด้านล่างได้ครับ ในคำตอบที่ 2 จะมีตัวอย่าง code ลองทดสอบดูครับ เผื่อเป็นทางเลือกครับ

http://stackoverflow.com/questions/1302 ... o-next-row

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Thu Dec 19, 2013 5:29 pm
by snasui
:D ActiveWorkbook.Refresh ไม่ต้องใช้ครับ

ลองทบทวนอีกครั้งอย่างละเอียดว่าผมเขียนไว้ว่าอย่างไร ให้ทำตามนั้นครับ :ard:
snasui wrote: :D ใช้ Code ActiveWorkbook.Save ก่อนที่จะบันทึกรายการเพื่อทำการ Refresh หลังจากบันทึกรายการแล้วค่อย Save โดย Code นี้อีกรอบครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Thu Dec 19, 2013 6:04 pm
by suka
วางแบบนี้ใช่ไหมคะอาจารย์ Code ไม่ฟ้องอะไรแล้วค่ะ

Code: Select all

Application.ScreenUpdating = True
       ActiveWorkbook.Save
        Windows("Ph_BookShare.xlsx").Activate
        ActiveWorkbook.Save
bank9597 wrote::D ศึกษาตามลิงค์ด้านล่างได้ครับ ในคำตอบที่ 2 จะมีตัวอย่าง code ลองทดสอบดูครับ เผื่อเป็นทางเลือกครับ


http://stackoverflow.com/questions/1302 ... o-next-row
:D ขอบคุณค่ะคุณ bank9597

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Fri Dec 20, 2013 6:59 am
by snasui
suka wrote:วางแบบนี้ใช่ไหมคะอาจารย์ Code ไม่ฟ้องอะไรแล้วค่ะ
โค้ด:
Application.ScreenUpdating = True
       ActiveWorkbook.Save
        Windows("Ph_BookShare.xlsx").Activate
        ActiveWorkbook.Save
:D ตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Sub PasteData()
    'Other code
    Set wbShare = Workbooks("Ph_BookShare.xlsx")
    wbShare.Save '<== Add this line for refresh shareworkbook
    Application.ScreenUpdating = False
    With formBook
        i = Worksheets("Enterthedata").Range("C224")
    End With
    With Worksheets("Template")
        Set rs = .Range(.Range("A2"), .Range("AF" & i + 1))
    End With
    
    Set rt = wbShare.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
    If Worksheets("Enterthedata").Range("C224") = True Then
        MsgBox "Please check your data. This transaction already recorded."
        Exit Sub
    End If
    
    If Worksheets("Enterthedata").Range("B204") = "" Then
        MsgBox "Your data is empty. Fill your data and click record button again."
        Exit Sub
    End If
    
    rs.Copy: rt.PasteSpecial xlPasteValues
    wbShare.Save '<==Save after record data
    'Other code
End Sub
ซึ่งจะเป็นไปตามที่ผมแจ้งไปคือ
  1. Save share workbook for refresh before record data
  2. Record data
  3. Save share workbook after record data

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Sat Dec 21, 2013 2:02 pm
by suka
:thup: ขอบพระคุณค่ะอาจารย์ ได้ตรงตามต้องการแล้วค่ะ

อาจารย์คะขอรบกวนช่วยเรื่องรันเลขที่เอกสารค่ะ Code ทั้งชุด

Code: Select all

Sub PasteData()
        Dim wbShare As Workbook
        Dim formBook As Workbook
        Dim i As Integer
        Dim rs As Range
        Dim rt As Range
        Set formBook = ThisWorkbook
        Set wbShare = Workbooks("AA_BookShare.xlsx")
        wbShare.Save '<== Add this line for refresh shareworkbook
            Application.ScreenUpdating = False
            With formBook
                     i = Worksheets("Enterthedata").Range("C224")
            End With
            With Worksheets("Template")
                    Set rs = .Range(.Range("A2"), .Range("AF" & i + 1))
            End With

        Set rt = wbShare.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
        If Worksheets("Enterthedata").Range("C224") = True Then
                MsgBox "Please check your data. This transaction already recorded."
            Exit Sub
        End If
  
        If Worksheets("Enterthedata").Range("B204") = "" Then
            MsgBox "Your data is empty. Fill your data and click record button again."
            Exit Sub
        End If
        rs.Copy: rt.PasteSpecial xlPasteValues
        wbShare.Save '<==Save after record data
       formBook.Save
            Application.CutCopyMode = False
            Sheets("Enterthedata").Range("D2,K2,B204:B219,D204:D219,L204:L219,D221,E221,E204:F219,L204:M219,O204:O219").ClearContents
        With Worksheets("Enterthedata")
                .Range("N1") = .Range("N1") + 1
        End With
End Sub
ขอรบกวนช่วยแก้เมื่อใช้ Form บันทึกข้อมูลไปที่แชร์ไฟล์พร้อมกันแล้วเลขที่เอกสารที่เซลล์ N1 ชีท Enterthedata ต้วอย่างไฟล์แนบไม่อัพเดทค่ะ

Code: Select all

With Worksheets("Enterthedata")
                .Range("N1") = .Range("N1") + 1
        End With

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Sat Dec 21, 2013 2:20 pm
by snasui
:D เมื่อต้องการใช้ไฟล์ร่วมกันและมีการบันทึกหลายคนพร้อม ๆ กันได้ เซลล์ N1 จะไม่สามารถกำหนดค่าไว้ลวงหน้าเหมือนลักษณะการจองตัวเลขไว้ได้ครับ วิธีการให้ลำดับที่จะต้องเปลี่ยนไปจากเดิมครับ นั่นคือก่อนที่จะบันทึกรายการให้ตรวจสอบว่าใน Share File มีตัวเลขล่าสุดเท่าใดก็ให้นำเลขนั้นมาใช้และบวกด้วย 1 เข้าไปก่อนแล้วค่อยบันทึกรายการและ Save ครับ ค่าในเซลล์ N1 จึงเป็นค่าที่เพิ่งบันทึกไปล่าสุด ไม่ใช่เลขที่ลำดับถัดไป

ลองเขียน Code มาตามที่ผมแนะนำด้านบนมาก่อน ติดตรงไหนแล้วค่อยดูกันต่อครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Sat Dec 21, 2013 2:25 pm
by suka
ชอบคุณค่ะอาจารย์

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Mon Dec 23, 2013 1:18 pm
by suka
snasui wrote::D เมื่อต้องการใช้ไฟล์ร่วมกันและมีการบันทึกหลายคนพร้อม ๆ กันได้ เซลล์ N1 จะไม่สามารถกำหนดค่าไว้ลวงหน้าเหมือนลักษณะการจองตัวเลขไว้ได้ครับ วิธีการให้ลำดับที่จะต้องเปลี่ยนไปจากเดิมครับ นั่นคือก่อนที่จะบันทึกรายการให้ตรวจสอบว่าใน Share File มีตัวเลขล่าสุดเท่าใดก็ให้นำเลขนั้นมาใช้และบวกด้วย 1 เข้าไปก่อนแล้วค่อยบันทึกรายการและ Save ครับ ค่าในเซลล์ N1 จึงเป็นค่าที่เพิ่งบันทึกไปล่าสุด ไม่ใช่เลขที่ลำดับถัดไป

ลองเขียน Code มาตามที่ผมแนะนำด้านบนมาก่อน ติดตรงไหนแล้วค่อยดูกันต่อครับ
เรียนอาจารย์ค่ะ ลองเขียน Code ตามที่อาจารย์แนะนำมาด้านบน ก่อนบันทึกให้ตรวจสอบกลุ่มเอกสารที่คอลัมน์ B และหาตัวเลขล่าสุดที่คอลัมน์ E ไฟล์ AA_BookShare Code เพิ่มเข้ามาเป็นตัวแดงตามรูปแนบค่ะ

Code: Select all

Sub PasteData()
        Dim wbShare As Workbook
        Dim formBook As Workbook
        Dim i As Integer
        Dim e As Integer 'เพื่อทดลองหาตัวเลขล่าสุด
        Dim rs As Range
        Dim rt As Range
        Set formBook = ThisWorkbook
        Set wbShare = Workbooks("AA_BookShare.xlsx")
        With wbShare
                 e = Workbooks.Function.CountA("sheet1").Range("B:B).Columns("E:E")))
         End With
        wbShare.Save '<== Add this line for refresh shareworkbook
Code ทั้งชุดตามนี้ค่ะ

Code: Select all

Sub PasteData()
        Dim wbShare As Workbook
        Dim formBook As Workbook
        Dim i As Integer
        Dim rs As Range
        Dim rt As Range
        Set formBook = ThisWorkbook
        Set wbShare = Workbooks("AA_BookShare.xlsx")
        wbShare.Save '<== Add this line for refresh shareworkbook
            Application.ScreenUpdating = False
            With formBook
                     i = Worksheets("Enterthedata").Range("C224")
            End With
            With Worksheets("Template")
                    Set rs = .Range(.Range("A2"), .Range("AF" & i + 1))
            End With

        Set rt = wbShare.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
        If Worksheets("Enterthedata").Range("C224") = True Then
                MsgBox "Please check your data. This transaction already recorded."
            Exit Sub
        End If
  
        If Worksheets("Enterthedata").Range("B204") = "" Then
            MsgBox "Your data is empty. Fill your data and click record button again."
            Exit Sub
        End If
        rs.Copy: rt.PasteSpecial xlPasteValues
        wbShare.Save '<==Save after record data
       formBook.Save
            Application.CutCopyMode = False
            Sheets("Enterthedata").Range("D2,K2,B204:B219,D204:D219,L204:L219,D221,E221,E204:F219,L204:M219,O204:O219").ClearContents
        With Worksheets("Enterthedata")
                .Range("N1") = .Range("N1") + 1
        End With
End Su

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Mon Dec 23, 2013 5:54 pm
by snasui
:D จาก dim e as integer หมายถึงกำหนดให้ตัวแปร e มีค่าได้ไม่เกิน 32767 ไม่ทราบว่าจริง ๆ แล้วตัวเลขเกินนี้หรือไม่ หากเกินจะประกาศเป็น Integer ไม่ได้ครับ

สำหรับค่าลำดับที่ที่จะนำมาใช้นั้นค่ามากสุดอยู่บรรทัดสุดท้ายหรือไม่ครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Mon Dec 23, 2013 6:30 pm
by suka
ค่ะอาจารย์ ค่าตัวเลขเกิน 32767 ค่ะ

ค่าลำดับที่จะนำมาใช้นั้นค่ามากสุดอยู่บรรทัดสุดท้ายค่ะอาจารย์

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Mon Dec 23, 2013 7:19 pm
by snasui
:D เมื่อเป็นเช่นนั้นให้ประกาศ e เป็น Long ครับ

ตัวอย่างสำหรับการนำค่าสุดท้ายในคอลัมน์ A ของไฟล์ wbShare มาใช้สามารถใช้ Code e = wbShare.range("a" & rows.count).end(xlup).value ลองปรับใช้กับข้อมูลจริงดูครับ

Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน

Posted: Mon Dec 23, 2013 8:30 pm
by suka
อาจารย์คะ Code ฟ้องตามรูปแนบนี้ค่ะ ลองเปลี่ยนเป็นหาค่าสุดท้ายในคอลัมน์ E ก็ฟ้องเหมือนกันค่ะ

Code: Select all

With wbShare
        e = wbShare.Range("e" & Rows.Count).End(xlUp).Value
End With