แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - PNR

หน้า: 1 [2] 3 4 5 ... 43
17
อ้างถึง
อยากได้แบบคลิกแล้วแสดงตัวอย่างก่อนปริ้นซ์
สามารถใช้   
Docmd.OpenReport "ชื่อของรายงาน",acViewPreview

เพื่อแสดงตัวอย่างก่อนปริ้นซ์ได้
อ้างถึง
(โดยไม่ต้องเด้งกล่องมาให้ใส่เลขที่บิลที่จะปริ้นซ์แบบที่เป็นอยู่)
ที่เด้งกล่อง ต้องเข้าไปดูการออกแบบไว้ครับว่าทำไว้แบบไหน
อ้างถึง
ต้นแบบคืออันนี้ค่ะ
ผมกดเข้าไปดาวน์โหลดไม่ได้มันแจ้งเตือนว่าลิ้งไม่ปลอดภัยแนะนำให้แนบไฟล์มาดีกว่าซึ่งในบอร์ดก็มีให้แนบไฟล์ได้ครับ

18
ใช้32 bitจึงได้ ขอบคุณครับ
ถ้าท่านจะใช้ 64Bit ในอนาคต ที่โค๊ดท่านสามารถเพิ่ม
ptrsafe เพิ่มเข้าไปคำสั่งก็จะสามารถทำงานได้ปกติ
จากคำสั่ง
Declare Function

ให้เพิ่มเป็น Declare PtrSafe Function
ประมาณนี้นะครับ
ถ้าท่านจะสลับกันเพื่อให้คำสั่งสามารถใช้ได้กับ Window ทั้ง 64 และ 32
สามารถกำหนดเงื่อนไขประมาณนี้

โค๊ด: [Select]
#if Win64 then
   Declare PtrSafe Function MyFunc Lib "User32" (ByVal N As LongLong) As LongLong
#else 'ส่วนด้านล่างนี้จะใช้ 32Bit ครับ
   Declare Function MyFunc Lib "User32" (ByVal N As Long) As Long
#end if

19
อันนี้ตัวอย่างนะครับ
ถ้าของท่านไม่ได้และไฟล์นั้นสามารถส่งทางข้อความให้ตรวจสอบได้ก็คงง่ายขึ้น

20
ลองใส่โค้ดดูแล้วครับ โค้ดไม่ทำงานครับ
ถ้าท่าน copy code นี้แล้วก็ไปวางแต่ไม่ได้กำหนดให้ปุ่มรับอีเว้นนี้เข้าไปมันก็จะไม่ทำงานครับ

ลองเช็คตามนี้นะครับกดที่ปุ่ม command botton ตรง event กดเข้าไปแล้วก็เลือกทำงานตามอีเว้นที่ใช้โค้ดนะครับกดเข้าไปแล้วก็เอาโค้ดที่ผมให้ไปลงไปวางแล้วลองดูใหม่อีกครั้งนะครับว่าได้หรือเปล่า

เพราะจากที่เช็คไม่น่าจะมีอะไรผิดพลาดครับ

21
เรียนคุณ

อ้างถึง
ยกตัวอย่าง นาย ก เลขบัตรประชาชน 1234567890123 ข้อมูลเก่า  กกกก อัพเดตใหม่เป็น กก77 ประมาณนี้นะคะ
ตารางชั่วคราวเราก็ควรมีไว้เหมือนเดิม เพื่อใช้ตารางนี้ในการตรวจสอบเงือนไขก่อนนำเข้าสู่ตารางหลักครับ

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

ถ้าโอเคกับขั้นตอนที่ผมกล่าวมา เดี่ยวผมปรับโค๊ดให้ใหม่

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

ที่มีกล่องเด้งขึ้นมาให้ใส่เลขใบกำกับภาษีนั้นเพราะมีการกำหนด Criteria ใน recordsource หรืออ้างจะมีการสร้าง Inputbox ไว้
ที่ปุ้มปริ้นนั้น เพื่อให้รายงานที่จะแสดงนั้นแสดงตามเลขใบกำกับภาษี แล้วถึงจะดำเนินการปริ้น

ถ้าอยากคลิ๊กแล้วปริ้นเลยนั้นต้องสอบถามก่อนว่า
เวลาจะปริ้นคือปริ้นข้อมูลตามที่แสดงอยู่บนฟอร์มได้หรือไม่ ?
เช่น กำหนด criteria = textbox เลขใบกำกับภาษี ที่แสดงอยู่บนฟอร์ม



23
ที่ปุ่มปรับโค๊ดเป็นแบบนี้นะครับ
โค๊ด: [Select]
Private Sub Command145_Click()
On Error Resume Next
Dim rst As DAO.Recordset
    Set rst = CurrentDb.OpenRecordset("M1_GIF", dbOpenDynaset)
    rst.MoveFirst
    Do Until rst.EOF
    rst.Edit
    If rst!Rank > 36 Then
    rst!Status = "2"
    ElseIf rst!Rank <= 36 Then
    rst!Status = "1"
    End If
    rst.Update
       rst.MoveNext
    Loop
   Me.Recalc
    rst.Close: Set rst = Nothing
