:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
su019
Member
Member
Posts: 50
Joined: Fri Aug 12, 2011 11:24 pm

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#21

Post by su019 »

อาจารย์ค่ะ

แนบไฟล์มาแล้วค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#22

Post by snasui »

:D ต้องการ Update และ Delete ด้วยเงื่อนไขใดบ้างเขียนมาให้ครบครับ เปิดเข้าไปดูในไฟล์แนบแล้วไม่มีคำอธิบายเพิ่มเติม ช่วยอธิบายมาพอสังเขปในกระทู้ด้วยก็จะดีมากครับ เพื่อประโยชน์ในการค้นหาของเพื่อน ๆ ครับ

จากไฟล์ที่ส่งมาหากมองเฉพาะ OI แล้วโปรแกรมจะทราบได้อย่างไรว่าจะ Update หรือ Delete ที่ Product อะไร WareHouse อะไร :?:
su019
Member
Member
Posts: 50
Joined: Fri Aug 12, 2011 11:24 pm

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#23

Post by su019 »

อาจารย์

"จากไฟล์ที่ส่งมาหากมองเฉพาะ OI แล้วโปรแกรมจะทราบได้อย่างไรว่าจะ Update หรือ Delete ที่ Product อะไร WareHouse อะไร "


หากเราใช่้ Column L เป็นตัวบอกว่าจะลบ หรือแก้ไข จะได้ไหมค่ะ

ได้แนบไฟล์มาแก้มาด้วค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#24

Post by snasui »

su019 wrote:หากเราใช่้ Column L เป็นตัวบอกว่าจะลบ หรือแก้ไข จะได้ไหมค่ะ
สำหรับค่านี้เราใช้เป็นเงื่อนไขในการ Delete หรือ Update อยู่แล้วครับ แต่สิ่งที่จะต้องตรวจสอบให้แน่ใจคือ Update หรือ Delete ได้ถูกบรรทัดหรือไม่ มีอะไรเป็นตัวบอกว่าจะ Update หรือ Delete บรรทัดนั้น ๆ เพราะ OI เป็นตัวเดียวกัน คำว่า Delete หรือ Update กับ OI จึงไม่เพียงพอที่จะบอกสิ่งเหล่านั้นกรณีมีข้อมูลจำนวนมากและสลับกันไปสลับกันมา ผมปรับ Code ให้ดู Product Code เพิ่มเข้ามาด้วยว่าต้องเป็น Product เดียวกันถึงค่อย Delete หรือ Update

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

Code: Select all

Sub UpdateData2()
Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
With Worksheets("Print_OI2")
    Set rsAll = .Range("G6", .Range("G" & Rows.Count).End(xlUp))
End With
With Worksheets("Database")
    Set rtAll = .Range("G2", .Range("G" & Rows.Count).End(xlUp))
    End With
For Each rs In rsAll
    For i = rtAll.Count To 1 Step -1
        If rs = rtAll(i) And rs.Offset(0, -4) = rtAll(i).Offset(0, -4) _
        And rs.Offset(0, 6) = "Update" Then
            rs.Offset(0, -5).Resize(1, 9).Copy
            rtAll(i).Offset(0, -5).PasteSpecial xlPasteValues
        End If
    Next i
Next rs
Application.CutCopyMode = False
End Sub

Sub DeleteData2()
Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
With Worksheets("Print_OI2")
    Set rsAll = .Range("G6", .Range("G" & Rows.Count).End(xlUp))
End With
With Worksheets("Database")
    Set rtAll = .Range("G2", .Range("G" & Rows.Count).End(xlUp))
    End With
For Each rs In rsAll
    For i = rtAll.Count To 1 Step -1
        If rs = rtAll(i) And rs.Offset(0, -4) = rtAll(i).Offset(0, -4) _
        And rs.Offset(0, 6) = "Delete" Then
          rtAll(i).EntireRow.Delete
        End If
    Next i
Next rs
End Sub
su019
Member
Member
Posts: 50
Joined: Fri Aug 12, 2011 11:24 pm

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#25

Post by su019 »

สอบถามเพิ่มเติม

หลังจากใช้งานจริง จำนวนข้อมูลมากขึ้น ไฟล์ที่อาจารย์ช่วยไฟล์นี้ เมื่อเราเลือกข้อมูลตาม OI ซึ่งมีจำนวนรายการจำนวนมาก มาแล้วแล้วทำการเลือกว่าจะ Update หรือ Delete นั้น มันจะช้ามาก พอจะมีวิธีไหนที่จะให้การคำนวณหรือการทำงานเร็วขึ้นกว่านี้ได้ไหมค่ะ

