แสดงกระทู้

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 - ปิ่นณรงค์

หน้า: 1 ... 11 12 13 [14] 15 16 17 ... 21
235
ตอบข้อ 1
ผมกำหนด combobox สถานะ ชื่อ status
             textbox    วันที่ลาออก ชื่อ DateOut
             combobox สาเหตุการลาออก ชื่อ OutDetail

ที่Event Afterupdate ของ combobox status ใส่โค้ดดังนี้

โค๊ด: [Select]
Private Sub Status_AfterUpdate()
If Me.Status = "ยังทำงานอยู่" Then
Me.OutDetail.Locked = True
Me.DateOut.Locked = True
Me.OutDetail.Enabled = False
Me.DateOut.Enabled = False
Me.OutDetail = Null
Me.DateOut = Null
Else
Me.OutDetail.Locked = False
Me.DateOut.Locked = False
Me.OutDetail.Enabled = True
Me.DateOut.Enabled = True
End If
End Sub

คำสั่งนี้ เราใช้ IF Function เพื่อสร้างเงื่อนไขการทำงานของ Combobox และ Textbox ที่เรากำหนด  ถ้า เราเลือก ยังทำงานอยู่ ซึ่งกำหนดให้ เป็นความจริง ก็จะทำงานตามที่เรากำหนดไว้ แต่ถ้าไม่เป็นจริงก็จะทำงาน ที่ Else ลงมา
Locked คือ ห้ามไม่ให้กรอกข้อมูลได้
Enabled คือ ปิดการใช้งาน
Null คือ ถ้ามีข้อมูลอยู่ก็ทำให้เป็นค่าว่าง

ข้อสองน่าจะกำหนด RelationShip ไม่ถูกต้อง และตั้งค่า เชื่อมต่อ ตรง Link master กับ Link Child Field ไม่ถูกต้องครับ

ตัวอย่างด้านล่าง
โพสต์นี้ได้รับคำขอบคุณจาก: MyDDT, armdack

236

สอบถามนิดนึงค่ะว่า ตรง หน้าต่างใส่โค้ด VBA อ่ะค่ะ มันไม่อ่านภาษาไทย ต้องแก้ตรงไหนหรอคะ

ที่หน้าต่างใส่โค้ด ไปที  Tool > Option > Editor Format
ที่ Font กำหนดเป็น Tahoma Bold (Thai)  หรือ ฟ้อนอื่นๆ ที่มีคำว่า(thai) ต่อท้ายอยู่ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: MyDDT, armdack

237
คือสร้างฟอร์มบันทึกประวัติพนง.ขึ้นมา แล้วทีนี้อยากจะให้แบบว่า เวลากดบันทึกฟอร์มแล้ว มี Messagebox ขึ้นว่า บันทึกเรียบร้อย อะไรประมาณนี้อ่ะค่ะ

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

ปล.ภาพประกอบไม่มี ไฟล์งานอยู่ที่บ้าน ต้องขออภัยด้วยนะคะ

1.คำสั่ง ที่เมื่อกดบันทึกข้อมูลแล้ว แสดงข้อความแจ้ง Code ให้ใส่ Code ในส่วนท้ายของ คำสั่งบันทึกประมาณนี้ครับ
โค๊ด: [Select]
MSGBOX "บันทึกข้อมูลเรียบร้อยแล้ว", vbInformation, "สถานะ"
2.SubForm นั้นต้องมีการเชื่อมโยงเขตข้อมูลหลัก กับ เขตข้อมูลลูก คุณต้องกำหนด การเชื่อมโยงกันด้วยครับ
ปกติจะกำหนด ID ของ ฟอร์มหลัก เชื่อมกับ ID ของฟอร์มย่อย(SubForm)
วิธีการกำหนด สามารถไปกำหนดได้ที่ ส่วนคุณสมบัติของ Subform ตรงส่วนของข้อมูล
โพสต์นี้ได้รับคำขอบคุณจาก: MyDDT

238
มันขึ้น



ผมทักข้อความไปนะครับ แอด line มาเดี่ยวผมแก้ให้  :grin: :grin:
โพสต์นี้ได้รับคำขอบคุณจาก: wisitb

