สมัครสมาชิก

แสดงกระทู้

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 - Kxess

หน้า: [1]
1
แก้คอลัมน์ RGB ในตารางแล้วครับ
กลายเป็นว่า access มอง RGB เป็นฟิลด์ (ใช่มั้ยครับ)


edit:
ตอนนี้ทำได้แล้วครับ ผมใช้วิธีแปลง RGB เป็น Hex แล้วค่อยใช้โค้ดของคุณ UnKnown

โค๊ด: [Select]
Me.MxColor.BackColor = "&H" & Right$(strColor, 2) & Mid$(strColor, 3, 2) & Left$(strColor, 2)

เผื่อใครสนใจแปลง rgb to hex
โค๊ด: [Select]
Function RGBtoHEX(R As Byte, G As Byte, B As Byte) As String

    If R < 16 Then
        HEX1 = 0 & Hex(R)
    Else
        HEX1 = Hex(R)
    End If
   
    If G < 16 Then
        HEX2 = 0 & Hex(G)
    Else
        HEX2 = Hex(G)
    End If
   
    If B < 16 Then
        HEX3 = 0 & Hex(B)
    Else
        HEX3 = Hex(B)
    End If
   
    RGBtoHEX = HEX1 & HEX2 & HEX3

End Function
ขอบคุณครับ
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

2
ขอแชร์ฟังก์ชันที่ผมเอาไว้สร้างเลขที่ invoice อัตโนมัติ ละกันนะครับ

- รันเลขที่อัตโนมัติ โดยรูปแบบเป็น ABC001-05-18 (ABC = คำนำหน้าเฉยๆ / 001 = เลขที่ / 05 = เลขเดือน / 18 = เลขปี) (INV_ID เป็น Short Text และเป็น Primary Key)
- เป็นการเรียงเลข invoice โดยตรวจสอบจากเลขที่เก่า ขึ้นเดือนใหม่ นับ 001 ใหม่
- เขียนฟังก์ชั่นเก็บไว้ที่ Modules
- ผมเรียกใช้โดยสร้างตัวแปรตอนกดปุ่ม
โค๊ด: [Select]
AutoGenINV_ID as string
AutoGenINV_ID  = AutoINV_ID

- โค้ดอาจจะเยอะไปหน่อย แต่มันสามารถเขียนให้สั้นกว่านี้ได้อยู่ ลองดูโค้ดแล้วปรับใช้ สลับลำดับเลขเดือน / ปี เองนะครับ

โค๊ด: [Select]
Public Function AutoINV_ID() As String
On Error GoTo ErrorHandlerFx

'get Now date
Dim NowMM As String 'เลขเดือนปัจจุบัน
Dim NowYY As String 'เลขปีปัจุบัน
Dim StrINV_RunNumber As String 'เลข inv สุดท้ายที่ได้จากกระบวนการทั้งหมด
Dim getLastINV As String 'เลข inv ล่าสุด
Dim IntINV As Integer 'ไว้พักค่าเฉยๆ
Dim LastINV_MM_YY As String 'เลขรวม inv+MM+YY
Dim Now_MM_YY As String 'เลขเดือน/ปี ปัจุบัน
Dim NewINV As String 'เลข inv ใหม่
Dim LastDate As String 'วันที่ออก inv ล่าสุด

'get Date
NowMM = Month(Date)
If NowMM < 10 Then
NowMM = "0" & NowMM
End If

NowYY = Year(Date) 'รับค่าปีปัจจุบัน (ไม่ได้ขึ้นอยู่กับรูปแบบเวลาของเครื่อง)
NowYY = Right(NowYY, 2) 'เอาเฉพาะ 2 ตัวท้าย *จะทำงานผิดพลาด ถ้าขึ้นปี ค.ศ.2100 ให้เขียนเช็คปีแล้วหักลบเอาเองเด้อ
Now_MM_YY = NowMM & "-" & NowYY 'เอาค่าเดือนและปีมารวมกัน จะกลายเป็น "07-18"
'----------------------------------------------

