Page 1 of 2

ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Wed Apr 06, 2011 9:49 am
by liveday
ตามไฟล์ที่เเนบนะครับ ไฟล์ที่ผมทำคิดว่าถ้าเยอะๆขึ้นจะเกิดการผิดพลาดใด้ จึงเรียนถามอาจารย์ ว่าควรเเก้ไขปรับปรุงขั้นตอนอย่างไรให้มีความมารตฐานมากขึ้น
ขอคำเเนะนำด้วยนะครับ
cdc central.xlsx

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Wed Apr 06, 2011 10:14 am
by snasui
การเก็บข้อมูลควรเก็บตามชีท Database ที่ผมทำเป็นตัวอย่างมาให้ นั่นคือ จะต้องเป็น Database คือเก็บข้อมูลเรียงลงด้านล่างเรื่อย ๆ ทุกสถานที่ ทุกสาขา

การเก็บข้อมูลลักษณะนี้ เราสามารถสร้างฟอร์มในการรับข้อมูลขึ้นมาใหม่ โดยดู Field ต่าง ๆ ตามชีทเมษายน จากนั้นสามารถใช้ VBA ในการส่งข้อมูลจากฟอร์มไปบันทึกในชีท Database การนำข้อมูลไปใช้ก็จะง่ายขึ้นไม่ว่าจะดึงไปด้วยสูตรหรือ PivotTable

หากต้องการเก็บข้อมูลลักษณะนี้ ขั้นต่อไปก็ให้ทำแบบฟอร์มสำหรับกรอกข้อมูลส่งมา ผมจะเขียน VBA มาให้ครับ

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Mon Apr 18, 2011 1:40 pm
by liveday
สวัสดีปีไหม่ไทยครับ อาจารย์
สืบเนื่องมาจาก ฮาร์ดดิสเสีย ข้อมูลที่ทำใว้หายหมด เลยต้องรื้อฟื้นส่วนที่จำเป็นก่อน เเละคำถามยังเหมือนเดิมครับ
ทำฟร์อม ตามที่อาจารย์บอกครับ (ที่ไฟล์เเนบ)
หลักๆก็คือ เก็บข้อมูลลูกค้า เเต่ละสาขา ส่ง Report เข้าโรงงานเฉพาะบางส่วนเท่านั้น
สิ่งที่ต้องการคือ เราคีย์ข้อมูลลงไปที่ฟอร์มเเต่ละสาขา เเล้วไปเก็บใน Databest ระหว่างนี้ก็จะมีบางส่วนไปเเสดงรายละเอียดหน้าเเรก เพื่อทำการส่ง Report ไปโรงงานอีกที
จึงต้องขอรบกวนอาจารย์ ช่วยเเนะนำเเนวทางทีนะครับ
ขอบคุณครับ

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Mon Apr 18, 2011 3:59 pm
by snasui
ก่อนที่จะเขียน Code เพื่อบันทึกข้อมูล อยากทราบว่าในชีท Database นั้นมีข้อมูลทีจำเป็นครบถ้วนแล้วหรือไม่ครับ ยังไม่ครบช่วยเพิ่มเติมตามที่ต้องการใช้จริงด้วยครับ

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Tue Apr 19, 2011 12:00 pm
by liveday
เรียน อาจารย์
จากคำเเนะที่บอกมา ตอนนี้ใด้เเบบฟอร์มที่นึง ซึ่งจำไม่ใด้ว่าใด้มาจากไหน (ต้องขอโทษเจ้าของไฟล์ด้วยนะครับ)
ซึ่งเป็นไปตามที่ต้องการ เเละผมใด้มาแก้ไขบางส่วน ส่วนเจตจำนงค์ที่ทำยังเหมือนเดิมจากที่ถามอาจารย์ครั้งก่อน
ตรงหน้า report จากการเชื่อมโยง index ออเร่อ ขึ้นว่า #REF! เเก้ไขตรงไหนหรือครับ
เเละนี่คือข้อมูลที่จำเป็นทั้งหมดเเละครบถ้วนเเล้วครับ

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Tue Apr 19, 2011 4:54 pm
by snasui
:D ไม่ทราบว่ายังต้องการให้บันทึกข้อมูลลง Database อีกหรือไม่ครับ เพราะไม่มี Form มาให้

