Page 2 of 5
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Fri Jul 26, 2013 9:37 pm
by snasui

ผมได้ปรับ Code มาเป็นตัวอย่างโดยปรับ Code ที่ไม่พบว่ามีการใช้งานเป็น Comment ลองดูตามด้านล่างครับ
Code: Select all
Sub BeenArL() ' ปุ่มบันทึกรับชำระ ชีท Formรับชำระ
Dim wbShare As Workbook
Dim formBook As Workbook
Dim rSource As Range
Dim rTarget As Range
Dim rs As Range
Dim rt As Range
Dim i As Double
Set formBook = ThisWorkbook
Set wbShare = Workbooks("ArBookShare.xlsx.xlsx")
With formBook.Sheets("Form")
Set rSource = .Range("B3:B50")
End With
With formBook.Sheets("Database")
Set rTarget = .Range("E2", .Range("E" & Rows.Count).End(xlUp))
End With
With formBook.Sheets("Form")
i = (.Range("L9") + .Range("M9") + .Range("M12"))
If i <> .Range("J12") Then
MsgBox "โปรดตรวจจำนวนเงินและบันทึกใหม่"
Exit Sub
End If
End With
Application.Calculation = xlCalculationManual
For Each rs In rSource
For Each rt In rTarget
If rt = rs Then rt.Offset(0, 25) = "Y"
Next rt
Next rs
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = False
' With Workbooks
Set rt = wbShare.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
' End With
' With formBook.Worksheets("TemBilling")
' Set rSource = .Range("A2:P2").Resize(.Range("Q1"))
' End With
formBook.Sheets("TemBilling").Range("A2:P2").Resize(.Range("q1")).Copy
wbShare.Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp) _
.Offset(1, 0).PasteSpecial xlPasteValues
' With Worksheets("TemBilling")
' Set rSource = .Range("P10:W10").Resize(.Range("Y9"))
' End With
formBook.Sheets("TemBilling").Range("P10:W14").Copy
formBook.Sheets("Report").Range("A" & Rows.Count).End(xlUp) _
.Offset(1, 0).PasteSpecial xlPasteValues
formBook.Sheets("Form").Range("G4:G8,H1,J2,I4:N8,I6").ClearContents
With formBook.Sheets("Form")
.Range("J10") = .Range("J10") + 1
End With
Application.ScreenUpdating = True
End Sub
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Sat Jul 27, 2013 9:44 am
by suka
อาจารย์คะ ได้ลองแล้ว Error ตามรูปนี้ค่ะ
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Sat Jul 27, 2013 9:49 am
by snasui

ลองปรับ Code บรรทัดนั้นเป็นตามด้านล่างครับ
Code: Select all
With formBook.Sheets("TemBilling")
.Range("a2:p2").Resize(.Range("q1")).Copy
End With
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Sat Jul 27, 2013 10:37 am
by suka

ได้ตรงตามต้องการแล้วค่ะอาจารย์ ขอบพระคุณมากๆค่ะ
ขอรบกวนถามค่ะ มีวิธีทดสอบ Code อย่างไรให้ทราบว่า Code นั้นไม่ทำงานค่ะ
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Sat Jul 27, 2013 10:42 am
by snasui

