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
เลือกเป็นยอมรับของฉันหรือยอมรับของผู้อื่นแล้วแต่ว่าต้องการของใคร
หากต้องการยอมรับทั้งหมดค่อยเลือกยอมรับทั้งหมด (ไม่ว่าจะทั้งหมดของใคร)
ปกติการบันทึกแบบแชร์ไฟล์ ควรสั่งให้ 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
ใช้ Code
ActiveWorkbook.Save
ก่อนที่จะบันทึกรายการเพื่อทำการ Refresh หลังจากบันทึกรายการแล้วค่อย Save โดย Code นี้อีกรอบครับ
Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน
Posted: Wed Dec 18, 2013 10:33 pm
by bank9597
เพิ่งเจอปัญหานี้มาหมาดๆครับ
วิธีแก้ปัญหาของผมคือ ให้ไฟล์ที่รับข้อมูลปิด แล้วเวลาจะปัญทึกข้อมูลก็ให้เขียนโค๊ดสั่งเปิดไฟล์ขึ้นมาทำการบันทึก และก็เซฟปิดไป
ทำแบบนี้จะไม่มีปัญหาการเซฟทับกัน และยังทำให้ข้อมูล refresh อัตโนมัตเมื่อมีการเปิดปิดไฟล์
Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน
Posted: Thu Dec 19, 2013 4:45 pm
by suka
snasui wrote: ใช้ 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: เพิ่งเจอปัญหานี้มาหมาดๆครับ
วิธีแก้ปัญหาของผมคือ ให้ไฟล์ที่รับข้อมูลปิด แล้วเวลาจะปัญทึกข้อมูลก็ให้เขียนโค๊ดสั่งเปิดไฟล์ขึ้นมาทำการบันทึก และก็เซฟปิดไป
ทำแบบนี้จะไม่มีปัญหาการเซฟทับกัน และยังทำให้ข้อมูล refresh อัตโนมัตเมื่อมีการเปิดปิดไฟล์
ขอบคุณค่ะคุณ bank9597 ได้เป็นอีกหนึ่งทางเลือกค่ะ
Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน
Posted: Thu Dec 19, 2013 4:53 pm
by bank9597
ศึกษาตามลิงค์ด้านล่างได้ครับ ในคำตอบที่ 2 จะมีตัวอย่าง code ลองทดสอบดูครับ เผื่อเป็นทางเลือกครับ
http://stackoverflow.com/questions/1302 ... o-next-row
Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน
Posted: Thu Dec 19, 2013 5:29 pm
by snasui
ActiveWorkbook.Refresh
ไม่ต้องใช้ครับ
ลองทบทวนอีกครั้งอย่างละเอียดว่าผมเขียนไว้ว่าอย่างไร ให้ทำตามนั้นครับ
snasui wrote: ใช้ 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
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
ตัวอย่าง 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
ซึ่งจะเป็นไปตามที่ผมแจ้งไปคือ
- Save share workbook for refresh before record data
- Record data
- Save share workbook after record data
Re: เมื่อใช้ไฟล์แชร์ร่วมกันแล้ววางข้อมูลพร้อมกัน
Posted: Sat Dec 21, 2013 2:02 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("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
เมื่อต้องการใช้ไฟล์ร่วมกันและมีการบันทึกหลายคนพร้อม ๆ กันได้ เซลล์ 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: เมื่อต้องการใช้ไฟล์ร่วมกันและมีการบันทึกหลายคนพร้อม ๆ กันได้ เซลล์ 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
จาก
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
เมื่อเป็นเช่นนั้นให้ประกาศ 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