ขอบคูณค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#26

Post by snasui »

:D เท่าที่สังเกตจากไฟล์เดิมที่แนบมา ไม่ได้ช้าเพราะ Code VBA ครับ แต่ช้าเพราะว่าใช้ฟังก์ชั่น Vlookup แบบตรงตัวจำนวนมาก แถมใช้แบบเลือกทั้งคอลัมน์ จึงเป็นธรรมดาที่ไฟล์ทำงานช้า แม้ไม่ใช้ VBA เข้ามาเกี่ยวข้องก็ช้าเป็นปกติอยู่แล้วครับ

หากต้องการให้เร็วขึ้นลองเพิ่ม Code สำหรับการปรับให้เป็นการคำนวณแบบ Manual ก่อน เมื่อ Run Code เสร็จค่อยปรับกลับมาให้เป็น Automatic ยกตัวอย่างเช่น สร้าง Sub Procedure ใหม่เข้ามาช่วย

Code: Select all

Sub test()
    Application.Calculation = xlCalculationManual
    UpdateData2
    Application.Calculation = xlCalculationAutomatic
End Sub 
ซึ่ง UpdateData2 คือ Procedure เดิม หรือจะเขียนเข้าไปใน Code เดิมก็ได้เช่น

Code: Select all

Sub UpdateData2()
Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
Application.Calculation = xlCalculationManual
'Ohter code
Application.Calculation = xlCalculationAutomatic
End Sub
'Other code คือ Code เดิม ละไว้ในฐานที่เข้าใจ
su019
Member
Member
Posts: 50
Joined: Fri Aug 12, 2011 11:24 pm

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#27

Post by su019 »

พอปรับ Code ตามอาจารย์แนะนำ + ลด Code Vlookup ออกไปด้วยตอนนี้คำนวณเร็วขึ้นแล้วค่ะ

แต่ถามเพิ่มเติมหน่อยนะค่ะ
หากตอนคำนวณ เราไม่อยากให้เห็นข้อมูลตอนที่ระบบกำลังลบ หรือ Update ข้อมูลจะได้ไหมค่ะ และ เมื่อคำนวณเสร็จแล้ว ให้ Active ค่าให้ด้วยได้ไหมค่ะ
เช่น หลังจากลบบางรายการแล้ว คงเหลือกี่รายการ โดยที่เราไม่ต้องมาใส่ค่า OI ใหม่นะค่ะ


ขอบคุณมากค่ะ สำหรับคำแนนำ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#28

Post by snasui »

:D
su019 wrote:หากตอนคำนวณ เราไม่อยากให้เห็นข้อมูลตอนที่ระบบกำลังลบ หรือ Update ข้อมูลจะได้ไหมค่ะ
สามารถใช้

Code: Select all

Application.ScreenUpdating = False
แทรกเข้าไปก่อน Code ที่จะทำการลบหรือ Update ได้ครับ และก่อนที่จะ End Sub ก็ให้แทรก

Code: Select all

Application.ScreenUpdating = True
เพื่อปรับกลับมาเหมือนเดิม
su019 wrote:เมื่อคำนวณเสร็จแล้ว ให้ Active ค่าให้ด้วยได้ไหมค่ะ เช่น หลังจากลบบางรายการแล้ว คงเหลือกี่รายการ โดยที่เราไม่ต้องมาใส่ค่า OI ใหม่นะค่ะ
สามารถเขียน Code ให้วางค่าที่ต้องการใน Form ที่เรียกดูข้อมูลหลังจาก Delete หรือ Update แล้วแทนการคียเข้าไปเองครับ
su019
Member
Member
Posts: 50
Joined: Fri Aug 12, 2011 11:24 pm

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#29

Post by su019 »

ทำได้แล้วค่ะอาจารย์

ขอบคุณมากเลยค่ะ นั่งงงอยู่ตั้งนาน ถ้าไม่ได้คำแนะนำของอาจารย์ คงแย่แน่เลยค่ะ

ขอบคุณมากนะค่ะ


และขอถามเพิ่มเติมนะค่ะ หากเราจะเพิ่ม Option Add อีกข้อนึง เพื่อที่เราจะเพิ่มข้อมูลเข้าไปจะได้ไหมค่ะอาจารย์
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#30

