Page 1 of 2

สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 6:10 pm
by bank9597
อาจารย์ครับ ผมได้สร้างฟอร์มเพื่อเพิ่มข้อมูลบริษัทลงในตาราง "Vendor"โดยใช้โค๊ดดังนี้ครับ

Code: Select all

Private Sub CommandButton1_Click()

Dim irow As Long
Dim ws As Worksheet
Set ws = Worksheets("Vendor")
'find first empty row in database
irow = ws.Cells(Rows.Count, 2) _
    .End(xlUp).Offset(1, 0).Row
'Check for Id
If Trim(Me.TextBox1.Value) = "" Then
    Me.TextBox1.SetFocus
    MsgBox "ãÊèª×èÍÊÔ¹¤éÒ"
    Exit Sub
End If
'copy the data to the database
ws.Cells(irow, 2).Value = Me.TextBox1.Value
ws.Cells(irow, 3).Value = Me.TextBox2.Value
ws.Cells(irow, 4).Value = Me.TextBox3.Value

'Clear the data
Me.TextBox1.Value = ""
Me.TextBox2.Value = ""
Me.TextBox3.Value = ""
Me.TextBox1.SetFocus

End Sub
หากข้อมูลตาราง "Vendor" ถูกบันทึกอยู่ในอีกไฟล์หนึ่ง ชื่อ Supplier.xls ผมจะเปลี่ยนแปลงโค๊ดข้างต้นอย่างไรครับ
สมมุติว่าไฟล์ชื่อ Supplier.xls อยู่ใน "C:\Server\Boonpanawat\Supplier.xls"

รบกวนด้วยครับ

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 6:14 pm
by snasui
:D เปิดไฟล์ Supplier.xls ขึ้นมาด้วยครับ แล้วปรับ Code จากบรรทัดนี้

Code: Select all

Set ws = Worksheets("Vendor")
เป็นด้านล่า่ง

Code: Select all

set ws = Workbooks("Supplier.xls").worksheets("Vendor")
ข้อมูลก็จะถูกบันทึกลงตามตำแหน่งไฟล์ ตำแหน่งชีทที่ต้องการ

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 7:43 pm
by bank9597
ขอบคุณมากๆครับ อิอิ

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 8:08 pm
by bank9597
อาจารย์ ผมเปลี่ยนแล้ว แต่มันยังบันทึกไม่ได้ มันเป็นดังภาพครับ
untitled.JPG

ผมต้องแก้ตรงไหนเพิ่มอีกไหมครับ

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 8:13 pm
by snasui
:D ดู Code แล้วไม่น่ามีปัญหาใดครับ ช่วยโพสต์ Error หรือแนบไฟล์มาด้วย เพื่อจะได้ทดสอบได้ครับ

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 9:09 pm
by bank9597
ผมเปลี่ยนจาก Supplier เป็น Product แล้วครับ ซึ่งนั่นก็หมายความว่า ผมต้องการเพิ่มข้อมูลสินค้าผ่าน UserForm2 ไปยัง Product.xls ครับ โดยอยู่ในไดร์ฟ D ครับ
Model.xlsm

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 9:14 pm
by snasui
:D ส่งมาทั้งสองไฟล์เลยครับ :mrgreen:

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 9:19 pm
by bank9597
ไฟล์ Product.xls ครับ
Product.xls

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 9:27 pm
by snasui
:D Code ด้านล่าง ผมทดสอบแล้วไม่พบว่าผิดพลาดครับ

Code: Select all

Private Sub CommandButton1_Click()

Dim irow As Long
Dim ws As Worksheet
Set ws = Workbooks("Product.xls").Worksheets("Product") '<== Adjust this line.
'find first empty row in database
irow = ws.Cells(Rows.Count, 2) _
    .End(xlUp).Offset(1, 0).Row
'Check for Id
If Trim(Me.TextBox1.Value) = "" Then
    Me.TextBox1.SetFocus
    MsgBox "ãÊèª×èÍÊÔ¹¤éÒ"
    Exit Sub
End If
'copy the data to the database
ws.Cells(irow, 2).Value = Me.TextBox1.Value
ws.Cells(irow, 3).Value = Me.TextBox2.Value
ws.Cells(irow, 4).Value = Me.TextBox3.Value