LastDate = DMax("INV_Date", "Invoice") 'ตรวจสอบวันที่ออก inv ล่าสุด
getLastINV = Nz(DLookup("INV_ID", "Invoice", "Format(INV_Date, ""ddmmyyyyhhmm"") = " & Format(LastDate, "ddmmyyyyhhmm")), "ABC000-00-00") 'ดึงเอาเลข inv ล่าสุด โดยเปรียบเทียบจากวันเวลาที่ออก inv แต่ถ้าไม่มีข้อมูลจะกำหนดใหม่เป็น "ABC000-00-00"

'สมมติให้ getLastINV มีค่าเท่ากับ "ABC051-07-18"
LastINV_MM_YY = Right(getLastINV, 5) 'ตัด 5 อักษรจากขวา ได้ "07-18"

getLastINV = Left(getLastINV, 6) 'ตัด 6 หลักจากซ้าย ได้ "ABC051"
getLastINV = Right(getLastINV, 3) 'ตัด 3 หลักจากขวา ได้ "051" คือ inv ลำดับที่ 51 ในเดือนนี้

'ตรวจสอบถ้าเดือนและปีปัจจุบัน = เดือนและปีล่าสุดของเลขที่ inv หรือไม่
If Now_MM_YY = LastINV_MM_YY Then
IntINV = CInt(getLastINV)
IntINV = IntINV + 1 'จะได้ 51 + 1 = 52
Else
IntINV = 1 'ถ้าไม่เท่า แสดงว่าขึ้นเดือนใหม่ ให้นับ 1 ใหม่
End If

'ใส่เลข 0 ด้านหน้า เพื่อให้เป็นเลข 3 หลัก
Select Case IntINV
Case Is < 10
        StrArrayINV_Output = "00" & CStr(IntINV)
Case Is < 100
        StrArrayINV_Output = "0" & CStr(IntINV) 'ตอนนี้ IntINV = 51 จะเข้าเคส <100 ก็เติม 0 ไป 1 ตัว รวมเป็น "051"
Case Is < 1000
        StrArrayINV_Output = CStr(IntINV)
Case Else
        MsgBox "เกิดข้อผิดพลาด ไม่สามารถสร้างเลขที่ invoice ได้ !!!"
        Exit Function
End Select

StrINV_RunNumber = "ABC" & StrINV_RunNumber & "-" & Now_MM_YY 'สุดท้ายได้ "ABC052-07-18"
AutoINV_ID = StrINV_RunNumber คืนค่าเลข inv ที่ได้
Exit Function

'On Error Handler
ExitSubFx:
AutoINV_ID = "ใส่เลขที่ invoice"
Exit Function

ErrorHandlerFx:
MsgBox "Error Number:" & Err.Number & " " & "ไม่สามารถสร้างเลขที่ invoice อัตโนมัติได้ กรุณาใส่เลขที่เอง "
'Call onError_FX(Err.Number)
Resume ExitSubFx

End Function
โพสต์นี้ได้รับคำขอบคุณจาก: SuwaP

3
ถ้าหมายถึงการ filter หลาย filter มากกว่า 2 ขึ้นไป

ผมเขียนโค้ด

โค๊ด: [Select]
Function FilterCheck()
    Dim strWhere As String

    If Not IsNull(ชื่อคอมโบ1) Then
            strWhere = strWhere & "[ฟิลด์ที่1] = " & ชื่อคอมโบ1 & " AND "
    End If
               
    If Not IsNull(ชื่อคอมโบ2) Then
            strWhere = strWhere & "[ฟิลด์ที่2] = '" & ชื่อคอมโบ2 & "' AND "
               
    End If
   
    If Not IsNull(strWhere) Then
            strWhere = Left(strWhere, Len(strWhere) - 5)
            Me.Filter = strWhere
            Me.FilterOn = True
            Me.Requery
    Else
            Me.FilterOn = False
    End If
   
   
End Function

เวลาใช้ เรียก Call FilterCheck ในเหตุการณ์ on change ของ combo box
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

4
select query ได้นะครับ

จากภาพแรก ก็เปิด query builder ในฟอร์มแล้วก็บันทึกเป็น ชื่อคิวรี่
ในฟังก์ชันค้นหา ก็ใช้ select * from ชื่อคิวรี่ ...
โพสต์นี้ได้รับคำขอบคุณจาก: TaroKung Ichimura

หน้า: [1]