สำหรับสูตรที่ติดค่า #Ref! นั้น เนื่องจากสูตรที่ดึงข้อมูลมาแสดงนั้นได้นำเอาค่าที่เกินจากช่วงที่กำหนดมา จึงไม่สามารถนำมาแสดงได้

เช่นจากสูตรใน C19 คือ

=INDEX(Data,$M$2,13)

หมายความว่า จากช่วงข้อมูล Data ให้นำบรรทัดที่เป็นค่าของ M2 และคอลัมน์ที่ 13 มาแสดง หากข้อมูล Data มีไม่ถึง 13 คอลัมน์ก็จะเกิด Error ดังกล่าวครับ

การตรวจสอบว่า Data คือช่วงข้อมูลไหนให้คลิกที่เมนู Formula > Name manager > คลิกที่ชื่อ Data > ตรงด้านล่างที่เป็น Refer to: จะอ้างอิงตำแหน่งช่วงเซลล์มาให้

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Tue Apr 19, 2011 5:31 pm
by liveday
ลืมใส่ From ไปด้วยครับ ก็ใด้ไปทีละขั้นตอน ดีใจจริงๆ ^ ^
ยังต้องการเหมือนเดิม เพียงเพิ่มบางอย่างเพื่อการดูง่ายขึ้นครับ
ขอบคุณอาจารย์ในทุกๆคำตอบครับ

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Tue Apr 19, 2011 9:54 pm
by snasui
ผมเขียน Code ให้แล้วตามด้านล่างดูไฟล์แนบประกอบครับ

Code: Select all

Sub PasteData()
Dim rs As Range
Dim rt As Range
    Set rs = Worksheets("Form").Range("A3:N3")
    Set rt = Worksheets("Data").Range("D65536").End(xlUp).Offset(1, -1)
    rs.Copy
    rt.PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    MsgBox "Finish."
End Sub
จากการทดสอบพบว่าชีท Form กับชีท Data คอลัมน์ไม่เท่ากัน การวางข้อมูลลงชีท Data จึงไม่ตรงตามตำแหน่งเช่นข้อมูลเดิมที่มีอยู่แล้ว ช่วยปรับ Form ให้เท่ากับ Data แล้วส่งมาใหม่จะได้ปรับ Code ให้ครับ

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Tue Apr 19, 2011 11:25 pm
by liveday
ปรับตามที่บอกครับ

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Tue Apr 19, 2011 11:38 pm
by snasui
:D ปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Sub PasteData()
Dim rs As Range
Dim rt As Range
    Set rs = Worksheets("Form").Range("A3:Q3")
    Set rt = Worksheets("Data").Range("D65536").End(xlUp).Offset(1, -1)
    rs.Copy
    rt.PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    MsgBox "Finish."
End Sub

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Wed Apr 20, 2011 9:42 am
by liveday
ใด้เเล้วครับ ขอบคุณอาจารย์มากครับ
เเต่อยากรู้ความหมายของโค้ด เเต่ละบรรทัดที่อาจารย์เขียนมาให้ เพื่อจะไปดัดเเปลงในการใช้งานอื่นๆครั้งต่อไปครับ ขอบคุณครับ
เเล้วอีกอย่าง เราจะ Enable VBA ให้ใช้ใด้ตลอดไม่ต้องไป Allow ทุกครั้ง ไปเซตตรงไหนหรือครับ

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Wed Apr 20, 2011 7:09 pm
by snasui
ลองทำความเข้าใจตามด้านล่างครับ

Code: Select all

Sub PasteData() 'เริ่มคำสั่ง
Dim rs As Range 'กำหนดตัวแปร rs เป็นเซลล์หรือช่วงข้อมูล
Dim rt As Range 'กำหนดตัวแปร rt เป็นเซลล์หรือช่วงข้อมูล
    Set rs = Worksheets("Form").Range("A3:Q3") 'กำหนดตำแหน่งให้กับตัวแปร rs คือช่วงข้อมูล A3:Q3 ในชีท Form
    Set rt = Worksheets("Data").Range("D65536").End(xlUp).Offset(1, -1) 'กำหนดตำแหน่งให้กับตัวแปร rt คือถัดจากเซลล์สุดท้ายในคอลัมน์ C ของชีท Data
    rs.Copy 'Copy ตัวแปร rs
    rt.PasteSpecial xlPasteValues 'นำไปวางแบบค่าที่ตัวแปร rt
    Application.CutCopyMode = False 'ยกเลิกการ Copy
    MsgBox "Finish." 'แสดงกล่องโต้ตอบเพื่อบอกว่าทำงานเรียบร้อยแล้ว