Post by snasui »

su019 wrote:และขอถามเพิ่มเติมนะค่ะ หากเราจะเพิ่ม Option Add อีกข้อนึง เพื่อที่เราจะเพิ่มข้อมูลเข้าไปจะได้ไหมค่ะอาจารย์
ไม่เข้าใจครับ จะเพิ่มตรงไหน อย่างไร ช่วยอธิบายเพิ่มด้วยครับ
su019
Member
Member
Posts: 50
Joined: Fri Aug 12, 2011 11:24 pm

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#31

Post by su019 »

อย่างกรณีเดิม
เราระบุเลขที่ OI แล้วจะดึงข้มูลขึ้นมา แล้วเราก็เลือกที่จะ ลบ หรือ แก้ไข รายการที่โชว์ขึ้นมา แล้วให้ระบบทำตามที่เราระบุ ตาม Code ที่อาจารย์เขียนใหห้นะค่ะ

แต่ถ้าเราต้องการที่จะเพิ่มให้มีการ Add รายการเข้าไป ก็จะเป็น เพิ่ม,ลบ,แก้ไข นะค่ะ
เช่น OI A มี 2 รายการ
รายการที่ 1 เราต้องการลบ เราก็เลือก Delete
รายการที่ 2 เราต้องการแก้ไขจำนวน เราก็เลือก Update
แล้วเราต้องการที่จะเพิ่มเข้าไปอีก 1 รายการที่ เราต้องการ Add Record นะค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#32

Post by snasui »

:D ขอชมว่าอธิบายได้ชัดเจนดีมากครับ สามารถทำได้ครับ ลองปรับปรุง Code มาดูครับ ติดตรงไหนก็ค่อยมาช่วยกันดูต่อครับ
su019
Member
Member
Posts: 50
Joined: Fri Aug 12, 2011 11:24 pm

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#33

Post by su019 »

มี Code Add Data จากการสร้างฟอร์มรับข้อมูล

Code: Select all

Option Explicit
Const Database = "Database"
Const wh_col = 2
Const prodcode_col = 3
Const prodname_col = 4
Const um_col = 5
Const Lot_col = 6
Const OI_col = 7
Const QtyCtn_col = 8
Const QtyEach_col = 9
Const Palate_col = 10
Const remark_col = 11
Public Sub entry_mode()

Dim blank_row As Single

blank_row = Worksheets(Database).Cells(1, 2).End(xlDown).Row + 1

With Worksheets(Database)

    .Cells(blank_row, wh_col).Value = entry_form.WH_txtbox.Value
    .Cells(blank_row, prodcode_col).Value = entry_form.prodcode_txtbox.Value
    .Cells(blank_row, prodname_col).Value = entry_form.prodname_txtbox.Value
    .Cells(blank_row, um_col).Value = entry_form.um_txtbox.Value
    .Cells(blank_row, OI_col).Value = entry_form.OI_txtbox.Value
    .Cells(blank_row, Lot_col).Value = entry_form.Lot_txtbox.Value
    .Cells(blank_row, QtyCtn_col).Value = entry_form.qtyctn_txtbox.Value
    .Cells(blank_row, QtyEach_col).Value = entry_form.qtyeach_txtbox.Value
    .Cells(blank_row, Palate_col).Value = entry_form.palate_txtbox.Value
    .Cells(blank_row, remark_col).Value = entry_form.remark_txtbox.Value
    '.Cells(blank_row, remark_col).Value = entry_form.remark_cbbox.Value
End With

MsgBox "Database updated", vbInformation, "Add Stock Item Record"

End Sub

ไม่ทราบว่านำ Code นี้มาประยุกต์ใช้ได้ไหมค่ะ ( แต่ Code นี้เป็นการดึง Form มาบันทึกค่ะ )
su019
Member
Member
Posts: 50
Joined: Fri Aug 12, 2011 11:24 pm

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#34

Post by su019 »

ไม่เก่งนะค่ะ เลยอาจจะเขียน Code ไม่ถูกต้องนะค่ะ
ที่ได้มาก็อ่านมาจากหนังสือนะค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#35

Post by snasui »

:D ส่งตัวอย่างไฟล์ล่าสุดมาด้วยครับ จะได้สะดวกในการทดสอบ