239
เมื่อวานผมทำให้สามารถ export excel โดยตรงได้แล้ว แต่พอเปิดอีกเครื่องดันฟ้อง

the format in which you are attempting to output the current object is not avaliable

ไม่แน่ใจว่าผิดที่โปรแกรรมหรือป่าวนะครับ

Windows ของท่านเป็น Version อะไร Service Pack อะไรคับ
วิธีการดูว่า Windows เวอร์ชันใด ที่หน้าจอหลัก(Desktop) ให้กด แป้นโลโก้ Windows + R แล้วพิมพ์ winver แล้วเลือก ตกลง

ลองติดตั้ง AddIn ตัวนี้แล้วปิดโปรแกรมเปิดใหม่ แล้วลองกด Export ดูนะครับ
https://download.microsoft.com/download/0/f/2/0f2d9941-22df-4778-80f2-57f629de3c46/SaveAsPDFandXPS.exe
โพสต์นี้ได้รับคำขอบคุณจาก: wisitb

240
ถามเพิ่ม เติม นิดนึงนะครับ   ถ้า เรา จะ ให้มี ตัวอักขระ นำหน้า  เช่น  NC-61070201    หรือ  ตามหลัง เช่น  61070201NC
ต้องตั้งค่าอย่างไรครับ

ถ้าต่อหลังแบบ 61070201NC กำหนดดังนี้

Private Sub ID_DblClick(Cancel As Integer)
Dim strDate As String
Dim intNum As Integer, intMax As Variant
Dim strSuffix As String
Dim strID As String
strID = "NC"

strDate = Format(Date, "yymmdd")
intMax = DMax("Val(Mid([ID],7))", "table1", "Left([ID],6) = '" & strDate & " '")

If Me.ID = "" Or IsNull(Me.ID) Then
        If IsNull(intMax) Then
            intMax = 0
            'Debug.Print "1"
        Else
            intMax = intMax + 1
            If intMax > 99 Then intMax = 0
            'Debug.Print "1"
        End If
        Me.ID = strDate & Format(intMax, "00") & strID
End If
End Sub


ถ้าทำแบบต่อด้านหน้า แบบ NC-61070201 กำหนดดังนี้

Private Sub ID_DblClick(Cancel As Integer)
Dim strDate As String
Dim intNum As Integer, intMax As Variant
Dim strSuffix As String
Dim strID As String
strID = "NC-"
strDate = strID & Format(Date, "yymmdd")

intMax = DMax("Val(Mid([ID],10))", "table1", "Left([ID],9) = '" & strDate & " '")

If Me.ID = "" Or IsNull(Me.ID) Then
        If IsNull(intMax) Then
            intMax = 0
            'Debug.Print "1"
        Else
            intMax = intMax + 1
            If intMax > 99 Then intMax = 0
            'Debug.Print "1"
        End If
        Me.ID = strDate & Format(intMax, "00")
End If
End Sub


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

241
สวัสดีครับ จากของเดินที่คุณทำมาแล้ว
ผมนำมาทำให้นับจำนวนวันแบบ RunningNumber ของ EM แต่ละคน ประมาณนี้

เมื่อเราได้ลำดับของแต่ละวันแล้ว ก็จะสามารถกำหนดเงื่อนไขในการ กำหนดอัตราหักได้

เงื่อนไขในการหักก็ประมาณนี้ครับ
โค๊ด: [Select]
Rate: IIf([EM]=[EM] And IsNull([OPTION]) And [TARN]="ลากิจ" And [Runday]>=0 And [Runday]<=5,"2") & IIf([EM]=[EM] And [OPTION]="ติดวันหยุด" And [TARN]="ลากิจ","5") & IIf([EM]=[EM] And [Runday]>5 And [TARN]="ลากิจ","3") & IIf([EM]=[EM] And [Runday]>=0 And [Runday]<=45 And [TARN]="ลาคลอด","0.50")& IIf([EM]=[EM] And [Runday]>45 And [TARN]="ลาคลอด","1")
รายงาน ที่ได้ประมาณนี้ครับ


