ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 8189|ตอบกลับ: 1

[VB6] แจกฟรีโค้ดการพิมพ์ใบเสร็จรับเงินด้วย VB6 + FarPoint ออกทาง MS Excel

[คัดลอกลิงก์]

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583



บทความนี้แอดมินได้เขียนแจกโค้ดไปตั้งแต่ปี 2555 วันนี้เอามารีรันใหม่ เป็นการทำใบเสร็จรับเงิน ด้วยการใช้ VB6 เป็นส่วนของการรับอินพุทข้อมูล ทำการกรอกข้อมูลรายละเอียดสินค้าเข้าไปในตารางกริดของ FarPoint Spread ที่มีลักษณะเหมือน Excel จากนั้นส่งข้อมูลต่างๆออกไปยัง MS Excel โดยการคัดลอกรูปแบบ Sheet ต้นฉบับ แล้วทำการสร้างชีตขึ้นมาใหม่ แล้วก็นำเอาข้อมูลต่างๆที่อยู่บนฟอร์มของ VB6 ไปใส่ไว้ในตารางของ Excel ในช่องที่เรากำหนดไว้ล่วงหน้า ... การทำแบบนี้เราจึงไม่ต้องพึ่งพวก Component ในการทำรายงานเลย ...

ดาวน์โหลด FarPoint Spread ActiveX จากผู้ผลิต ...
ดาวน์โหลด FarPoint Spread ActiveX ... (เฉพาะสมาชิกเท่านั้น)

การเลือก FarPoint Spread ActiveX


Project --> Components ...