ผมอ่าน Code แล้วทราบด้วยประสบการณ์ว่า Code นั้น ๆ ใช้หรือไม่ได้ใช้ทำอะไร ปกติผู้เขียน Code จะต้องทราบได้ด้วยตัวเองว่า Code ที่เขียนไปนั้นต้องการจะทำอะไรครับ
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Sat Jul 27, 2013 11:11 am
by suka
ขอบคุณค่ะอาจารย์
ขอถามอีกข้อค่ะ การบันทึกข้อมูลข้ามไฟล์ด้วย VBA จำเป็นต้องเปิดไฟล์ปลายทางที่จะบันทึกข้อมูลทุกครั้งใช่ไหมคะ
มีวิธีการใดทำให้เมื่อเปิดไฟล์ต้นทางแล้วให้อีกไฟล์ๆปลายทางเปิดมาด้วยเพื่อรับข้อมูลได้คะ
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Sat Jul 27, 2013 11:19 am
by snasui
suka wrote:ขอถามอีกข้อค่ะ การบันทึกข้อมูลข้ามไฟล์ด้วย VBA จำเป็นต้องเปิดไฟล์ปลายทางที่จะบันทึกข้อมูลทุกครั้งใช่ไหมคะ
ไม่จำเป็นครับ แต่การทำงานกับไฟล์ที่ปิดอยู่นั้นไม่ง่ายนัก สำหรับผู้ที่ไม่ได้เชี่ยวชาญการใช้ VBA ให้เลือกเปิดไฟล์ขึ้นมาแทน
การที่จะให้เปิดไฟล์มาแล้วให้เปิดไฟล์อื่น ๆ ด้วย เราสามารถ Save เป็น
Workspace หรือเขียน VBA ให้เปิดไฟล์ที่ต้องการได้เช่นกัน ลองบันทึก Macro การเปิดไฟล์นั้นแล้วนำ Code มาปรับใช้ครับ
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Sat Jul 27, 2013 11:43 am
by suka
snasui wrote:การที่จะให้เปิดไฟล์มาแล้วให้เปิดไฟล์อื่น ๆ ด้วย เราสามารถ Save เป็น Workspace หรือเขียน VBA ให้เปิดไฟล์ที่ต้องการได้เช่นกัน ลองบันทึก Macro การเปิดไฟล์นั้นแล้วนำ Code มาปรับใช้ครับ
ทั้งสองวิธีนี้ได้ผลเหมือนกันหรือมีข้อจำกัดต่างกันไหมคะ ขอศึกษาทดลองหากติดปัญหาใด ค่อยมารบกวนถามใหม่ค่ะ
ขอบคุณมากค่ะอาจารย์
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Sat Jul 27, 2013 11:56 am
by snasui

ปกติการ Save เป็น Workspace จะเป็นการจดจำว่าเราทำงานพร้อมกันกี่ไฟล์ เมื่อเปิดไฟล์นามสกุล .xlw ก็จะเปิดไฟล์ที่ทำงานพร้อมกันขึ้นมาให้ โดยทางเทคนิคแล้วไฟล์ที่ Share ไว้สามารถอยู่ต่างเครื่องกันได้เพราะเป็นการจดจำ Path ของไฟล์ว่าอยู่ที่ไหนแล้วไปเปิดไฟล์นั้นมาให้
ส่วนการเปิดด้วย Code VBA ข้อจำกัดอยู่ที่ความสามารถของผู้เขียน Code ครับ
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Sat Jul 27, 2013 3:55 pm
by suka
อาจารย์คะ ลองบันทึก Macro เพื่อเปิดไฟล์แล้วได้ Code มาตามนี้ค่ะ
Code: Select all
Sub Macro2()
'
' Macro5 Macro
'
Workbooks.Open Filename:="\\Cctv\data (D)\AR\ArBookShare.xlsx.xlsx"
End Sub
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Sat Jul 27, 2013 3:59 pm
by snasui

นำ Code นั้นไปใช้ใน ThisWorkbook ภายใต้ Event ที่ชื่อ Workbook_Open() ครับ
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Mon Jul 29, 2013 12:23 pm
by suka

ขอบคุณค่ะอาจารย์ Code ที่ให้เปิดไฟล์มาแล้วให้เปิดไฟล์อื่นด้วยนั้นใช้ได้แล้วค่ะ
ขอเรียนถามเพิ่มและขอช่วยเรืองปรับสูตรดึงข้อมูลค่ะ
จากไฟล์แนบชีท AR เดิมได้ดึงข้อมูลจากชีท Database ไฟล์ AR.Form มาแสดง แต่ข้อมูลจากชีท Database นี้ได้ปรับย้ายไปวางไว้ที่ชีท Sheet1 ไฟล์ BookShare.xlsx แล้วค่ะ
การดึงข้อมูลมาใช้ควรดึงมาอย่างไรคะ
1.ดึงข้อมูลจากชีท Sheet1 ไฟล์ BookShare.xlsx มาที่ชีท Database ไฟล์ AR.Form แล้วใช้สูตรเดิม หรือ
2.ควรปรับสูตรดึงข้อมูลจากชีท Sheet1 ไฟล์ BookShare.xlsx มาแสดงที่ชีท AR ค่ะ
ขอบคุณค่ะ
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Mon Jul 29, 2013 1:06 pm
by snasui

