: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

code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#1

Post by kuaduang »

เมื่อเลือก input ที่ E7 จะได้รหัสสินค้าตามต้องการจำนวนชิ้นใส่เองหรือตั้งใว้ที่ 1 แต่ต้องการเมื่อเลือกรายการสินค้าซ้ำให้ใส่จำนวนเพิ่มให้อัตโนมัติ เปลี่ยน code ตรงไหน
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#2

Post by snasui »

:lol: คำตอบคือไม่ทราบครับ

ลองแนบ Code พร้อมไฟล์แนบ ซึ่งมีตัวอย่างข้อมูล ตัวอย่างคำตอบที่ต้องการ เพื่อเพื่อน ๆ จะมีโอกาสได้ทราบครับ :mrgreen:
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#3

Post by kuaduang »

โปรแกรมร้านค้า.xlsm
(59.3 KiB) Downloaded 82 times

Code: Select all

Public Sub addNewItem(id As String)
    If id = "" Then Exit Sub
    
    Dim r As Range, f As Range
    Set r = Range("item")
    Set f = r.Find(What:=id, LookAt:=xlWhole, MatchCase:=True)
    
    Dim foundRow As Long
    If f Is Nothing Then
        MsgBox " äÁ辺ª×èÍÊÔ¹¤éÒ " & id, vbCritical, "¢ÒÂ˹éÒÃéÒ¹"
        
        Exit Sub
    End If
    
    foundRow = f.Row
    
   'search current id
    Dim ServiceCurrentID As Range
    Set ServiceCurrentID = Range("ServiceCurrentID")
    Dim foundDupID As Range
    Set foundDupID = ServiceCurrentID.Find(id)
    If Not (foundDupID Is Nothing) Then
        'add only qty
        Sheets("Service Invoice").Range("F" & foundDupID.Row).Value = Sheets("Service Invoice").Range("F" & foundDupID.Row).Value + Sheets("Service Invoice").Range("ServiceInputQty").Value
        Exit Sub
    End If
    
    'copy data to table
    For r1 = 21 To 13 Step -1
        If Not IsEmpty(Sheets("Service Invoice").Range("A" & r1).Value) Then Exit For
    Next
    
    r1 = r1 + 1
    'ÃËÑÊÊÔ¹¤éÒ  ÃÒÂÅÐàÍÕ´  ÃÒ¤Ò  ¨Ó¹Ç¹   ÃÇÁ
    Sheets("Service Invoice").Range("A" & r1).Value = Sheets("DATA_ITEM").Range("B" & foundRow).Value
    'Sheets("Service Invoice").Range("B" & r1).Value = Sheets("DATA_ITEM").Range("C" & foundRow).Value
    'Sheets("Service Invoice").Range("E" & r1).Value = Sheets("DATA_ITEM").Range("D" & foundRow).Value
    Sheets("Service Invoice").Range("F" & r1).Value = Sheets("Service Invoice").Range("ServiceInputQty").Value
    'Sheets("Service Invoice").Range("G" & r1).FormulaR1C1 = " =RC[-2] * RC[-1]"
End Sub[code]
[/code]
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#4

Post by snasui »

:D ลองปรับ Code ใน Worksheet_Change เป็นตามด้านล่างครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    Select Case Target.Address
        Case "$E$7"
            Call addNewItem(Target.Value)
            Range("E7").Select
            'reset qty after add id
            If Range("G7").Value > 1 Then Range("G7").Value = 1
        Case "$G$7"
            Range("F12").End(xlDown) = Range("G7") '<== Add this line
            If Target.Value < 1 Then Target.Value = 1
        Case Else:
            If Left(Target.Address, 6) = "$F$" Then
                If Target.Row >= 13 And Target.Row <= 22 Then
                    If IsEmpty(Target.Value) Then
                        Range("F" & Target.Row).ClearContents
                    End If
                End If
            End If
        
            'Debug.Print "x " & Target.Address
    End Select
End Sub
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#5

Post by kuaduang »

ปรับแล้วยังเหมือนเดิม
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#6

Post by snasui »

:lol: ด้านล่างนี้ ปรับแล้วไม่เหมือนเดิม

kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#7

Post by kuaduang »