ตัวอย่างที่เพิ่มเติมด้านล่าง

โพสต์นี้ได้รับคำขอบคุณจาก: วรวุฒิ

242
ขอเรียนสอบถามนะคะ

ในตารางเดิม หนูเก็บข้อมูลวันที่เอาไว้ เป็นแบบ วัน/เดือน/ปี
ที่นี้ หนูอยากให้แสดงผลใน Query โดยให้แสดงปีก่อน เป็นดังนี้ค่ะ ปี/เดือน/วัน

ไม่ทราบว่าสามารถทำใน Query ได้หรือไม่
ในฟอร์ม หนูสามารถทำได้โดยอ้างอิง Text1 ดังนี้ =Format(CDate(Forms![Frm_Date]!Text1)," yyyymmdd")
ได้ผลตาที่ต้องการ
แต่พอจะทำใน Query ไม่ทราบว่าจะอ้างอิงจากอะไร อย่างไรคะ พยายามทำยังไม่สำเร็จค่ะ

สมมุติ Field ในตารางชื่อ DateIn เก็บข้อมูลวันที่
เดิมเป็น 25/01/2018
ใส่ Date:Format([DateIn],"YYYY/MM/DD")  ผลลัพท์ 2018/01/25
หรือ Date:Format([DateIn],"YYYYMMDD")  ผลลัพท์ 20180125


ตัวอย่างด้านล่าง
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี

243
วิธีการคือ 1.คำนวนหาจำนวนวันก่อนครับ แล้ว ค่อย ใช้ IIF เชคเงื่อนไขระหว่าง Option กับ จำนวนวันหยุด และ อัตราการหัก

ส่งตัวอย่างนั้นมาครับ ขอไฟล์ที่ระบุ Option ไว้แล้วเดี่ยวผมลงทำดูให้
โพสต์นี้ได้รับคำขอบคุณจาก: วรวุฒิ

244
เอางี้ดีกว่าครับง่ายดี
เปิดรายงานขึ่นมาแล้วกดปุ้ม Export เพื่อให้ Export รายงานให้เราเลย

ที่ Code ให้สังเกตุว่ามีการอ้างถึงชื่อของรายงาน ถ้า รายงานท่านชื่ออื่นก็เอาซื้อมาใส่ให้ตรงกับที่ผม วงไว้




ตัวอย่างด้านล่าง
โพสต์นี้ได้รับคำขอบคุณจาก: wisitb

245
ห้อง MS Access / : การ run number โดยไม่ใช้ autonumber
« เมื่อ: 28 มิ.ย. 61 , 10:33:30 »
รบกวนสอบถามนะคะ มือใหม่มากๆ ต้องการ การ run number โดยไม่ใช้ autonumber จุดประสงค์เพื่อให้ข้อมูลซ้ำกันได้ แต่ต้องการให้แสดงค่าเริ่มต้นเมื่อเพิ่มระเบียนใหม่ ต้องการให้ไปเอาค่า number ในระเบียนสุดท้ายมา + 1 ตรง sub on click ต้องกำหนดอย่างไรคะ หรือมีวิธีอื่นแบบไหน รบกวนผู้รู้ด้วยนะคะ เพิ่งหัดทำครั้งแรกค่ะ ความรู้งูๆปลาๆมากๆ

ฟอร์มที่จะสร้างเป็นแบบไหนครับ
อันนี้เป็นตัวอย่าง การสร้าง Running Number แทน AutoID นะครับ
ใช้การค้นหาค่าส่าสุดจากตารางเป้าหมายแล้วนำมา+1 เมื่อกดเปลี่ยนระเบียนใหม่

คำสั่งบน Module
โค๊ด: [Select]
Function getDigits(s As String) As String
    Dim retval As String
    Dim i As Integer
    retval = ""
    For i = 1 To Len(s)
        If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Then
            retval = retval + Mid(s, i, 1)
        End If
    Next
    getDigits = retval
End Function


คำสั่งที่ปุ่ม CommandBotton ที่ใช้กดเพื่อขึ้นระเบียนใหม่