มาดูโค้ดกันเถอะ ...
  1. ' / --------------------------------------------------------------------------------
  2. ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
  3. ' / eMail : thongkorn@hotmail.com
  4. ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
  5. ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
  6. ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
  7. ' / MORE: http://www.g2gnet.com/webboard
  8. ' /
  9. ' / Purpose: Print receipt via Excel with VB6.
  10. ' / Microsoft Visual Basic 6.0 (SP6)
  11. ' /
  12. ' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
  13. ' / You can modify and/or distribute without to inform the developer.
  14. ' / --------------------------------------------------------------------------------

  15. Option Explicit

  16. ' / --------------------------------------------------------------------------------
  17. ' / โปรแกรมย่อยที่กำหนดค่าคุณสมบัติ (Properties) ต่างๆ ให้กับ Spread
  18. Sub SetupSpread()
  19. ' / --------------------------------------------------------------------------------
  20.     ' แสดงแถบแสงหรือไม่แสดง
  21.     FpSpread1.OperationMode = OperationModeNormal   ' เอาไว้ป้อนข้อมูล
  22.     'fpSpread1.OperationMode = OperationModeSingle    ' แถบ Selection
  23.     'fpSpread.OperationMode = OperationModeRead     ' ไม่มีแถบ
  24.     'fpSpread.OperationMode = OperationModeRow
  25.    
  26.     ' สามารถจัดเรียง หรือ Sort Order บนหัวคอลัมภ์ได้
  27.     FpSpread1.UserColAction = UserColActionSort
  28.    
  29.     ' ปรับหน่วยวัด
  30.     'fpSpread1.UnitType = UnitTypeNormal
  31.     'fpSpread1.UnitType = UnitTypeTwips
  32.     'FpSpread1.UnitType = UnitTypeVGABase
  33.    
  34.     ' การปรับความสูงของแถวทุกๆแถว (ค่า -1 หมายถึงทุกแถวครับ)
  35.     FpSpread1.RowHeight(-1) = 18    ' หน่วยวัด Point
  36.     FpSpread1.Appearance = Appearance3D
  37.    
  38.     ' เวลากด F2 เพื่อแก้ไขข้อมูลในแต่ละเซลล ์ให้เลือกข้อมูลทั้งหมด หรือสามารถเริ่มคีย์ค่าใหม่ได้ทันที
  39.     FpSpread1.EditModeReplace = True
  40.    
  41.     ' ส่วนตัวอื่นๆ
  42.     With FpSpread1
  43.         ' หลักแรก คือ หลักที่ 0 ... จะเป็นการแสดงหมายเลขแถว เพื่ออ้างอิงในลักษณะ Excel เช่น
  44.         .SetText 1, 0, "PK"
  45.         .SetText 2, 0, "รหัสสินค้า"
  46.         .SetText 3, 0, "รายละเอียด"
  47.         .SetText 4, 0, "หน่วยละ"
  48.         .SetText 5, 0, "จำนวน"
  49.         .SetText 6, 0, "รวมจำนวนเงิน"
  50.         
  51.         ' จำนวนหลักทั้งหมด
  52.         .MaxCols = 6
  53.         ' จำนวนแถวสูงสุด 17 แถว (ผมนับจากใน MS Excel)
  54.         .MaxRows = 17
  55.         
  56.         ' อย่าลืมเอา Primary Key ไปซ่อนไว้ไม่ให้ผู้ใช้งานเห็นด้วย ... ผู้ใช้งานจะได้ไม่สับสน
  57.         .ColWidth(1) = 0
  58.         ' จัดระยะความกว้างเอง หน่วยนับเหมือนใน .NET
  59.         '.ColWidth(2) = 15
  60.         '.ColWidth(3) = 15
  61.         '.ColWidth(4) = 15
  62.         '.ColWidth(5) = 12
  63.         '.ColWidth(6) = 15
  64.         
  65.         ' กำหนดคุณสมบัติต่างๆของแต่ละหลักแบบ Run Time
  66.         .Col = 2
  67.         .TypeTextWordWrap = True
  68.         .TypeVAlign = TypeVAlignCenter
  69.         .Col = 3
  70.         .TypeTextWordWrap = True
  71.         .TypeVAlign = TypeVAlignCenter
  72.         
  73.         .Col = 4
  74.         ' การจัดตำแหน่งแนวนอน
  75.         .TypeHAlign = TypeHAlignRight
  76.         ' การจัดตำแหน่งแนวตั้ง
  77.         .TypeVAlign = TypeVAlignCenter
  78.         ' กำหนดการป้อนค่าตัวเลขจำนวนเงินเท่านั้น
  79.         .CellType = CellTypeCurrency
  80.         ' ตามหลังจุศนิยม
  81.         .TypeNumberDecPlaces = 2
  82.         ' ไม้แสดงสัญลักษณ์ตัวเงิน
  83.         .TypeCurrencyShowSymbol = False
  84.         
  85.         .Col = 5
  86.         ' การจัดตำแหน่ง
  87.         .TypeHAlign = TypeHAlignRight
  88.         .TypeVAlign = TypeVAlignCenter
  89.         .CellType = CellTypeNumber
  90.         .TypeNumberDecPlaces = 0
  91.         .TypeCurrencyShowSymbol = False
  92.         
  93.         .Col = 6
  94.         ' ล็อคการคีย์ข้อมูล
  95.         .Lock = True
  96.         .TypeHAlign = TypeHAlignRight
  97.         .TypeVAlign = TypeVAlignCenter
  98.         .CellType = CellTypeCurrency
  99.         .TypeCurrencyShowSymbol = False
  100.         ' จุดทศนิยม 2 ตัว
  101.         .TypeNumberDecPlaces = 2
  102.         ' แสดงเครื่องหมายคอมม่า (,)
  103.         .TypeCurrencyShowSep = True
  104.    
  105.     End With
  106.    
  107. End Sub

  108. ' / --------------------------------------------------------------------------------
  109. ' / โปรแกรมย่อยเคลียร์ค่าต่างๆในฟอร์มใหม่
  110. Sub SetupScreen()
  111. ' / --------------------------------------------------------------------------------
  112.     txtInvoiceNumber.Text = ""
  113.     txtCustomerName.Text = ""
  114.     txtAddress.Text = ""
  115.     txtAmphur.Text = ""
  116.     txtProvinceName.Text = ""
  117.     txtPostCode.Text = ""
  118.     txtTelephone.Text = ""
  119.     txtFacsimile.Text = ""
  120.     txtTotalAmount.Text = "0.00"
  121.     txtInvBook.Text = ""
  122.     txtInvNumber.Text = ""
  123.    
  124.     ' หรือเคลียร์ค่าใน TextBox Control แบบ Dynamic
  125.     'Dim Ctl As Control
  126.     'For Each Ctl In Me.Controls
  127.     '    If TypeOf Ctl Is TextBox Then Ctl.Text = ""
  128.     'Next
  129.    
  130. End Sub

  131. ' / --------------------------------------------------------------------------------
  132. ' / ข้อมูลทดสอบ เพราะขี้เกียจพิมพ์ใหม่ทุกครั้ง 55555+
  133. Sub DemoData()
  134. ' / --------------------------------------------------------------------------------
  135.     'FpSpread1.ActiveSheet
  136.     ' ใส่ข้อมูลทดสอบ
  137.     With FpSpread1
  138.             .Row = 1
  139.             '.ActiveSheet.Cells(1, 1) = 1
  140.             '.ActiveSheet.Cells(1, 2) = "8851234567890"
  141.             .Col = 1: .Text = 1
  142.             .Col = 2: .Text = "8851234567890"
  143.             .Col = 3: .Text = "คู่มือการเมาอย่างถูกต้อง"
  144.             .Col = 4: .Text = "599.00"
  145.             .Col = 5: .Text = "10"
  146.             .Col = 6: .Text = "5990.00"
  147.             .Row = 2
  148.             .Col = 1: .Text = 2
  149.             .Col = 2: .Text = "8850987654321"
  150.             .Col = 3: .Text = "CD หนัง X เพื่อการศึกษา"
  151.             .Col = 4: .Text = "999.00"
  152.             .Col = 5: .Text = "10"
  153.             .Col = 6: .Text = "9990.00"
  154.             .Row = 3
  155.             .Col = 1: .Text = 3
  156.             .Col = 2: .Text = "8850123456789"
  157.             .Col = 3: .Text = "หนังสือดี"
  158.             .Col = 4: .Text = "100.00"
  159.             .Col = 5: .Text = "20"
  160.             .Col = 6: .Text = "2000.00"
  161.     End With
  162.    
  163. End Sub

  164. ' / --------------------------------------------------------------------------------
  165. ' / โปรแกรมย่อยเพื่อเคลียร์ค่าต่างๆใหม่หมด
  166. Private Sub cmdClear_Click()
  167. ' / --------------------------------------------------------------------------------
  168.     ' เคลียร์ข้อมูลใน TextBox Control ทั้งหมด
  169.     Call SetupScreen
  170.     ' ลบแถวออกทั้งหมดเริ่มจากแถวที่ 1 ถึง 17
  171.     FpSpread1.DeleteRows 1, 17

  172. End Sub

  173. Private Sub cmdExit_Click()
  174.     Unload Me
  175. End Sub

  176. ' / --------------------------------------------------------------------------------
  177. ' / โปรแกรมย่อยในการส่งข้อมูลทั้งในตาราง FarPoint หรือบนฟอร์มไปให้กับ MS Excel
  178. Private Sub cmdPrint2Excel_Click()
  179. ' / --------------------------------------------------------------------------------
  180.     On Error GoTo ErrorHandler
  181.    
  182.     ' ประกาศตัวแปรใช้งาน Excel Object (Application)
  183.     Dim ExcelApp  As New Excel.Application
  184.    
  185.     ' ประกาศตัวแปรใช้งาน WorkSheet ของ ExcelApp Object
  186.     Dim ExcelSheet As New Excel.Worksheet
  187.    
  188.     ' ประกาศตัวแปรใช้งาน WorkBook ของ ExcelApp Object
  189.     Dim ExcelBook As New Excel.Workbook

  190.     ' สร้าง Excel Object ขึ้นมาใช้งาน ในชื่อ ExcelApp
  191.     Set ExcelApp = CreateObject("Excel.Application")
  192.     'Set ExcelApp = New Excel.Application

  193.     ' เปิด WorkBook เดิม ก็ใช้ Open Method ตามด้วยไฟล์ที่ต้องการเอาครับ
  194.     Set ExcelBook = ExcelApp.Workbooks.Open(App.Path & "\ReceiptG2GNet.xls")
  195.     ' / --------------------------------------------------------------------------------
  196.     ' การคัดลอก Sheet ต้นแบบ (Sheet1) ไปยัง Sheet ตัวใหม่ก่อน ... มันจะตั้งค่าสำเนาให้อัตโนมัติ
  197.     ' เช่น Sheet(1), Sheet(2) ... มันมาจากการกำหนดค่าด้วย ExcelBook.Worksheets.Count
  198.     ' ซึ่งมันจะไปต่อท้าย Sheet ล่าสุดที่มีอยู่ เพราะเราสั่งด้วย After (หากอยากให้ไปอยู่ข้างหน้า ก็ใช้ Before แทน)
  199.     ' การสั่งแบบนี้หมายถึงให้คัดลอกทั้ง Sheet ไม่ว่าจะเป็นข้อมูล กล่องข้อความ ภาพ Shape และอื่นๆ ... มันก็จะไปหมดเลย
  200.     ExcelBook.Worksheets(1).Copy After:=ExcelBook.Worksheets(ExcelBook.Worksheets.Count)
  201.     ' หรืออ้างถึงชื่อ Sheet โดยตรงก็ได้ ... แต่ต้องอ้างถึงชื่อ Sheet ให้ถูกล่ะกันครับ
  202.     ' ExcelBook.Worksheets("Sheet1").Copy After:=ExcelBook.Worksheets(ExcelBook.Worksheets.Count)
  203.     ' / --------------------------------------------------------------------------------
  204.    
  205.     ' หรือ หากต้องการเปลี่ยนชื่อ Sheet เช่น เอาวันที่ + เวลา มาผสมกัน ... ก็ทำได้โดยใช้ Name Method
  206.     ' Sheets(ExcelBook.Worksheets.Count).Name = Format(Now(), "ddmmyyyy") & _
  207.                 "-" & Format(Now(), "hhmmss")
  208.    
  209.     ' กำหนดให้ใช้งาน Sheet ปัจจุบัน (ไม่ใช้งานก็ได้ มันไปที่ Sheet ใหม่อยู่แล้วครับ)
  210.     Set ExcelSheet = ExcelApp.Workbooks.Application.ActiveSheet

  211.     Dim fpRow As Integer   ' เริ่มต้นการอ่านข้อมูลแถวแรกในตารางกริด
  212.     Dim xlsRow As Integer    ' เริ่มต้นแถวแรกที่เก็บข้อมูลใน MS Excel

  213.     ' กำหนดตำแหน่งส่งข้อมูลไป Excel โดยจะเริ่มต้นรับข้อมูลจากแถวที่ 13 และ หลักที่ 1 (A13)
  214.     ' คือเราสามารถอ้างอิงถึงได้ทั้งแถว หลัก หรือ Cell ตำแหน่งนั้นๆเลย หรือ จะใช้ Range แทนก็ได้
  215.     ' แถว/หลักแรกที่กำหนด อันนี้ก็ต้องขึ้นอยู่กับรูปแบบฟอร์มที่เราออกแบบเองด้วยน่ะขอรับ ...
  216.     xlsRow = 13
  217.    
  218.     ' เริ่มต้นแถวที่ 1 ไปตามจำนวนแถวทั้งหมดของ FarPoint
  219.     For fpRow = 1 To FpSpread1.MaxRows
  220.          With FpSpread1
  221.             
  222.             ' รหัสสินค้า (ใส่เครื่องหมาย Single Quote เพื่อป้องกันรหัสสินค้าที่นำหน้าด้วย 0)
  223.             .Col = 2: .Row = fpRow
  224.             ExcelApp.Cells(xlsRow, 1) = CStr("'" & .Text)
  225.             
  226.             ' ชื่อสินค้า
  227.             .Col = 3
  228.             ExcelApp.Cells(xlsRow, 2) = "" & .Text
  229.             
  230.             ' การจัดรูปแบบการแสดงผลตัวเลข เช่น 1,250.00 ผมจัดเอาไว้อยู่ใน Excel เองน่ะครับ
  231.             ' ราคาต่อหน่วย
  232.             .Col = 4
  233.             ExcelApp.Cells(xlsRow, 3) = "" & .Text
  234.             ' จำนวน
  235.             .Col = 5
  236.             ExcelApp.Cells(xlsRow, 4) = "" & .Text
  237.             ' รวมจำนวนเงิน
  238.             .Col = 6
  239.             ExcelApp.Cells(xlsRow, 5) = "" & .Text
  240.             
  241.             ' เพิ่มจำนวนแถวใน Excel ขึ้นอีก 1
  242.             xlsRow = xlsRow + 1
  243.             ' เทคนิค ... ความเป็นจริงเราสามารถลดการใช้งานตัวแปร xlsRow ออกไปก็ได้
  244.             ' เรารู้ว่า fpRow เริ่มต้นที่ 1 ... เรารู้ว่าใน Excel ต้องเริ่มต้นรับข้อมูลในแถวที่ 13 (ต่างกัน 12)
  245.             ' ดังนั้นปลด xlsRow ออกไป แล้วให้ใช้ fpRow + 12 แทนยังไงล่ะครับ ... พี่น้อง ม่วนหลายๆ
  246.             ' แต่ที่ผมทำตัวอย่างออกมาก็เพื่อไม่อยากให้มือใหม่ๆได้งง จะได้อ่านโค้ดง่ายขึ้นครับ
  247.         End With
  248.     Next
  249.    
  250.     ' นำรายละเอียดต่างๆไปแสดงผลใน Excel คือชื่อลูกค้า (แถวที่ 6 หลักที่ 1 หรือเซลล์ A6)
  251.     ExcelApp.Cells(6, 1) = "" & "ชื่อลูกค้า: " & Trim(txtCustomerName.Text)
  252.    
  253.     ' ที่อยู่ลูกค้า แถวที่ 7 หลักที่ 1 หรือเซลล์ A7
  254.     ExcelApp.Cells(7, 1) = "" & "ที่อยู่: " & Trim(txtAddress.Text) & vbCrLf & _
  255.                 Trim$(txtAmphur.Text) & "  " & Trim$(txtProvinceName.Text) & "  " & _
  256.                 Trim$(txtPostCode.Text) & vbCrLf & _
  257.                 "โทร. " & Trim$(txtTelephone.Text)
  258.     ' วันที่ แสดงผลแถวที่ 6 หลักที่ 3 หรือเซลล์ C6
  259.     ExcelApp.Cells(6, 3) = "วันที่ " & Format(Now(), "dd/mm/yyyy")
  260.    
  261.     ' ใบเสร็จเลขที่/เล่มที่/เลขที่
  262.     If Trim(txtInvoiceNumber.Text) <> "" Or Len(Trim$(txtInvoiceNumber.Text)) <> 0 Then _
  263.         ExcelApp.Cells(1, 4) = "ใบเสร็จเลขที่ " & Trim(txtInvoiceNumber.Text)
  264.     If Trim(txtInvBook.Text) <> "" Or Len(Trim$(txtInvBook.Text)) <> 0 Then _
  265.         ExcelApp.Cells(2, 4) = "เล่มที่ " & Trim(txtInvBook.Text)
  266.     If Trim(txtInvNumber.Text) <> "" Or Len(Trim$(txtInvNumber.Text)) <> 0 Then _
  267.         ExcelApp.Cells(3, 4) = "เล่มที่ " & Trim(txtInvNumber.Text)
  268.    
  269.     ' แสดงผลโปรแกรม Excel ขึ้นมาให้ User มองเห็น
  270.     ExcelApp.Visible = True
  271.     ' บันทึกข้อมูลทับไฟล์เดิมแบบอัติโนมัติทันที แต่เพิ่ม Sheet ใหม่
  272.     ExcelBook.Save
  273.    
  274.     ' / --------------------------------------------------------------------------------
  275.     ' / การบันทึกไฟล์มีหลาย Option มากมายให้เลือก คงต้องไปลองศึกษาเพิ่มเติมกันเองน่ะครับ
  276.     ' / --------------------------------------------------------------------------------
  277.    
  278.     ' / --------------------------------------------------------------------------------
  279.     ' กรณีที่ต้องการบันทึกไฟล์ใหม่ เราจะบังคับตั้งชื่อไฟล์ให้เอง
  280.     'Dim FileXLS1 As String
  281.     'FileXLS1 = "\Receipt" & Format(Date, "ddmmyyyy") & "-" & Format(Time, "hhmmss") & ".xls"
  282.     ' บันทึกชื่อไฟล์ใหม่ เป็นชื่อไฟล์วันที่เวลา เช่น Receipt03042555-123015
  283.     'ExcelBook.SaveAs (App.Path & FileXLS1)
  284.     'ExcelBook.Close False, (App.Path & FileXLS1)
  285.     ' / --------------------------------------------------------------------------------
  286.    
  287.     ' / --------------------------------------------------------------------------------
  288.     ' กรณีที่ต้องการบันทึกไฟล์ใหม่ แต่เลือกบันทึกชื่อไฟล์ใหม่ได้
  289.     'Dim FileXLS2 As Variant
  290.     'FileXLS2 = ExcelApp.Application.GetSaveAsFilename( _
  291.         FileFilter:="Excel Files, *.xls, All Files, *.*", _
  292.         Title:="[Save As - บันทึกชื่อไฟล์ใหม่")
  293.     ' หากมีการกดปุ่ม Cancel เพื่อยกเลิก
  294.     'If FileXLS2 = False Then Exit Sub
  295.    
  296.     'If LCase$(Right$(FileXLS2, 4)) <> ".xls" Then FileXLS2 = FileXLS2 & ".xls"
  297.    
  298.     ' บันทึกไฟล์ในชื่อใหม่
  299.     'ExcelApp.ActiveWorkbook.SaveAs FileName:=FileXLS2
  300.     ' หาก Save ไฟล์ใหม่แบบนี้ ควรปิดการแสดงผลของ Excel ก่อน นั่นคือจากบรรทัดด้านบน
  301.     ' ควรกำหนดให้ ExcelApp.Visible = Fale เพื่อไม่ให้ Excel แสดงขึ้นมา
  302.     ' หรือลงไปบรรทัดข้างล่างกำหนดให้ปิด Excel คือ Excel.Application.Quit ออกไปเลย
  303.     ' / --------------------------------------------------------------------------------

  304.     ' ล้างให้ออก ... จาก Memory ของฉัน ... 55555+
  305.     Set ExcelSheet = Nothing:    Set ExcelBook = Nothing
  306.     ' หรือต้องการปิดโปรแกรม Excel ไปเลย
  307.     'ExcelApp.Application.Quit
  308.    
  309.     Set ExcelApp = Nothing
  310.    
  311. ExitProc:
  312.     ' แม้ว่าจะสั่งปิดโปรแกรม Excel ออกไปแล้วแต่มันยังค้างอยู่ (ไปดูที่ Process น่ะครับ)
  313.     ' ดังนั้นสั่งผ่าน Shell เพื่อ Kill Process ของ Excel ก่อน (/F = Force คือบังคับมันเลย)
  314.     'Shell "TaskKill /F /IM Excel.exe"
  315.     Exit Sub
  316.    
  317. ErrorHandler:
  318.    
  319.     ' ขณะโปรแกรมกำลังทำงาน (Run Time) ดัก Error จาก On Error GoTo ErrorHandler
  320.     Select Case Err.Number
  321.         Case 462:
  322.             MsgBox "กรุณาจบการทำงานของโปรแกรมก่อนที่จะบันทึกไฟล์ Excel อีกครั้ง", _
  323.                 vbOKOnly + vbExclamation, "รายงานความผิดพลาด"
  324.         Case Else
  325.             MsgBox "ความผิดพลาด: " & vbCrLf & Err.Number & vbCrLf & Err.Description
  326.     End Select
  327.     ' ปกติให้ออกจากโปรแกรมจากจุดนี้ได้เลย แต่ที่ให้กระโดดกลับไปก็เพราะเผื่อมีงานอื่นที่ต้องทำก่อนจบการทำงาน
  328.     Resume ExitProc

  329. End Sub

  330. ' / --------------------------------------------------------------------------------
  331. ' / จะใช้งานการกด KeyDown เช่นพวกปุ่มฟังค์ชั่นต่างๆได้
  332. ' / จะต้องกำหนดให้คุณสมบัติของฟอร์ม KeyPreview = True ก่อนด้วย
  333. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  334. ' / --------------------------------------------------------------------------------
  335.     Select Case KeyCode
  336.         
  337.         Case vbKeyF1: 'MsgBox "No help now."
  338.         Case vbKeyF6: Call cmdPrint2Excel_Click
  339.         Case vbKeyF10: Unload Me
  340.    
  341.    End Select
  342. End Sub

  343. ' / --------------------------------------------------------------------------------
  344. ' / เริ่มต้นการทำงาน
  345. Private Sub Form_Load()
  346. ' / --------------------------------------------------------------------------------
  347.     ' ป้องกันการเรียกใช้โปรแกรมซ้อนกัน
  348.     If App.PrevInstance Then End
  349.    
  350.     ' จัดฟอร์มอยู่กึ่งกลางหน้าจอ
  351.     Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
  352.    
  353.     Call SetupScreen
  354.     ' หรือกำหนดค่าทดสอบเอง (ขี้เกียจพิมพ์ตอนสั่งรัน 5555+)
  355.     txtInvoiceNumber.Text = "INV55-000001"
  356.     txtCustomerName.Text = "บุญห่อ พ่อรวย"
  357.     txtAddress.Text = "999 ม.1 ซอย 39 ถ.กลางเมือง ต.ในเมือง"
  358.     txtAmphur.Text = "เมืองขอนแก่น"
  359.     txtProvinceName.Text = "ขอนแก่น"
  360.     txtPostCode.Text = "40000"
  361.     txtTelephone.Text = "08-9999-9999"
  362.     txtFacsimile.Text = "043-999999"
  363.     txtTotalAmount.Text = "0.00"
  364.     txtInvBook.Text = "123456789"
  365.     txtInvNumber.Text = "99999"
  366.    
  367.     ' ตั้งค่าเริ่มต้นให้กับ Spread
  368.     Call SetupSpread
  369.     ' โหลดข้อมูลทดสอบ
  370.     Call DemoData
  371.     ' คำนวณจำนวนเงินทั้งหมด
  372.     Call CalTotalRow(1)

  373. End Sub

  374. ' / --------------------------------------------------------------------------------
  375. Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  376. ' / --------------------------------------------------------------------------------
  377.     On Error Resume Next
  378.     Dim Msg As String, Response%   ' Declare variables.
  379.     Msg = "คุณแน่ใจว่าต้องการจบการทำงานของโปรแกรม ?"
  380.     Response = MsgBox(Msg, vbQuestion + vbOKCancel + vbDefaultButton2, "ยืนยันการจบรายการ")
  381.     Select Case Response
  382.        Case vbCancel   ' Don't Allow close.
  383.           Cancel = -1
  384.       
  385.        Case vbOK
  386.             ' ลบไฟล์ขยะพวก Temporary ออกก่อนจบโปรแกรม
  387.             If Dir$(App.Path & "\*.tmp") <> "" Then Kill App.Path & "\*.tmp"
  388.             Set frmFarPoint2Excel = Nothing
  389.             End
  390.        'Case vbNo
  391.     End Select
  392. End Sub

  393. Private Sub fpSpread1_Change(ByVal Col As Long, ByVal Row As Long)
  394.     Select Case FpSpread1.ActiveCol
  395.         ' หลักที่ 4 (หน่วยละ) - 5 (จำนวน)
  396.         Case 4, 5
  397.             Call CalTotalRow(Row)
  398.    
  399.     End Select
  400. End Sub

  401. ' / --------------------------------------------------------------------------------
  402. ' / โปรแกรมย่อยคำนวณหาราคา x จำนวนในทุกๆแถวของตารางกริด (FarPoint)
  403. ' / หากเกิดค่าเปลี่ยนแปลงในหลักที่ 4 และหลักที่ 5 จะมาคำนวณผลต่างๆที่นี่
  404. Sub CalTotalRow(ByVal sRow As Long)
  405. ' / --------------------------------------------------------------------------------
  406.    
  407.     Dim UnitPrice As Currency
  408.     Dim Amount As Integer
  409.     Dim i As Byte
  410.     Dim sSum As Currency
  411.    
  412.     With FpSpread1
  413.         ' รับค่าแถวปัจจุบัน
  414.         .Row = sRow
  415.         
  416.         ' เก็บค่าในหลักที่ 4 ไว้ในตัวแปร
  417.         .Col = 4
  418.         ' .Text คือข้อมูลในเซลล์นั้นๆ เช่น จากหลักที่ 4 และแถวตามตัวแปร sRow ที่ถูกส่งมาจากเหตุการณ์ fpSpread1_Change
  419.         UnitPrice = Format(.Text, "0.00")
  420.         
  421.         ' เก็บค่าในหลักที่ 5 ไว้ในตัวแปร
  422.         .Col = 5
  423.         Amount = Val(.Text)
  424.         
  425.         ' นำค่าในหลักที่ 4 (ราคาต่อหน่วย) คูณกับหลักที่ 5 (จำนวนสินค้า) ผลลัพธ์เก็บในหลักที่ 6 (จำนวนเงิน)
  426.         .Col = 6
  427.         .Text = Format(UnitPrice * Amount, "#,##0.00")
  428.         ' รวมจำนวนเงินทั้งหมด ตั้งแต่แถวที่ 1 ไปถึงแถวที่ 17 ของ Spread (FarPoint)
  429.         For i = 1 To .MaxRows
  430.             ' ไล่ไปทีละแถว
  431.             .Row = i
  432.             ' ถ้าหลักที่ 6 ไม่ใช่ค่าว่าง ถึงจะเกิดการบวกได้
  433.             ' เพราะต้องนับให้ครบ 17 แถว หากแถวใดที่ไม่มีการป้อนข้อมูลก็ต้องให้ข้ามไป
  434.             If Trim(.Text) <> "" Then sSum = CDbl(.Text) + sSum
  435.         Next
  436.         
  437.         ' แสดงจำนวนเงินทั้งหมด
  438.         txtTotalAmount.Text = Format(sSum, "#,##0.00")
  439.    
  440.     End With
  441.    
  442. End Sub

  443. ' / --------------------------------------------------------------------------------
  444. ' / โปรแกรมย่อยเพื่อปรับระยะการแสดงผลของ Control ที่อยู่บนฟอร์ม
  445. Private Sub Form_Resize()
  446. ' / --------------------------------------------------------------------------------
  447.     On Error Resume Next
  448.    
  449.     FpSpread1.Move 30, 3450, Me.ScaleWidth - 30, Me.ScaleHeight - _
  450.                         fraMainData.Height - fraTotalData.Height - 30 '300
  451.     fraMainData.Move 30, 0, Me.ScaleWidth - cmdExit.Width - 180
  452.     fraTotalData.Move 30, 2640, fraMainData.Width
  453.     txtTotalAmount.Move fraTotalData.Width - txtTotalAmount.Width
  454.     lblTotalAmount.Move txtTotalAmount.Left - lblTotalAmount.Width
  455.     cmdPrint2Excel.Move fraMainData.Width + 90
  456.     cmdClear.Move cmdPrint2Excel.Left, cmdPrint2Excel.Top + cmdPrint2Excel.Height + 60
  457.     cmdExit.Move cmdClear.Left, cmdClear.Top + cmdClear.Height + 60
  458.    
  459.     ' ตั้งค่าการขยายของ FarPoint ซึ่งต้องตั้งค่าตามหน่วย Twip ก่อน (1440 Twip = 2.54 ซม. หรือ 1 นิ้ว)
  460.     With FpSpread1
  461.         .UnitType = UnitTypeTwips
  462.         .RowHeight(-1) = 365
  463.         .ColWidth(2) = .Width \ 5 - 100
  464.         .ColWidth(3) = .Width \ 5 - 75
  465.         .ColWidth(4) = .Width \ 5 - 300
  466.         .ColWidth(5) = .Width \ 5 - 300
  467.         .ColWidth(6) = .Width \ 5 - 100
  468.     End With
  469.    
  470. End Sub