ที่แก้ไขนั้นก็ดีแล้ว แต่ที่ต้องการคือ เมื่อเลือกชิ่อสินค้าซ้ำ จำนวนสินค้าจะเพิ่มเอง สมมุติซื้อเบียร์ลีโอแคน 1 กระป๋อง ต้องการเพิ่มอีก 1 กระป๋อง
โดยเลือกที่ E7 เป็นชื่อเบียร์ลีโอแคน ส่วนจำนวนจะเพิ่มเองคือ 1 กระป๋อง(อัตโนมัติ เพราะตั้งจำนวนไว้แล้วคือ 1 ) โปรแกรมตั้งไว้จำนวน 1 ทุกชื่อสินค้าเมื่อไม่ระบุจำนวน ใน qty จะเป็น 1 เสมอ ขอขอบคุณที่เพิ่มเติม code ให้
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#8

Post by snasui »

:D ในโอกาสหน้าก็ควรจะเขียนอธิบายเช่นที่เขียนมานี้ ไม่ใช่ให้เดาเอาเองครับ :mrgreen:

ลองปรับ Code เป็นตามด้านล่าง

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    Select Case Target.Address
        Case "$E$7"
            Call AddVal
            Range("E7").Select
            'reset qty after add id
            If Range("G7").Value > 1 Then Range("G7").Value = 1
        Case "$G$7"
            If Target.Value < 1 Then Target.Value = 1
        Case Else:
            If Left(Target.Address, 6) = "$F$" Then
                If Target.Row >= 13 And Target.Row <= 22 Then
                    If IsEmpty(Target.Value) Then
                        Range("F" & Target.Row).ClearContents
                    End If
                End If
            End If
            'Debug.Print "x " & Target.Address
    End Select
End Sub
และเพิ่ม Code ตามด้านล่าง

Code: Select all

Sub AddVal()
    Dim i As Integer, rCheck As Range
    Dim rAll As Range, rsAll As Range
    Dim id As String, l As Long
    With Sheets("DATA_ITEM")
        Set rsAll = .Range("C:C")
    End With
    With Sheets("Service Invoice")
        Set rCheck = .Range("E7")
        If Application.CountIf(rsAll, rCheck) > 0 Then
            l = Application.Match(rCheck, rsAll, 0)
            id = Sheets("DATA_ITEM").Range("B" & l)
        Else
            Call addNewItem(rCheck.Value)
        End If
        If Application.CountIf(.Range("A:A"), id) > 0 Then
            i = Application.Match(id, .Range("A:A"), 0)
            .Range("F" & i) = .Range("F" & i) + 1
        Else
            Call addNewItem(rCheck.Value)
        End If
    End With
End Sub
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#9

Post by kuaduang »

ขอขอบพระคุณมากๆ ที่ให้ตรงตามเป้าประสงค์ครับ อีกนิดหนึ่ง เวลาเลือกแถวใน sheet มันล้นไปหนึ่งแถว เช่น เลือกแถว A13-A22 มันจะไปถึง
A23 ด้วย ในโปรแกรมผมลักไก่คือ ตั้งไว้ที่ A13-A21 จะได้ A22 ด้วย ขอคุณมากๆครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#10

Post by snasui »

kuaduang wrote: เช่น เลือกแถว A13-A22 มันจะไปถึง
A23 ด้วย ในโปรแกรมผมลักไก่คือ ตั้งไว้ที่ A13-A21 จะได้ A22 ด้วย
ช่วยแจ้ง Procedure ด้วยครับว่าชื่ออะไร จะได้เข้าถึงข้อมูลได้โดยไวครับ
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#11

Post by kuaduang »

ขอบคุณครับ แจ้งลบไฟล์แนบให้ด้วยครับ
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#12

Post by kuaduang »

code ได้ตามเป้าประสงค์ครับ แต่เวลา เคลียร์บิลไม่ต้องการมัน Errer 13
i = Application.Match(id, .Range("A:A"), 0) ต้องเปลี่ยนตัวใหนด้วยดรับ
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#13

Post by kuaduang »

เวลายกเลิกบิล Run.time error "13:" Type mismatch. ต้องปรับโค๊ดตรงใหนครับ เดิมผมใช้
Range. Service CurrentID ( >=A13,<=A22)
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#14

Post by snasui »