'Clear the data
Me.TextBox1.Value = ""
Me.TextBox2.Value = ""
Me.TextBox3.Value = ""
Me.TextBox1.SetFocus
End Sub

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 9:40 pm
by bank9597
:cry: ของผมมันยังไม่ได้เลยครับอาจารย์ รันแล้วก็เกิด Error ตามภาพที่แนบไว้ข้างต้นอ่ะครับ

ผมเปิดสองไฟล์พร้อมกัน มัน Error พอปิดไฟล์ Product.xls มันก็ Error อีกครับ

แต่เวลาปิดไฟล์ Product.xls มันจะฟ้อง ดังภาพ
untitled2.JPG

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 10:06 pm
by snasui
:lol: เจอปัญหานี้เป็นเรื่องที่ดีครับ จะเป็นประโยชน์กับท่านอื่น ๆ ด้วยครับ

สาเหตุเป็นเพราะ
  1. ไฟล์ Product.xls เป็น Version 2003
  2. ไฟล์ Model.xlsm เป็น Version 2007
  3. หากเปิด Model.xlsm ด้วย Version 2007 จะมีปัญหากับการ Assign ค่าให้กับ irow เป็น irow = ws.Cells(Rows.Count, 2) _
    .End(xlUp).Offset(1, 0).Row ทั้งนี้เพราะ 2003 มีแค่ 65536 บรรทัด แต่ Rows.Count นับแล้วได้ 1048576 คือเท่ากับจำนวนบรรทัดของ Excel 2007 ซึ่งไม่มีบรรทัดนี้ใน Excel Version 2003 จึงเกิด Error อย่างที่เห็น
การแก้ไขให้แปลงไฟล์ Product.xls ให้เป็น Product.xlsx การแปลงสามารถเข้าเมนูโดยคลิก Office Button > Convert

และเพื่อป้องกันปัญหาลักษณะนี้ ควรใช้ไฟล์ที่เป็น Excel Version เดียวกันทั้งหมดครับ 8-)

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 10:30 pm
by bank9597
:roll: อิอิ Get เลยครับ แก้ได้แล้วครับ

ผมใช้ Version 2007 ครับ แต่เพื่อป้องกันปัญหาเลยบันทึกเป็น 2003 ตลอดเลย เพื่อให้เวอร์ชั่นเก่าๆ สามารถใช้งานได้

ผมอยากทราบว่า ถ้าเราบันทึกเป็น .xlsx จะมีปัญหาอย่างไร หรือถ้าบันทึกเป็น .xls จะมีปัญหาอะไรที่จะตามมาในอนาคตบ้างครับ

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 10:34 pm
by bank9597
:mrgreen: เพิ่มอีกนิดครับ เวลาเราจะบันทึกข้อมูลในลักษณะแบบนี้ จำเป็นไหมที่เราต้องเปิดไฟล์ทั้ง 2 ขึ้นมาพร้อมกัน
พอดีว่าผมลองปิดไฟล์ Product แล้วทำการบันทึกข้อมูล ปรากฏว่าไม่สามารถบันทึกได้ แต่ถ้าเปิดมาพร้อมกัน ก็ไม่มีปัญหาใดๆครับ

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

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 10:38 pm
by snasui
:D การบันทึกเป็นอะไรไม่สำคัญเท่าการใช้ร่วมกัน 2 Version ครับ ปัญหาก็อาจจะเป็นได้หลายอย่าง ดูกระทู้นี้สำหรับข้อมูลเพิ่มเติมครับ http://www.snasui.com/viewtopic.php?f=3&t=1727

สำหรับการเปิดไฟล์พร้อมกันนั้น จำเป็นหรือไม่แล้วแต่ความชำนาญเกี่ยวกับการใช้ VBA ครับ การเปิดขึ้นมาย่อมทำงานได้ง่ายกว่าบันทึกในไฟล์ที่ปิดอยู่ครับ ถ้าไม่บันทึกข้ามไฟล์ก็ต้องบันทึกในไฟล์เดียวคนละชีทดังนี้เป็นต้น หรือจะเขียนให้บันทึกไปยัง Text File, Access, SQL ไปเลยก็ทำได้แต่ไม่ใช่เรื่องง่ายที่จะทำเช่นนั้นครับ

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Wed Oct 19, 2011 10:44 pm
by bank9597
ครับ ผมพอเข้าใจแล้วครับ ขอบคุณสำหรับความช่วยเหลือครับ วันนี้ผมรบกวนแค่นี้ครับ ขอบคุณอาจารย์มากๆครับ

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Thu Oct 20, 2011 11:10 am
by bank9597
:D สวัสดีครับอาจารย์ เมื่อคืนทิ้งท้ายไว้ในเรื่องการบันทึกข้ามไฟล์
ปัญหาคือเราไม่สามารถบันทึกข้ามไฟล์ได้ ถ้าไฟล์ทั้ง 2 ไม่ถูกเปิดพร้อมกัน เมื่อเป็นดังนี้ผมเลยต้องหาวิธีใหม่มาแก้ปัญหาอีกครั้ง
ต้องเรียนว่า นี่เป็นโปรเจ็คศึกษาครับ เลยต้องเรียนรู้ทุกๆทางไว้ก่อน ได้มากน้อยเพียงใดนั้น จะต้องกลับไปศึกษาให้ลึกซึ้งมากกว่าเดิมอีกครั้งครับ

