Page 2 of 5

Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ

Posted: Fri Jul 26, 2013 9:37 pm
by snasui
:D ผมได้ปรับ 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
:D ลองปรับ 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
:thup: ได้ตรงตามต้องการแล้วค่ะอาจารย์ ขอบพระคุณมากๆค่ะ

ขอรบกวนถามค่ะ มีวิธีทดสอบ Code อย่างไรให้ทราบว่า Code นั้นไม่ทำงานค่ะ

Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ

Posted: Sat Jul 27, 2013 10:42 am
by snasui
:D ผมอ่าน 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
:D ปกติการ 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
:D นำ Code นั้นไปใช้ใน ThisWorkbook ภายใต้ Event ที่ชื่อ Workbook_Open() ครับ

Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ

Posted: Mon Jul 29, 2013 12:23 pm
by suka
:thup: ขอบคุณค่ะอาจารย์ 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
:D ควรใช้ตามข้อ 2 ครับ การทำตามข้อ 1 เกิดการดึงข้อมูลซ้ำซ้อนครับ

Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ

Posted: Mon Jul 29, 2013 3:24 pm
by suka
:thup: ขอบคุณค่ะอาจารย์ ได้ปรับสูตรตามข้อ 2 เรียบร้อยใช้ได้แล้วค่ะ

ขอเรียนถามเพิ่มค่ะ หากต้องการให้นำข้อมูลจากชีท Sheet1 ไฟล์ BookShare.xlsx มาแสดงที่ชีท Database ไฟล์ AR.Form โดยข้อมูลสามารถเคลื่อนไหวตามชีท Sheet1 ไฟล์ BookShare.xlsx ทุกอย่าง เผื่อให้ผู้กรอกข้อมูลสามารถติดตามความเคลื่อนไหวได้โดยไม่ต้องไปยุ่งกับต้นฉบับค่ะ

Re: ขอช่วยเรื่องการจัดระบบฐานข้อมูลที่ถูกต้องค่ะ

Posted: Mon Jul 29, 2013 7:34 pm
by snasui
:D ใช้ 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
:D 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
:D ที่เขียนมานั้นไม่ใช่การ Copy ครับ เป็นการเขียนสูตรให้ดึงข้อมูลมา การทำเช่นนี้หากข้อมูลมีปริมาณมากจะทำให้ไฟล์ใหญ่กว่าการนำค่ามาวางแบบ Value

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