โค๊ด: [Select]
Private Sub AddNewRecord_Click()
DoCmd.GoToRecord , , acNewRec
If Me.NewRecord = True Then
    Dim strOldID As String
    Dim lngCurrentNumber As Long
    Dim lngNextNumber As Long
   
    If IsNull(DLast("[NO]", "tblDATA")) Then
    Me.No = "1"
    Else
    strOldID = DLast("[NO]", "tblDATA")
    Debug.Print strOldID
   
    lngCurrentNumber = getDigits(strOldID)
    Debug.Print lngCurrentNumber
    lngNextNumber = lngCurrentNumber + 1
    Debug.Print lngNextNumber
 
    Me.No = lngNextNumber
   
End If
      End If
     
End Sub

หมายเหตุ
tblDATA คือตารางที่ Bound กับฟอร์ม

DLast("[NO]", "tblDATA ส่วน NO นี้คือชื่อ Field ในตารางที่จะหาค่าล่าสุดเพื่อมา Running Number

ตัวอย่างด้านล่าง
โพสต์นี้ได้รับคำขอบคุณจาก: siri

246
ลองดูตัวอย่างนี้นะครับ

เวลาจะกด Export คุณอาจจะนำ คำสั่งนี้ต่อท้ายไปตอนกดเปิดรายงานนะครับ

วิธีใช้คือ ที่ปุ่มกดเปิดรายงาน
ใส่ Call ExportExcel()


ตัวอย่างคำสั่งครับ

Sub ExportExcel()
Dim strReportName As String
Dim strPathOUT As String
Dim OpenTarget As Object
Set OpenTarget = CreateObject("Shell.Application")

strReportName = "ReportName"
strPathOUT = CurrentProject.Path & "\ " & strReportName & ".xls"


DoCmd.OutputTo acOutputReport, strReportName, acFormatXLS, strPathOUT

OpenTarget.Open (strPathOUT)
End Sub


หมายเหตุ ReportName คือชื่อของ Report ที่เราจะ Export ออกไปเป็น Excel นะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: wisitb

247
ลองอธิบายอีกนิดครับอยากได้แบบไหน เช่น
1.คุณต้องการคำนวนว่าพนักงานลาไปแล้วกี่วัน หรือ เกินจากเกณฑ์ ที่ให้ไว้ 10 วันไปกี่วัน อยากได้แบบไหนครับ
2.ที่ว่าจะมีการหักแต้ม คำนวนการหักอย่างไรครับ
3.คุณอยากให้แสดง ไว้ตรงไหนของรายงานครับ
โพสต์นี้ได้รับคำขอบคุณจาก: วรวุฒิ

248
ตัวอย่างใหม่ครับ แก้ไขเลือกวันที่ล่าสุดและ ถ้าวันที่ล่าสุดซ้ำกันก็จะเอาจาก ID มากสุด เป็น True


Query แรก ชื่อ FindDuplicate

โค๊ด: [Select]
SELECT i1.*
FROM table1 AS i1 LEFT JOIN table1 AS i2 ON (i1.DDate < i2.DDate) AND (i1.NNAME = i2.NNAME)
WHERE i2.DDate IS NULL;


Query2 FindDuplicate2

โค๊ด: [Select]
SELECT Max(FindDuplicate.ID) AS ID, FindDuplicate.NNAME, FindDuplicate.DDATE, True AS OLD
FROM FindDuplicate, FindDuplicate AS t
GROUP BY FindDuplicate.NNAME, FindDuplicate.DDATE, True;

คิวรี่สุดท้าย ชื่อ Result

โค๊ด: [Select]
SELECT TABLE1.ID, TABLE1.NNAME, TABLE1.DDATE, IIf(Not IsNull([OLD]),True,False) AS CheckOLD
FROM TABLE1 LEFT JOIN FindDuplicate2 ON TABLE1.ID = FindDuplicate2.ID;
โพสต์นี้ได้รับคำขอบคุณจาก: tHizoNe

249
ขอรบกวนอาจารย์ด้วยครับ คือผมต้องการโค้ดที่สามารถ Export Data To Excel

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

ขอบคุณครับ

ลองดูตัวอย่างนี้นะครับ ผมสมมุติกำหนด CommandBotton ชื่อ ExportExcel นะครับ

Private Sub ExportExcel_Click()
Dim outputFileName As String
outputFileName = CurrentProject.Path & "\DataName" & " - " & Format(Date, "DDMMYYYY") & ".xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "targetName", outputFileName, True
End Sub

หมายเหตุ DataName คือชื่อของไฟล์ ที่เราจะกำหนด ต่อท้ายด้วยวันที่ล่าสุด
            Format(Date, "DDMMYYYY")  คือการกำหนดให้มีวันที่ในรูปแบบที่เรากำหนดเองได้ Y คือปี M คือเดือน D คือวัน
            targetName  คือชื่อ Table หรือ Query ที่ต้องการจะ Export
โพสต์นี้ได้รับคำขอบคุณจาก: Anupap

250
Macro เดิมติดตั้งไว้ที่ Event ไหนครับ ของ Form หรือ Control 

ที่ Event Afterupdate
ลองใส่ Call itemsalesMacro()
ดูครับได้ไหม
โพสต์นี้ได้รับคำขอบคุณจาก: ekarat

251
เวลา เอามารันบน access 2016 นั้น มันไม่สามารถใช้งานได้ ใช่เปล่า มันต้องเปลี่ยนเป็นคำสั่ง vba code ใช่มั้ยครับ ผมอยากรู้ว่า  sendkey f9 นั้น ใช้ทำงานอะไรครับ ถ้าผมจะเอามาเขียนเป็น vba code นั้น ต้องเขียนว่า อะไรครับ :dizzy:

Send Key F9 คือการใส่ให้ Requery  หรือ  recalc ครับ คือการให้ฟอร์มแสดงผลลัพท์ล่าสุด
ถ้าเป็นฟอร์ม ให้ลบคำสั่งนั้นทิ้ง ใส่ว่า Form.requery แทน เป็น combobox ก็ใส่ me.combobox.requery  แทนครับ
โพสต์นี้ได้รับคำขอบคุณจาก: ekarat

252
ยกตัวอย่างเช่น           --------->   อยากให้เป็นแบบนี้ครับ   
ครั้ง      ออม                                      ครั้ง      ออม                                         
1          5                                         1         5
2          7                                         2         7
3          1                                         3         1
4          2                                         4         2
5         12                                        5        12
6           2                                        6         2
7           2                                        9         0                                     
8           2                                        10       2
9           0
10         2


ขอรบกวนท่านผู้รู้ด้วยนะครับ :prettiness:
ตัวอย่างวางบน Module นะครับ

Public Function DeleteIFDuplicate
Dim db As DAO.Database
Dim recIn As DAO.Recordset
Dim strSaving As String
Dim lngRecordsDeleted As Long
lngRecordsDeleted = 0
Set db = CurrentDb()
Set recIn = db.OpenRecordset("Query1")
If recIn.EOF Then
    MsgBox ("No Input Records")
    recIn.Close
    Set recIn = Nothing
    Set db = Nothing
    Exit Function
End If
Do
If recIn!saving = strSaving Then
   recIn.Delete
   lngRecordsDeleted = lngRecordsDeleted + 1
Else
    strSaving = recIn!saving
   
End If
recIn.MoveNext
Loop Until recIn.EOF
recIn.Close
Set recIn = Nothing
Set db = Nothing
MsgBox ("You Deleted " & lngRecordsDeleted & " Records")
End Function




หมายเหตุ Field Saving คือ Field ที่ชื่อ ออม นะครับ

Query1 คือชื่อ Query ที่เราต้องการ ที่ผมกำหนดจากคิวรี่ เพราะต้องการเรียง Round จากน้อยไปหามากก่อน
การใช้งาน สร้างปุ่ม Command Botton มีอันนึง ที่ Event Onclick ใส่ไปว่า
โค๊ด: [Select]
Private Sub Command1_Click()
Call DeleteIFDuplicate
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: sirichai

หน้า: 1 ... 11 12 13 [14] 15 16 17 ... 21