kuaduang wrote:ขอบคุณครับ แจ้งลบไฟล์แนบให้ด้วยครับ
:D จะลบไฟล์แนบเดิมได้ ต้องส่งไฟล์ตัวอย่างใหม่มาให้ก่อน และไฟล์ตัวอย่างต้องเหมือนกับไฟล์จริง เพียงแต่เปลี่ยนข้อความสำคัญไปเป็นอย่างอื่นที่ไม่ก่อให้เกิดความเสียหายกับบุคคลหรือองค์กรที่อยู่ในไฟล์นั้นครับ โดยปกติจะไม่แนบไฟล์จริง ซึงผมได้เขียนเป็นกฎการใช้บอร์ดข้อ 4 ไว้ด้านบนครับ
kuaduang wrote: เวลายกเลิกบิล Run.time error "13:" Type mismatch. ต้องปรับโค๊ดตรงใหนครับ เดิมผมใช้
Range. Service CurrentID ( >=A13,<=A22)
การยกเลิกบิลที่ว่า มีวิธีการอย่างไร คีย์ตรงไหน คลิกปุ่มไหน Procedure ที่เกี่ยวข้องคือตัวไหน ช่วยอธิบายรายละเอียด เพื่อจะได้ช่วยทดสอบและแก้ไขให้ได้ครับ
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#15

Post by kuaduang »

จะแนบไฟล์ให้มันใหญ่เกิน เมื่อใส่ code สินค้าซ้ำเปลี่ยนจำนวนสินค้าอัตโนมัติมันใช้ได้ แต่เวลายกเลิกบิล มัน error 8iy[
จาก sheet service เลือกป้อนชื่อสินค้าตามต้องการ E7 จะได้บิลขาย 1 บิล แต่บิลผิดพลาดต้องการยกเลิก กดปุ่มยกเลิก
ตอบ Yes :roll: มันจะขึ้น error ครับ
Attachments
เอกสาร1.doc
(179.5 KiB) Downloaded 23 times
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#16

Post by kuaduang »

แนบ ภาพ 1
Attachments
แนบ1.docx
เมื่อเลือกชื่อสินค้า
(165.23 KiB) Downloaded 15 times
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#17

Post by kuaduang »

:lol: กดปุ่มยกเลิก
Attachments
แนบ2.docx
เมื่อกอปุ่มยกเลิกบิน ให้ตอบ yes or no เมื่อตอบ yes มันจะขึ้น error 13
(176.84 KiB) Downloaded 25 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#18

Post by snasui »

:D ปรับ Code ที่ Sub CancelBill เป็นตามด้านล่างครับ

Code: Select all

Public Sub CancelBill()
    Application.EnableEvents = False
    Debug.Print "Cancelbill"
    
    If MsgBox("ต้องการยกเลิกบิลที่กำลังทำงานอยู่", vbQuestion + vbYesNo + vbDefaultButton2, "ขายหน้าร้าน") = vbYes Then
        Range("ServiceCurrentID").ClearContents
        Range("ServiceCurrentQty").ClearContents
        Range("ServiceInputID").ClearContents
        Range("$G$24").ClearContents
        Range("ServiceInputID").Select
        
    End If
    Application.EnableEvents = True
End Sub
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#19

Post by kuaduang »

ใช้ได้แล้วครับ ไปต่างจังหวัดเสียหลายวัน แต่มันยังมีปัญหาอยู่อีกนิดหนึ่งครับ เมื่อบันทึกบิลเรียบร้อยแล้ว จะขึ้นบิลใหม่มันไม่ยอมทำงานอีก คือ พอเราจบบิลการขายครั้งหนึ่งมีการบันทึกบิลเก็บเอาไว้ โดยกด บันทึก เป็นอันว่าเสร็จการขาย 1 บิล ตอนนี้ขายต่อ กด ป้อนรหัสลูกค้าเสร็จ ไปเลือกรายการสินค้า กด E7 ปกติ รหัสสินค้า A13 จะขึ้นมาให้ แต่พอใส่ code ที่ให้มามันไม่มีรหัสสินค้า(ไม่ยอมทำงาน) ต้องไปกด ยกเลิกบิลก่อนจึงกลัมมาเลือกรายการสินค้าได้อัก แต่ที่ต้องการคือ เมื่อบันทึกเสร็จเริ่มบิลใหม่ได้เลยโดยไม่ต้องกลับไปยกเลิกบิลอีกครั้ง ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: code vba excel หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#20

Post by snasui »

:D ลองแนบไฟล์ที่ Update ล่าสุดมาดูกันครับ
Post Reply