ผมได้สร้างไฟล์ Product.xlsx โดยมีชีท "Product","Import","Temp" ในชีท "Product" ผมได้สร้างตารางไว้ใส่ข้อมูล แล้วสร้างปุ่มไว้บันทึกไปยังไฟล์ชื่อ Test.txt ใน D\Server\Boonpanawat\Test.txt เบื้องต้นผมได้แกะโค๊ดมาใช้งาน สามารถบันทึกข้อมูลตามต้องการได้ครับ แต่ปัญหาคือ ข้อมูลที่ไปบันทึกนั้นจะต้องเหมือนกับข้อมูลต้นทางทุกครั้งไป ยกตัวอย่าง สมมุติครั้งที่ 1 มีข้อมูล 3 บรรทัด บันทึกไปเก็บไว้ พอครั้งที่ 2 เราลบข้อมูลเดิมทิ้งไป แล้วคีย์ข้อมูลใหม่ บันทึกไปเก็บ ปรากฏว่าข้อมูลที่บันทึกไปครั้งที่ 1 หายไป เหลือแต่ข้อมูลครั้งที่บันทึกไปล่าสุดเท่านั้น

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

ปัญหาดังกล่าว ไม่ใช่ประเด็นสำคัญครับ สำคัญตรงที่เราสามารถบันทึกข้อมูลข้ามไฟล์ได้ และผมอยากรู้ว่า หากผมเลือกแบบนี้มันจะดีหรือไม่ครับ เพราะ SQl,ACCESS ผมไม่ค่อยสันทัดเท่าไหร่
Product.xlsm

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Thu Oct 20, 2011 12:05 pm
by snasui
:D สำหรับ Code ที่แนบมามีการเว้นบรรทัดในทุก Record นอกจากนี้ยังเขียนทับตำแหน่งเดิม ผมเลยเขียนตัวอย่าง Code สำหรับการ Write ต่อเนื่องกันไปมาให้ตามด้านล่างครับ

Code: Select all

Sub SaveToText()
    Dim Filename As String
    Dim Data As Variant
    Dim ExpRng As Range
    Dim r As Range
    With Worksheets("Product")
        Set ExpRng = .Range("A2", _
            .Range("A" & Rows.Count).End(xlUp))
    End With
    Filename = "D:\Test.txt" '<= Change to your path
    Open Filename For Append As #1
    For Each r In ExpRng
        Data = r & "|" & r.Offset(0, 1) & "|" & r.Offset(0, 2)
        Print #1, Data
    Next r
    Close #1
    MsgBox "Finish."
End Sub

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Thu Oct 20, 2011 1:22 pm
by bank9597
อิอิ ขอบคุณครับ 8-)

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Thu Oct 20, 2011 2:21 pm
by bank9597
อาจารย์ครับ ในการเซฟไปเก็บไว้ใน TextFile เราต้องเปลี่ยนแปลงโค๊ดอย่างไร เพื่อที่เวลาเราดึงมาใช้งาน มันจะมาตามคอลัมน์ที่เราต้องการ
โค๊ดนี้ครับ

Code: Select all

Data = r & "|" & r.Offset(0, 1) & "|" & r.Offset(0, 2)

Re: สร้าง user form บันทึกไปยังอีกไฟล์

Posted: Thu Oct 20, 2011 4:38 pm
by snasui
:D ตอนที่เปิดไฟล์ .txt โปรแกรมจะถามว่าให้แบ่งข้อความอย่างไร เลือก Dilimited > Next > ทำเครื่องหมายตรง Other > คีย์ Pipe (เครื่องหมาย |) > Finish