End Sub 'สิ้นสุดคำสั่ง
สำหรับการ Enable Macro ดูที่นี่ครับ http://www.snasui.com/viewtopic.php?p=4982#p4982

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Thu Apr 21, 2011 8:51 pm
by liveday
อยากถามอาจารย์ว่า เราสามารถกำหนดมากกว่า 1 เเถวใด้ไหมครับ
อย่างตัวนี้ Set rs = Worksheets("Form").Range("A3:Q3") มันใด้เเถวเดียว เพิ่มเป็น 2-5 เเถวใด้ไหมครับหรือมากกว่านั้น
เเล้วโค้ดสามารถกำหนดให้ไปบันทึกเฉพาะบางช่องเซล์ที่เราต้องการ ใด้หรือเปล่าครับ ถ้าใด้เป็นสูตร VBA เเบบไหนใด้ครับ
เเล้วทำเป็นช๊อตคัท (Copy pste) ของ macroใด้ยังไงครับ เเบบ อาจารย์ทำให้อ่ะครับ
ถามอีกอย่างว่ากรณีต้องการหาผลลัพท์ทั้งหมดเเล้วเเสดงนั้นช่องเซล์นั้นเลยใช้สูตรประมาณไหนครับ เช่น (A1*B1),ผลลัพท์ที่ใด้*30% เเล้วผลลัพท์ที่ใด้แสดงในช่อง C1 ประมาณนี่ครับ
รบกวนอาจารย์ด้วยนะครับ

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Thu Apr 21, 2011 11:11 pm
by snasui
liveday wrote:อยากถามอาจารย์ว่า เราสามารถกำหนดมากกว่า 1 เเถวใด้ไหมครับ
อย่างตัวนี้ Set rs = Worksheets("Form").Range("A3:Q3") มันใด้เเถวเดียว เพิ่มเป็น 2-5 เเถวใด้ไหมครับหรือมากกว่านั้น
สามารถกำหนดเป็นกี่แถวกี่คอลัมน์ก็ได้ครับ
เเล้วโค้ดสามารถกำหนดให้ไปบันทึกเฉพาะบางช่องเซล์ที่เราต้องการ ใด้หรือเปล่าครับ ถ้าใด้เป็นสูตร VBA เเบบไหนใด้ครับ
สามารถทำได้ส่วนจะเขียนแบบไหนอยู่ที่ว่ามีเงื่อนไขอย่างไรครับ
เเล้วทำเป็นช๊อตคัท (Copy pste) ของ macroใด้ยังไงครับ เเบบ อาจารย์ทำให้อ่ะครับ
ต้องวาด Oject ใด ๆ ขึ้นมาก่อนจากนั้นคลิกขวา > Assigned Macro ดูวิธีการที่นี่ครับ http://www.snasui.com/viewtopic.php?p=1061#p1061
ถามอีกอย่างว่ากรณีต้องการหาผลลัพท์ทั้งหมดเเล้วเเสดงนั้นช่องเซล์นั้นเลยใช้สูตรประมาณไหนครับ เช่น (A1*B1),ผลลัพท์ที่ใด้*30% เเล้วผลลัพท์ที่ใด้แสดงในช่อง C1 ประมาณนี่ครับ
รบกวนอาจารย์ด้วยนะครับ
ทำไฟล์ตัวอย่างมาด้วยครับจะได้สะดวกในการอ้างอิง

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Fri Apr 22, 2011 7:55 am
by liveday
อาจารย์ช่วยดูทีนะครับ ตามไฟล์เเนบ
ที่ต้องการเพิ่ม คือ ต้องการก็อบจำนวนมากกว่า 1 เเถว ครับ
เเล้ว ตรง Copy to report พอก็อบปี้เเล้วมันไปแถวที่ 21 ของ report อยากให้มันเริ่มต้นอยู่ที่เเถวที่ 5 ครับ

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Fri Apr 22, 2011 8:44 am
by snasui
สงสัยเพิ่มครับ ในชีท Form บรรทัดที่ 2-8 กับ 11-17 เป็น Form เดียวกัน ต้องการใช้ Form ไหนครับ ปกติหาก Form เหมือนกันจะสร้างมาเพียง Form เดียว ส่วนจะเอา Data ไปไหนบ้างก็แล้วแต่กำหนด และข้อมูลที่จะเอาไปใช้นั้นหากใน Form มีการบันทึกจำนวนรายการไม่เท่ากันทุกครั้ง เรามักจะไม่กำหนดจำนวนบรรทัดที่จะ Copy ไว้ล่วงหน้าว่าเป็นเท่านั้นเท่านี้ แต่จะใช้ Code ให้หาจำนวนรายการแล้ว Copy ไปเท่าจำนวนรายการที่มีครับ

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Fri Apr 22, 2011 9:28 am
by liveday
เรียน อาจารย์
บรรทัด ที่ 11-17 ไม่ใด้ใช้ครับ พอดีผมจำลองขึ้นมาเฉยๆ ส่วนคำถามยังเหมือนเดิมครับ
คำถามประมาณนี้อ่ะครับ (จะใช้ Code ให้หาจำนวนรายการแล้ว Copy ไปเท่าจำนวนรายการที่มีครับ)

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Fri Apr 22, 2011 10:01 am
by snasui
ผมปรับ Code ให้ใหม่เป็นตามด้านล่าง ดูไฟล์แนบประกอบครับ