คัดลอกไปที่คลิปบอร์ด

ดาวน์โหลดโค้ดต้นฉบับ VB6 ได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

1

กระทู้

4

โพสต์

35

เครดิต

Newbie

Rank: 1

เครดิต
35
โพสต์ 2018-11-29 08:50:29 | ดูโพสต์ทั้งหมด

<3 กำลังหาโค้ดประมาณนี้พอดีเลยค่ะ ขอบคุณมากๆเลยค่ะ
แต่อยากรู้ค่ะว่าถ้าเกิดว่าเราอยากจะพิมพ์ข้อมูลหนึ่งแถวต่อหนึ่งหน้ากระดาษ ต้องทำยังไงคะ รบกวนด้วยนะคะ
Meawmill

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583
 เจ้าของ| โพสต์ 2018-11-29 14:24:33 | ดูโพสต์ทั้งหมด


มันเป็นยังไงครับ "พิมพ์ข้อมูล 1 แถว ต่อ 1 หน้ากระดาษ"
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

1

กระทู้

4

โพสต์

35

เครดิต

Newbie

Rank: 1

เครดิต
35
โพสต์ 2018-11-30 08:40:51 | ดูโพสต์ทั้งหมด

thongkorn ตอบกลับเมื่อ 2018-11-29 14:24
มันเป็นยังไงครับ "พิมพ์ข้อมูล 1 แถว ต่อ 1 หน้ากระดาษ"

สมมุติว่า ได้ข้อมูลตามนี้นะคะ


แล้วต้องการปริ้นข้อมูลออกมา หนึ่งแถวต่อหนึ่งหน้ากระดาษ (กระดาษขนาด 22x10 cm)

ออกมาในลักษณะนี้ค่ะ



มีข้อมูล 15 แถว ก็ปริ้นออกมา ในรูปแบบแบบนี้ 15 หน้า ประมาณนี้อะค่ะ

พอเข้าใจมั้ยคะ


ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
Meawmill
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-11-27 22:49 , Processed in 0.318111 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้