จาก Code ที่ถามเป็นการนำมาจาก UserForm นำมาบันทึกใน Cell และถ้าผมจำไม่ผิดเดิมเรากำลังนำค่าในเซลล์ไปบันทึกในเซลล์ ซึ่งเป็นคนละแบบ ถ้าเข้าใจ Code ก็ควรที่จะประยุกต์ได้ครับ
su019
Member
Member
Posts: 50
Joined: Fri Aug 12, 2011 11:24 pm

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#36

Post by su019 »

ไฟล์ตัวอย่างที่ใช้งานอยู่ค่ะ


ขอบคุณค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#37

Post by snasui »

:D ค่อย ๆ ถามตอบกันไปนะครับ

เข้าใจว่าให้ดูจากชีท Update_Delete_Item ซึ่งควรแจ้งมาทุกครั้งครับว่าให้ดูที่ชีทไหน เซลล์ไหนนอกจากนี้แจ้งชื่อ Procedure ที่ได้ลองเขียนมาแล้วด้วย เพื่อให้เข้าถึงข้อมูลได้รวดเร็ว

คำถามครับ

1. กรณีการ Add ให้ Check จากค่าไหนครับ
2. Code ที่เกียวกับการ Add อยู่ที่ไหน ชื่อว่าอะไรครับ
su019
Member
Member
Posts: 50
Joined: Fri Aug 12, 2011 11:24 pm

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#38

Post by su019 »

อาจารย์

ตอนนี้ทำได้แล้วแต่ แต่ใช้วิธีสร้าง Sheet AddData แล้วคีย์ข้อมูลเข้าไปแล้ว วิธีตามตัวอย่าง
โดยใช้ Code

Code: Select all

Sub F5PasteBottom()
    Application.Goto Reference:="Source"
    Selection.Copy
    Application.Goto Reference:="Target"
    ActiveSheet.Paste
End Sub
ซึ่งก็สามารถใช้งานได้ค่ะ


แต่มีเรื่องปรึกษานิดนึงค่ะ เกี่ยวกับ Code ที่อาจารย์แนะนำมาให้ เกี่ยวกับ Offset ซึ่งหากมีการเพิ่ม Field แล้วไม่เข้าใจหลักการนะค่ะ

Code: Select all

Sub UpdateData2()

Application.ScreenUpdating = False
Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
With Worksheets("Update_Delete_Item")
    Set rsAll = .Range("G6", .Range("G" & Rows.Count).End(xlUp))
End With
With Worksheets("Database")
    Set rtAll = .Range("G2", .Range("G" & Rows.Count).End(xlUp))
    End With
For Each rs In rsAll
    For i = rtAll.Count To 1 Step -1
        If rs = rtAll(i) And rs.Offset(0, -4) = rtAll(i).Offset(0, -4) _
        And rs.Offset(0, 6) = "Update" Then
            rs.Offset(0, -5).Resize(1, 10).Copy
            rtAll(i).Offset(0, -5).PasteSpecial xlPasteValues
        End If
    Next i
Next rs

Application.CutCopyMode = False

Application.ScreenUpdating = True

End Sub
รบกวนอาจารย์ช่วยอธิบาย Code ตามนี้ให้หน่อยได้ไหมค่ะ

รบกวนอาจารย์หน่อยนะค่ะ

ขอบคุณค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#39

Post by snasui »

:D ต้องค่อย ๆ ทำความเข้าใจนะครับ

จาก

Code: Select all

With Worksheets("Update_Delete_Item")
    Set rsAll = .Range("G6", .Range("G" & Rows.Count).End(xlUp))
End With
เป็นการกำหนดค่าให้กับตัวแปร rsAll โดยให้มีค่าเท่ากับช่วงข้อมูลเริ่มจาก G6 จนถึงเซลล์สุดท้ายในคอลัมน์ G

จาก

Code: Select all

Set rtAll = .Range("G2", .Range("G" & Rows.Count).End(xlUp))
เป็นการกำหนดค่าให้ตัวแปร rtAll โดยให้มีค่าเท่ากับช่วงข้อมูลเริ่มจาก G2 จนถึงเซลล์สุดท้ายในคอลัมน์ G

จาก

Code: Select all

For Each rs In rsAll
  For i = rtAll.Count To 1 Step -1
    If rs = rtAll(i) And rs.Offset(0, -4) = rtAll(i).Offset(0, -4) _
       And rs.Offset(0, 6) = "Update" Then
          rs.Offset(0, -5).Resize(1, 10).Copy
          rtAll(i).Offset(0, -5).PasteSpecial xlPasteValues
    End If
   Next i
