: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

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

#21

Post by kuaduang »

แนบไฟส์มาให้ช่วยตรวจความถูกต้องให้ด้วย
โปรแกรมร้านค้า.xlsm
ออกบิลเสร็จ กดบันทึก เป็นเสร็จ 1 บิล จะเริ่มบิลใหม่ เลือก E7 กดเลือกชื่อสินค้าที่ต้องการ มันไม่ทำงาน ต้องไปยกเลิกบิลก่อนแล้ว กด E7 จึงจะทำงาน ขอบคุณครับ
(64.52 KiB) Downloaded 27 times
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

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

#22

Post by kuaduang »

:shock: ขอเพิ่มอีกนิดหนึ่ง ต้องการ ให้เลขที่บิล ขึ้นอัตโนมัติเมื่อมีการขายไปแต่ละบิลที่ G3 ต้องเพิ่ม code vba หรือ ใช้ฟังก์ชั้น
รบกวนแค่นี้ครับ ขอบคุณครับ :flw:
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 หาจำนวนสินค้า เมื่อรหัสสินค้าซ้ำ

#23

Post by snasui »

:D ที่ Procedure มีการ Disable Event เอาไว้ ดังนั้น ในทุก ๆ Exit Sub ที่เขียนใน Code ควรจะ Enable Event กลับมาเหมือนเดิม

Code: Select all

Public Sub SaveBill()
    Application.EnableEvents = False
    Debug.Print "Savebill"

    Dim ServiceCurrentID As Range
    Set ServiceCurrentID = Range("ServiceCurrentID")
    Dim ServiceCurrentQty As Range
    Set ServiceCurrentQty = Range("ServiceCurrentQty")
    
    Dim r As Long
    Dim id As String
    Dim header As String
    Dim recs As New Collection
    Dim rec As Variant
    Dim currentRow As Long, VATValue As Double, subTotal As Double, grandTotal As Double
    
    Dim printHeader As New ReceiPtHeader
    Dim printDetails As New Collection
    
    printHeader.billDate = Now()
    printHeader.customer = Range("ServiceCodeCus").Value
    header = addCSV(Format(printHeader.billDate, "yyyy/mm/dd h:mm:ss"))
    header = header & addCSV(printHeader.customer, True)
           
    
    Dim Code_Data As Range
    Dim ItemCost As Range
    Set Code_Data = Range("Code_Data")
    Set ItemCost = Range("ItemCost")
    
    Dim itemRec As ReceiptDetail
    For r = 1 To ServiceCurrentID.Count
        id = Trim(ServiceCurrentID.Cells(r, 1).Value)
        currentRow = ServiceCurrentID.Cells(r, 1).Row
        If id <> "" And ServiceCurrentQty.Cells(r, 1).Value > 0 Then
            'save record
            Set itemRec = New ReceiptDetail
            
            'id, title, qty, price, sub total, vat, grand total,cost
            With itemRec
                .itemID = id
                .title = Sheets("Service Invoice").Range("B" & currentRow).Value
                .qty = Sheets("Service Invoice").Range("F" & currentRow).Value
                .price = Sheets("Service Invoice").Range("E" & currentRow).Value
                .total = Sheets("Service Invoice").Range("G" & currentRow).Value
                
                rec = addCSV(.itemID, True, True)
                rec = rec & addCSV(.title, True)
                rec = rec & addCSV(.qty, True)
                rec = rec & addCSV(.price, True)
                rec = rec & addCSV(.total, True)
                subTotal = .total
                     
            End With
            
            Call printDetails.Add(itemRec)
            Call recs.Add(rec)
        End If
    Next r
    
    If recs.Count = 0 Then
        MsgBox "ไม่พบรายการขาย โปรดตรวจสอบอีกครั้ง", vbExclamation, "หน้าร้าน"
        Application.EnableEvents = True
        Exit Sub
    End If
    
    
    'save file to folder
    Dim targetFolder As String
    Dim resultFilename As String 'ขายหน้าร้าน_yyyy-mm.xlsx
    targetFolder = ActiveWorkbook.Path & "\data"
    resultFilename = targetFolder & "\b" & "ill" & "ขายหน้าร้าน_" & Format(Now(), "yyyy-mm") & ".csv"
    
    'check folder exist
    On Error GoTo saveError2
    Call ChDir(targetFolder)
    On Error GoTo saveError3
    Call ChDir(targetFolder)
    
    On Error GoTo 0
    'get current bill id
    Dim readLine As String
    Dim BillID As Long
    Open (targetFolder & "\ขายหน้าร้าน_id.txt") For Input As #1
    Line Input #1, readLine
    Close
    BillID = Val(readLine)
    saveBillID = BillID
    header = BillID & "," & header
    
    
    If Dir(resultFilename) = "" Then
        Open resultFilename For Output As #1
        Print #1, "บิลหมายเลข,วันที่,ลูกค้า,รหัสสินค้า,รายละเอียด,จำนวน,ราคา,รวมเป็นเงิน,VAT,รวมสุทธิ,ต้นทุน"
        Close #1
    End If

    Dim lineString As String
    Open resultFilename For Append As #1
    For Each rec In recs
        lineString = header & rec
        Print #1, lineString
    Next rec
    Close #1
    
    'add new id
    BillID = BillID + 1
    Open (targetFolder & "\ขายหน้าร้าน_id.txt") For Output As #1
    Print #1, BillID
    Close
    
    Range("ServiceCodeCus").Value = ""
    Range("ServiceCurrentID").ClearContents
    Range("ServiceCurrentQty").ClearContents
    Range("ServiceInputID").ClearContents
    Range("$G$24").ClearContents
    Range("ServiceInputID").Select
   
    Beep
    
    'print receipt
    Call PrintReceipt(printHeader, printDetails)
    
    'show form and exit
    frmStatus.Show
    Application.EnableEvents = True
    Exit Sub
    
    
saveError2:
    'create resultFolder
    Call MkDir(targetFolder)
    'create id file
    Open (targetFolder & "\ขายหน้าร้าน_id.txt") For Output As #1
    Print #1, "1"
    Close #1
    Resume Next
    
saveError3:
    MsgBox "ไม่สามารถเปิดโฟลเดอร์ " & targetFolder & " เพื่อบันทึกไฟล์ได้" & "โปรดตรวจสอบและบันทึกไฟล์ด้วยตัวท่านเอง", vbExclamation, "บิล" & ขายหน้าร้าน
    Application.EnableEvents = True
    Exit Sub

End Sub
กรณีต้องกรณีต้องการให้แสดงเลขที่ Invoice ในลำดับถัดไป ลองปรับ Code ที่ UserForm_Activate ตามด้านล่างครับ

Code: Select all

Private Sub UserForm_Activate()
    BillID.Caption = saveBillID
    Range("G4") = saveBillID + 1
End Sub
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

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

#24

Post by kuaduang »

:lol: หาสาเหตุเจอพอดี ขอบคุณครับ การป้องกันแผ่นงาน :( เผื่อไปลบโดยบังเอิญ ป้องกันแล้ว ปุ่มบันทึก ปุ่มยกเลิกใช้ไม่ได้
kuaduang
Member
Member
Posts: 17
Joined: Fri Oct 05, 2012 1:52 pm

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

#25

Post by kuaduang »

ไฟส์สำเร็จรูปลองให้สมาชิกนำไปทดลองใช้งานดู ขัดข้อง ผิดพลาด เชิญที่ kuaduang_t@hotmail.com :roll: ครับ
Attachments
บิลหน้าร้าน.xlsm
(114.24 KiB) Downloaded 32 times
Post Reply