ควรใช้ตามข้อ 2 ครับ การทำตามข้อ 1 เกิดการดึงข้อมูลซ้ำซ้อนครับ
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Mon Jul 29, 2013 3:24 pm
by suka

ขอบคุณค่ะอาจารย์ ได้ปรับสูตรตามข้อ 2 เรียบร้อยใช้ได้แล้วค่ะ
ขอเรียนถามเพิ่มค่ะ หากต้องการให้นำข้อมูลจากชีท Sheet1 ไฟล์ BookShare.xlsx มาแสดงที่ชีท Database ไฟล์ AR.Form โดยข้อมูลสามารถเคลื่อนไหวตามชีท Sheet1 ไฟล์ BookShare.xlsx ทุกอย่าง เผื่อให้ผู้กรอกข้อมูลสามารถติดตามความเคลื่อนไหวได้โดยไม่ต้องไปยุ่งกับต้นฉบับค่ะ
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Mon Jul 29, 2013 7:34 pm
by snasui

ใช้ Code Copy มาวางครับ
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Mon Jul 29, 2013 8:31 pm
by suka
ค่ะอาจารย์ ขอศึกษาก่อนติดตรงไหนค่อยมาถามใหม่ค่ะ
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Fri Aug 02, 2013 9:17 pm
by suka
เรียนอาจารย์และท่านผู้รู้ค่ะ ขอรบกวนช่วยเรื่องปรับ Code จากการบันทึกแมโครตามนี้ค่ะ
Code นี้ได้จากการบันทึกแมโครทำ Validation กลุ่มเอกสารค่ะ ข้อมูลเอกสารวางอยู่ไฟล์ PO ค่ะ Validation นี้อยู่ไฟล์ AR
Code: Select all
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=กลุ่มเอกสาร"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
ที่อยู่ไฟล์ PO ตามนี้ค่ะ ขอบคุณค่ะ
Code: Select all
ChDir "\\Cctv\data (D)\PS.BookShare\PO"
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Mon Aug 05, 2013 12:09 pm
by snasui

Validation ทำข้ามไฟล์ไม่ได้ครับ
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Mon Aug 05, 2013 6:11 pm
by suka
ขอบคุณค่ะอาจารย์
ได้บันทึกแมโครดึงข้อมูลจากไฟล์ PO.Form มาไว้ที่ไฟล์ AR.Form ได้ Code ตามด้านล่างค่ะ ปรับอย่างไรให้ดึงมาได้ตามเซลล์และคอลัมน์ที่ขยายค่ะ
Code: Select all
Sub Macro8()
'
' Macro8 แมโคร
'
'
ActiveCell.FormulaR1C1 = "=[PO.Form.xlsm]Document!RC"
Range("A1").Select
Selection.AutoFill Destination:=Range("A1:E1"), Type:=xlFillDefault
Range("A1:E1").Select
Selection.AutoFill Destination:=Range("A1:E8"), Type:=xlFillDefault
Range("A1:E8").Select
End Sub
ไฟล์ PO.Form เก็บที่นี่ค่ะ
Code: Select all
Sub Macro9()
'
' Macro9 แมโคร
'
'
ChDir "\\Cctv\data (D)\PS.BookShare\PO"
Workbooks.Open Filename:= _
"\\Cctv\data (D)\PS.BookShare\PO\PO.Form.xlsm"
End Sub
Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ
Posted: Mon Aug 05, 2013 7:04 pm
by snasui

ที่เขียนมานั้นไม่ใช่การ Copy ครับ เป็นการเขียนสูตรให้ดึงข้อมูลมา การทำเช่นนี้หากข้อมูลมีปริมาณมากจะทำให้ไฟล์ใหญ่กว่าการนำค่ามาวางแบบ Value
วิธีการเลือกข้อมูลต้นแหล่งทั้งหมดให้กดแป้น Ctrl+A แล้วค่อย Copy ลองบันทึก Macro แล้วปรับใช้ดู ติดตรงไหนสามารถถามมาได้เรื่อย ๆ ครับ