Code: Select all

Sub PasteData()
Dim rs As Range
Dim rt As Range
    Set rs = Worksheets("Form").Range("B3", Range("B10") _
        .End(xlUp).Offset(0, 16))
    Set rt = Worksheets("Data").Range("C65536").End(xlUp).Offset(1, -1)
    rs.Copy
    rt.PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    MsgBox "Finish."
End Sub
Sub PasteToReport()
Dim rs As Range
Dim rt As Range
    Set rs = Worksheets("Form").Range("B21", Range("B24") _
        .End(xlUp).Offset(0, 8))
    Set rt = Worksheets("Report").Range("A16").End(xlUp).Offset(1, 0)
    rs.Copy
    rt.PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    MsgBox "Finish."
End Sub

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Fri Apr 22, 2011 11:47 am
by liveday
รบกวนอาจารย์ครับ
คือ เเล้ว สูตรของอาจารย์ดูใด้ตรงไหนหรือครับ พอดีผมเปิด Alt+F11 เเล้วสูตรมันมีเฉพาะอันเดิมไม่มีของอาจารย์ครับ
เเล้วผมจะดัดเเปลง จากการบันทึกเเค่ 1 บรรทัด ให้มากกว่านี้ใด้หรือเปล่าครับเเบบเป็น 2-5 บรรทัดต่อการบันทึก 1 ครั้ง เเล้วเเก้หรือเพิ่มเติมใด้จากโค้ดที่บรรทัดไหนหรือครับ
ขอบคุณ ครับ

Re: ขอคำปรึกษา เเละคำเเนะนำครับ

Posted: Fri Apr 22, 2011 11:57 am
by snasui
:D Code อยู่ที่ Module1 ครับ

อันเดิมที่ว่านี้อยู่ที่ไหนครับ ถ้าไม่ใช่ที่ Module1 ให้ลบทิ้งไปครับ เว้นเสียว่าจะใช้งานอย่างอื่น ผมพบว่าอยู่ใน ThisWorkBook ด้วย ไม่แน่ใจว่าผมเขียนมาให้แล้ววางผิดที่หรือไม่ ให้ลบทิ้งไปด้วยครับ

ส่วนจะบันทึกกี่บรรทัดก็ใส่ข้อมูลเข้าไปตามต้องการ ลองบันทึก สังเกตดูผลครับ Code ที่เขียนมาให้นี้ได้ปรับเรื่องบรรทัดให้แล้วครับ