End Sub

24
ผมลองสร้างปุ่มที่ฟอร์ม แล้วมัน Error ครับ หรือผมน่าจะทำอะไรผิดไป ยังไงขอบคุณมากครับ

คุณข้ามขั้นตอนที่ 1 ไปหรือเปล่าครับคือการสร้างคิวรี่แล้วเอา SQL ที่ให้ไว้วางลงไปแล้วเซฟชื่อ Q1

25
ห้อง MS Access / : เปิดฟอร์มแล้ว ...
« เมื่อ: 09 เม.ย. 64 , 09:59:27 »
1. เปิดฟอร์มแล้วให้ซ่อนหน้าต่างนำทาง โค้ดอย่างไรครับ
2. เปิดฟอร์มแล้วให้ขอบซ้ายของฟอร์มชิดขอบหน้าต่าง (ตอนนี้หน้าต่างมันอยู่กึ่งกลาง) กำหนดตรงไหนครับ
ข้อ1 ใส่ใน Event Form_Load ก็ได้ครับ

    Private Sub Form_Load()
    DoCmd.ShowToolbar "Ribbon", acToolbarNo  'ซ่อน Ribon ด้านบน
    DoCmd.NavigateTo "acNavigationCategoryObjectType"
    DoCmd.RunCommand acCmdWindowHide  'ซ่อนหน้าต่างนำทาง
    End Sub

ข้อ2
1.ประกาสตัวแปลไว้บนสุดของคำสั่ง
    Public FrmTop  As Long
    Public FrmLeft As Long

2.ที่ Event Form_Activate() ใส่โค๊ดนี้เข้าไป
    Private Sub Form_Activate()
    FrmTop = Forms![ชื่อฟอร์ม].WindowTop
    FrmLeft = Forms![ชื่อฟอร์ม].WindowLeft
    FrmTop = Me.WindowTop
    FrmLeft = Me.WindowLeft
    End Sub

26
สมมุติตาราง A ชื่อ Mytable
1.สร้างคิวรี่ใส่ SQL เข้าไป ตั้งชื่อ Q1
SELECT Idnumber, LV  FROM MyTable GROUP BY Idnumber, LV HAVING ((Not (LV) Is Null));

2.สร้างปุ่มขึ้นมา 1 ปุ่ม
ใส่โค้ดนี้เข้าไป
Private Sub Command0_Click()
Dim rst As DAO.Recordset
    Set rst = CurrentDb.OpenRecordset("Mytable", dbOpenDynaset)
   
    rst.MoveFirst
    Do Until rst.EOF
    If IsNull(rst!LV) Or rst!LV = "" Then
    rst.Edit
    rst!LV = DLookup("LV", "Q1", "Idnumber =" & rst!Idnumber & "")
    rst.Update
    End If
       rst.MoveNext
    Loop
   
    rst.Close: Set rst = Nothing
End Sub

27
มันขยายไม่ได้แล้วจริงๆครับ ผมปรับ width เป็น maximum แล้ว ตอนเปิดฟอร์มจึงแสดงผลได้แค่ครึ่งจอครับ


ที่คุณ UnKnown บอกมาคือไม่ได้กำหนดขนาดฟอร์มใช้ใหญ่เท่าขนาดจอครับ
แต่หมายถึงการกำหนดความละเอียด หรือ pixel ของเครื่องคอมที่จะแสดงบนหน้าจอทีวีมากกว่า
ยิ่งความละเอียดหน้าจอคอมยิ่งมากการแสดงผลที่ จอทีวีก็จะยิ่งใหญ่ขึ้น

และผมลงค้นข้อมูลการกำหนดให้ แสดงผลเต็มหน้าจอ monitor ลองดูจากเว็บไซส์นี้ครับ
มีตัวอย่างโค๊ด และ ไฟล์ access ให้ลองใช้งานและดูการแสดงผลด้วย

https://codedocu.com/Office-365/Access/Basics/vba-Code/Automatically-adjust-Access-forms-to-the-maximum-monitor-size?2505 link

28
B > รับ PIPE 20 M ......

 :shout: :shout: :shout:

29
ถ้าเท่ากันทุกงวดงั้นโค๊ดจะเป็นแบบนี้