Next rs
ความหมายคือ จากแต่ละค่าใน rsAll ให้ทำการ Run Statement

Code: Select all

For i = rtAll.Count To 1 Step -1
     If rs = rtAll(i) And rs.Offset(0, -4) = rtAll(i).Offset(0, -4) _
       And rs.Offset(0, 6) = "Update" Then
          rs.Offset(0, -5).Resize(1, 10).Copy
          rtAll(i).Offset(0, -5).PasteSpecial xlPasteValues
     End If
Next i
จาก Statement ด้านบนความหมายถือ กำหนดให้ i เป็นค่าที่ได้จากการนับจำนวนค่าใน rtAll จนถึงค่า 1 และให้ทำการลดค่าลงครั้งละ 1 ในแต่ละค่าของ i ให้ทำการ Run Statement

Code: Select all

If rs = rtAll(i) And rs.Offset(0, -4) = rtAll(i).Offset(0, -4) _
   And rs.Offset(0, 6) = "Update" Then
     rs.Offset(0, -5).Resize(1, 10).Copy
     rtAll(i).Offset(0, -5).PasteSpecial xlPasteValues
End If
ความหมายของ Statement ด้านบนคือ หากตัวแปร rs มีค่าเท่ากับ rtAll ลำดับที่ i และ ค่าที่ถัดจากตัวแปร rs ไปทางซ้าย 4 คอลัมน์มีค่าเท่ากับค่าทีถัดไปจาก rtAll ลำดับที่ i ไปด้านซ้าย 4 คอลัมน์ และ ค่าที่ถัดไปจากตัวแปร rs ไปด้านขวา 6 คอลัมน์มีค่าเท่ากับ Update แล้ว ให้ทำการปรับขนาดค่าที่ถัดจากตัวแปร rs ไปด้านซ้าย 5 คอลัมน์โดยให้มีความสูงเพียง 1 บรรทัดและมีความกว้างขยายไปทางขวา 10 คอลัมน์แล้วทำการ Copy ข้อมูลชุดนี้ไปวางเฉพาะค่าที่ค่าที่ถัดจากตัวแปร rtAll ลำดับที่ i ไปทางด้านซ้าย 5 คอลัมน์
su019
Member
Member
Posts: 50
Joined: Fri Aug 12, 2011 11:24 pm

Re: ต้องการดึงข้อมูลตามที่ต้องการ และกดปุ่มลบ แก้ไขข้อมูล

#40

Post by su019 »

อาจารย์ค่ะ

หากเราต้องการเพิ่ม แทรก Column Date มาอยู่ใน Column C ทำให้ Column OI ซึ่งเดิมเป็น Column G (ปรับทุก Sheet ให้มี Column ตรงกัน ) เลื่อนเป็น H แล้วทำการแก้ไข Code ของการ Update เป็น

Code: Select all

Sub UpdateData2()

Application.ScreenUpdating = False

Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
With Worksheets("Update_Delete_Item")
    Set rsAll = .Range("H6", .Range("H" & Rows.Count).End(xlUp))
End With
With Worksheets("Database")
    Set rtAll = .Range("H2", .Range("H" & Rows.Count).End(xlUp))
    End With
For Each rs In rsAll
    For i = rtAll.Count To 1 Step -1
  'ไม่เข้าใจตรงนี้นะค่ะ
        If rs = rtAll(i) And rs.Offset(0, -4) = rtAll(i).Offset(0, -4) _
        And rs.Offset(0, 6) = "Update" Then '6
            rs.Offset(0, -6).Resize(1, 11).Copy   '-5
            rtAll(i).Offset(0, -6).PasteSpecial xlPasteValues
        End If
    Next i
Next rs
Application.CutCopyMode = False

Application.ScreenUpdating = True

End Sub


เวลารัน Code ปรากฎว่าข้อมูลที่บันทึกกลับเข้าไปใน Sheet Datatbase มันเลื่อน และ เพี้ยนไปหมดเลยค่ะ

รบกวนอาจารย์ช่วยดูให้หน่อยได้ไหมค่ะ (พยายามแล้ว ยิ่งไปกันใหญ่เลยค่ะ )

ขอบคุณอาจารย์มากนะค่ะ สำหรับความช่วยเหลือ
Post Reply