โค๊ด: [Select]
Private Sub Command0_Click()
Dim rs As DAO.Recordset
    Dim i As Integer
    Dim getMonth As String
    Dim getYear As String
    Dim getDate As String
    Dim getTotal As Long
    Dim getPay As Long
    Dim getPayMonth As Long
    Dim getLastpay As Long
    Dim getInterest As Long
    Set rs = CurrentDb.OpenRecordset("Table1", dbOpenDynaset)
    getTotal = 98000   'ส่วนที่จะสร้าง textbox ระบุยอดเงิน
    getDate = "5"     'ส่วนที่จะสร้าง textbox กำหนดวันที่ชำระ
    getMonth = DatePart("m", Date)
    getYear = DatePart("yyyy", Date)
    getPay = (getTotal) / 36
    getPayMonth = getTotal
    Do Until i > 36
    For i = 1 To 36
       getMonth = getMonth
       If getMonth > 12 Then
       getYear = getYear + 1
       getMonth = "1"
       Else
       getYear = getYear
       End If
           '---------------เพิ่มเรคคอร์ดใหม่--------------
         rs.AddNew
    'ใส่ชื่อฟิลด์ที่ต้องการ และใส่ค่า โดยกำหนด Data Type ให้ถูกต้อง ถ้าเป็น Text ต้องมี "" คล่อม ถ้าเป็นตัวเลขไม่ต้องมี
       rs!รหัส = "001"
       rs!ชื่อสินค้า = "งวดที่ " & i
       rs!วันครบกำหนด = CDate(getDate & "/" & getMonth & "/" & getYear)
        If i = 36 Then
        rs!จำนวน = getPayMonth
        Else
        rs!จำนวน = getPay
        End If
        rs!ดอกเบี้ย = (((getTotal * 15) / 100) / 12)
        rs.Update
        getMonth = getMonth + 1
        getPayMonth = getPayMonth - getPay
        Next i
        Loop
    '-----------------------------------------
    rs.Close: Set rs = Nothing

End Sub


30
จากโจทย์ที่บอกมาได้แบบนี้ครับ

แต่ส่วนของดอกเบี้ยไม่ได้เพิ่มให้นะครับ ยังไม่เข้าใจโจทย์

คือไม่ชัวว่าดอกเบี้ยคงที่ทุกงวด (ถ้าใช้ใช้แบบเดิมได้เลย)
ถ้าดอกเบี้ยเปลี่ยนตามยอดเงินต้นที่ลดลง ก็ต้องคำนวนเพิ่มเติมนิดหน่อย


ผมเพิ่มในส่วนการคำนวนเงินต้นคงเหลือให้ด้วยนะครับ
เพราะจากเงื่อนไขของท่านที่ว่างวดสุดท้ายต้องน้อยว่าทุกงวด บางครั้งครบ 36 งวดแล้ว
แต่งวดสุดท้ายยังเหลือเศษอยู่นิดหน่อยด้วย

เช่น ยอด 98,000.00   ส่งงวดละ 2,722.00 งวดสุดท้ายต้องได้ 2,730.00 เพิ่มมา 8 บาทเป็นต้น

โค๊ด: [Select]
Private Sub Command0_Click()

    Dim rs As DAO.Recordset
    Dim i As Integer
    Dim getMonth As String
    Dim getYear As String
    Dim getDate As String
    Dim getTotal As Long
    Dim getPay As Long
    Dim getPayMonth As Long
    Dim getLastpay As Long
    Dim getInterest As Long
    Set rs = CurrentDb.OpenRecordset("Table1", dbOpenDynaset)
    getTotal = 98000
   
    getMonth = DatePart("m", Date)
    getYear = DatePart("yyyy", Date)
    getPay = (getTotal) / 36
    getPayMonth = getTotal
   
    Do Until i > 36
    For i = 1 To 36
       getMonth = getMonth
       If getMonth > 12 Then
       getYear = getYear + 1
       getMonth = "1"
       Else
       getYear = getYear
       End If
       
       If getPayMonth < getPay Then
        getPay = getPayMonth
      Else
        getPay = getPay
      End If
         
    '---------------เพิ่มเรคคอร์ดใหม่--------------
         rs.AddNew
    'ใส่ชื่อฟิลด์ที่ต้องการ และใส่ค่า โดยกำหนด Data Type ให้ถูกต้อง ถ้าเป็น Text ต้องมี "" คล่อม ถ้าเป็นตัวเลขไม่ต้องมี
       rs!รหัส = "001"
       rs!ชื่อสินค้า = "งวดที่ " & i
       rs!วันครบกำหนด = CDate("5/" & getMonth & "/" & getYear)
        If i = 36 Then
        rs!จำนวน = getPayMonth 'ยอดเหลืออีกเท่าไรก็ยกมาได้เลย
        Else
        rs!จำนวน = getPay 
        End If
         '    rs!ดอกเบี้ย = (((55000 * 15) / 100) / 12)
        rs.Update
       
        getMonth = getMonth + 1
        getPayMonth = getPayMonth - getPay
        Next i
        Loop
   
    '-----------------------------------------
    rs.Close: Set rs = Nothing

End Sub

31
พรุ่งนี้มาทำให้ครับ พอทำได้ครับ
พอดีเลิกงานแล้ว

32
อ้างถึง
1. มีดิวกำหนดชำระทุกวันที่5 ถ้าบวก 30 วันที่จะไม่ตรง แต่อยากให้วันที่เป็นวันที่ 5 (หรือวันที่กำหนด) ทุกเดือน
1.อยากกำหนดวันที่กำหนดชำระเอง เช่นวันที่ 5 น่าจะใช้ datepart มาเช็คได้อยู่ครับ
2.แต่จากโค้ดผมไม่เข้าใจการคำนวนว่าคิดจากอะไร

ผมอาจจะแก้ไขการคำนวนให้ใหม่แต่ต้องอธิบายขั้นตอนการคำนวนให้ละเอียด ว่าต้องการแบบไหน

หน้า: 1 [2] 3 4 5 ... 43