แสดงกระทู้

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 ... 10 11 12 [13] 14 15 16 ... 21
217
ผมลองปรับปรุงให้ ใหม่เป็นโค้ด แต่คงไม่ยากมาก ลองดูว่าสามารถใช้งานได้หรือไม่นะครับ
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown, prajak, 10idlnw

218
ข้อมูล ที่ Copy มาแก้ไข ส่วนที่แก้ไขส่วนใหญ่มีตรงไหนบ้างครับ แล้วมี Field ไหนที่ต้องไม่ซ้ำกันบ้างครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

219


ผมสมมุติ Combobox ชื่อ Ohms และ textbox ของ Accept/Reject​ ชื่อ AandR
 
โค๊ด: [Select]
Private Sub Ohms_AfterUpdate()
   Dim lngRed As Long, lngGreen As Long
   
        lngRed = RGB(255, 0, 0)
        lngGreen = RGB(50, 205, 50)
     
       
If Me.Ohms >= "10E04" And Me.Ohms <= "10E09" Then
Me.AandR = "Accept"
AandR.BackColor = lngGreen
ElseIf Me.Ohms >= "10E10" And Me.Ohms <= "10E12" Then
Me.AandR = "Reject"
AandR.BackColor = lngRed
Else
Me.AandR.BackColor = Ohms.BackColor
Me.AandR = Null
End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: prajak, ต้นนาโน

220
ห้อง MS Access / : query หลายตัว
« เมื่อ: 17 ก.ค. 61 , 10:03:17 »
มี query ที่มีชื่อฟิลด์เหมือนกันค่ะ เราจะแสดงข้อมูลทุกฟิลด์ ที่มาจากทุก query ในตารางเดียวกันได้อย่างไรบ้างคะ
เช่น
query 1 มี ฟิลด์ชื่อ lotno , complete
query 2 มี ฟิลด์ชื่อ lotno , complete
query 3 .
...
.
.

ต้องการแสดง lotno เดียวกัน แสดงข้อมูล ฟิลด์ชื่อ lot no,complete query1,complete query2 , .. .. . .
ถ้ามีคิวรี่ที่ ชื่อ Field เหมือนกันผมว่า
ใช้การ UNION คิวรี่ ทั้งหมดรวมไว้ด้วยกันแล้วทำ Crosstab แบบของอาจารย์  OddyWriter น่าจะได้ผลนะครับ
ผมสมมุติให้ Query1 , 2 , 3 , 4 ถึง 70 มีข้อมูลที่ต้องนำมาทำ
ใช้การ UNION ใส่โค้ดประมาณนี้
โค๊ด: [Select]
SELECT Lotno,process,complete
From Query1
UNION
SELECT Lotno,process,complete
From Query2
UNION
SELECT Lotno,process,complete
From Query3
UNION
SELECT Lotno,process,complete
From Query4;
ทำไปเรื่อยๆ จนถึง Query ที่ 70;
พอรวมกันแล้วก็นำมาทำทำ Crosstab ครับ
ตัวอย่างด้านล่าง
โพสต์นี้ได้รับคำขอบคุณจาก: สุรเกตุ แซ่เอี้ย

221
Private Sub Command0_Click()
    Dim xlApp           As Object
    Dim xlWorkbook      As Object
    Dim xlSheet         As Object
   
    DoCmd.TransferSpreadsheet acExport, , "Query1", "D:\ExportQuery1.xls", True
   
    Set xlApp = CreateObject("excel.application")
    Set xlWorkbook = xlApp.Workbooks.Open("D:\ExportQuery1.xls")
    Set xlSheet = xlWorkbook.activesheet

    With xlSheet.range("A1")
        .entirerow.insert -4121             ' Insert and Shift Row Down
        .entirerow.insert -4121             ' Insert and Shift Row Down
        xlApp.DisplayAlerts = False
        xlSheet.range("A1:F2").merge        ' Merge Cells (ผสานเซล A1:F2)
        xlApp.DisplayAlerts = True
    End With
   
    With xlSheet.range("A1")
        .Value = "ชื่อหัวเรื่องที่ต้องการ"
        .Font.Name = "Tahoma"
        .Font.Size = 18
        .Font.Bold = True
        .HorizontalAlignment = -4108        ' Align Center
    End With

With xlSheet
      .Columns("A").ColumnWidth = ......
      .Columns("B").ColumnWidth = ......
      .Columns("C").ColumnWidth = ......
      .Columns("D").ColumnWidth = ......
      .Columns("E").ColumnWidth = ......
      .Columns("F").ColumnWidth = ......
  End With   
    xlApp.ActiveWorkbook.Close True
End Sub

ตรง .....ลองกำหนดขนาดดูครับ
เพิ่มเติมนะครับถ้าอยากให้Column พอดีกับข้อความในเซล ก็ใส่เป็น
.Columns("A").EntireColumn.AutoFit


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

222
ครับ กดเปิด Query นั้นใน มุมมองแก้ไขแล้วกดลาก Field ใหม่ไปใส่เลยก็ได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

223
เพิ่มคำสั่งตอนท้ายครับเป็นแบบนี้
Private Sub Command0_Click()
    Dim xlApp           As Object
    Dim xlWorkbook      As Object
    Dim xlSheet         As Object
   
    DoCmd.TransferSpreadsheet acExport, , "Query1", "D:\ExportQuery1.xls", True
   
    Set xlApp = CreateObject("excel.application")
    Set xlWorkbook = xlApp.Workbooks.Open("D:\ExportQuery1.xls")
    Set xlSheet = xlWorkbook.activesheet

    With xlSheet.range("A1")
        .entirerow.insert -4121             ' Insert and Shift Row Down
        .entirerow.insert -4121             ' Insert and Shift Row Down
        xlApp.DisplayAlerts = False
        xlSheet.range("A1:F2").merge        ' Merge Cells (ผสานเซล A1:F2)
        xlApp.DisplayAlerts = True
    End With
   
    With xlSheet.range("A1")
        .Value = "ชื่อหัวเรื่องที่ต้องการ"
        .Font.Name = "Tahoma"
        .Font.Size = 18
        .Font.Bold = True
        .HorizontalAlignment = -4108        ' Align Center
    End With
    xlApp.ActiveWorkbook.Close True
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: pirin, prajak, มาลี

224


สามารถไปกำหนดได้ที่ File  >  Option  > Object Designer > QueryDesign
กำหนดรูปแบบฟ้อน กับขนาดได้เลยครับ


โพสต์นี้ได้รับคำขอบคุณจาก: pirin, prajak, Xternity, kitisak, armdack

225
ชื่อของ Field ผมว่าเปลี่ยนไปใช้ภาษาอังกกษดีกว่าครับ จะได้ไม่มีปัญหาภายหลัง
ส่วน error ต่างๆ ให้ส่งไฟล์ที่ทำอยู่มาที่ pinnarong1115@hotmail.com
เดี่ยวผมดูให้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: MyDDT

226
code ตามที่คุณปิ่นณรงค์ให้มาใช้ได้ครับ จะมีปัญหาตรงที่บางครั้งผมอาจมีการfilter Style หรือ OD# อย่างใดอย่างหนึ่ง และที่สำคัญแต่ละStyle หรือแต่ละOD# ที่เราfilter มันจะมีหลายrecord เวลาเรา filterแล้ว กด Next ไปrecord อื่นแล้วทำการcopy มันจะerrorครับ เหมือนกับมันจะให้ copyเฉพาะที่ filter เท่านั้น

อ่อ งั้นเราก็ไปกำหนดให้มันเลือก Record ปัจจุบันที่เราใช้งานเลือกอยู่ ก่อนจะ Copy Record ได้ครับ โดยสร้าง Textbox ของ ID มาแสดงในฟอร์มด้วยทีนี้ถึงท่านแก้ไขเนื้อหา ก่อน Copy หรือจะกำหนด Filter ยังไงก็ได้ครับ เพราะมันจะFilter ข้อมูลจาก ID แล้ว Copy ไป Paste ในตารางให้
โค๊ด: [Select]
If MsgBox("คุณต้องการ copy ข้อมูลหรือไม่", vbQuestion + vbYesNo + vbDefaultButton2, "Copy ข้อมูล") = vbYes Then
    Forms![Merchandiser Key Update].Form.Filter = "[ID] = " & ID
    Me.FilterOn = True
DoEvents
DoCmd.RunCommand acCmdSelectRecord
DoEvents
DoCmd.RunCommand acCmdCopy
DoEvents
DoCmd.RunCommand acCmdPaste
End If
โพสต์นี้ได้รับคำขอบคุณจาก: pirin

227
diag afterupdate ทำงานบนฟอร์มชื่ออะไรครับท่าน Un

ที่จริงไม่น่าจะมีข้อผิดพลาดนะครับแต่ถ้าเกิดขึ้นจริงก็ลองใส่ IF ไปตรวจสอบดูก็ได้ครับ

ตรง Else

else
if not isnull(Forms!Service!CbDD) Then
Forms!Service!CbDD = null
End if
Forms!Service!TxDD.visible = False
Forms!Service!CbDD.visible = False
Forms!Service!FontCbDD.visible = False
Forms!Service!Drug_Sub.setFocus
End If
โพสต์นี้ได้รับคำขอบคุณจาก: Un

228
อ้างถึง
อ่อขอเพิ่มเติมข้อ 2 หน่อยค่ะ คือไม่อยากให้คำนวณช่วงเบรกอ่ะค่ะ 12.00-13.00 จะไม่ให้มันคำนวณออกมาอ่ะค่ะ ต้องเพิ่มเติมโค้ดตรงไหนคะ ขอบคุณค่ะ :confused:

Sub CalTime()
Dim DTime1, Time1, DTime2, Time2 As Variant
Dim MainTime As Long

Time1 = "12:00 PM"
Time2 = "1:00 PM"

MainTime = (DateDiff("h", Me.TimeStart, Me.TimeEnd))

DTime1 = (DateDiff("h", Me.TimeStart, Time1))
DTime2 = (DateDiff("h", Me.TimeEnd, Time2))


If DTime1 > 0 Then
If DTime2 < 0 Then
MainTime = MainTime - 1
Me.CalcTime = MainTime & " ชั่วโมง"
Else
MainTime = MainTime
Me.CalcTime = MainTime & " ชั่วโมง"
End If
End If

If Me.TimeStart > Me.TimeEnd Then
MainTime = (DateDiff("h", Me.TimeStart, Me.TimeEnd) + 24)
Me.CalcTime = MainTime - 1 & " ชั่วโมง"
End If

If DTime1 = 0 Then
If DTime2 < 0 Then
MainTime = MainTime - 1
Me.CalcTime = MainTime & " ชั่วโมง"
End If
End If

If DTime1 < 0 Then
If DTime2 < 0 Then
MainTime = MainTime
Me.CalcTime = MainTime & " ชั่วโมง"
End If
End If

If DTime1 > 0 Then
If DTime2 = 0 Then
MainTime = MainTime - 1
Me.CalcTime = MainTime & " ชั่วโมง"
End If
End If
End Sub

Private Sub TimeEnd_AfterUpdate()
If Not IsNull(Me.TimeStart) And _
Not IsNull(Me.TimeEnd) Then
Call CalTime
End If
End Sub

Private Sub TimeStart_AfterUpdate()
If Not IsNull(Me.TimeStart) And _
Not IsNull(Me.TimeEnd) Then
Call CalTime
End If
End Sub


ลองศึกษาดูครับ
timestart คือ textbox เวลาเริ่มทำงาน
timeend คือ textbox เวลาสินสุด
Calctime คือ textbox ผลลัพท์ที่คำนวนได้คับ
โพสต์นี้ได้รับคำขอบคุณจาก: MyDDT

229
ลบ Tshift = Shift ออกไปครับ พอดีผมลืมลบออกให้ มันเลย เออเร่อ
แก้คำสั่งเป็น
โค๊ด: [Select]
Sub ResetForm()
    On Error GoTo Err_Err
    Dim ctl As Control
   
       
    For Each ctl In Me
        If ctl.ControlType = acComboBox Then
            ctl = Null
        End If
        If ctl.ControlType = acTextBox Then
         ctl = Null
        End If
        If ctl.ControlType = acCheckBox Then
                ctl = False
        End If

    Next ctl
Exit_err:
        Exit Sub
Err_Err:
        MsgBox Error$
         MsgBox "ERROR ResetForm"
        Resume Exit_err

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

230


อ้างถึง
1.การคำนวณอายุ ถ้าต้องการให้ตอนกรอกประวัติพนักงาน กรอกวันเกิด/วันเริ่มงานเสร็จแล้ว ให้อายุ/อายุงานมันขึ้นเลยได้หรือป่าวคะ หรือถ้าไม่ได้ เราให้มันคำนวณตอนกดเซฟได้หรือป่าวคะ เพราะเมื่อวานลองลงโค้ดคำนวณดู มันเออเร่ออ่ะค่ะ เหมือนตัวเองจะยังไม่ค่อยเข้าใจหลักการของการวางโค้ดเลยค่ะ

 การคำนวนหาช่วงปี เดือน วัน หรือ เวลา เราสามารถใช้ DateDiff ในการหาค่าต่างๆ
เช่น การหาค่าอายุ  และ การหาอายุการทำงาน
ผมกำหนด
textbox ที่จะแสดงอายุชื่อ Age
และ textbox ที่จะระบุอายุชื่อ Birthday
โค้ดประมาณนี้ครับ
โค๊ด: [Select]
Me.Age = Int(DateDiff("m", [Birthday], Now()) / 12) & " ปี " & (DateDiff("m", [Birthday], Now()) Mod 12) & "เดือน " & Int(DateDiff("d", [Birthday], Now()) Mod 12) & " วัน "
การหา อายุงานใช้วิธีการเดียวกันครับ

อ้างถึง
2.คำนวณชั่วโมงการทำงานทั้งหมด อย่างสมมุติ น.ส.สวย เข้างาน= 08.00น. ออกงาน = 17.00น. ชั่วโมงทำงาน = 08.00 ชม. แบบนี้ต้องคำนวณอย่างไร ตั้งชนิดข้อมูลของเข้างาน,ออกงาน เป็น Date/Time นี่คือถูกต้องแล้วใช่มั้ยคะ
ผมสมมุติ textbox  3 อัน ชื่อ Timestart   ,   TimeEnd      ,    CalcTime
โดยจะกำหนดให้คำนวนเวลาทำงาน เมื่อระบุเวลา เริ่มและสินสุดการทำงาน และแสดงใน textbox ชื่อ Calctime
ตัวอย่างโค้ด
โค๊ด: [Select]
Sub CalTime()
If Me.TimeEnd < Me.TimeStart Then
Me.CalcTime = (DateDiff("h", [TimeStart], [TimeEnd]) + 24) & " ชั่วโมง"
Else
Me.CalcTime = DateDiff("h", [TimeStart], [TimeEnd]) & " ชั่วโมง"
End If
End Sub

Private Sub TimeEnd_AfterUpdate()
Call CalTime
End Sub
Private Sub TimeStart_AfterUpdate()
Call CalTime
End Sub

อ้างถึง
3.คือเรามีตารางเก็บข้อมูลการลางานแบบนี้ 01=มาทำงานปกติ 02=ลาป่วย 03=ลากิจ ... ถ้าต้องการให้มีช่อง2ช่อง ช่อง1 เป็นช่องเล็กๆไว้ใส่เลข 01 แล้วช่องที่2 ให้มันเด้งขึ้นมาเองว่า มาทำงานปกติ ประมาณนี้ ถ้าเราเปลี่ยนแปลงตัวเลข ตัวหนังสือก็เปลี่ยนตามไปด้วย ประมาณนี้อ่ะค่ะ ต้องทำอย่างไรคะ

วิธีการคือให้ไปดูการกำหนด แหล่งข้อมูลแถว  ของตัว Combobox นะครับ
สังเกตุดูจะเห็นว่า เราดึง Field ID และ Field Status ลงมาเพื่อใช้เป็น list ของ Combobox
ถ้าเราต้องการให้ กด เลือก ข้อมูลจาก Combobox แล้ว textbox ก็แสดง status ตรงกับ ID นั้น
ก็กำหนดแบบนี้ครับ ที่ Event Afterupdate

โค๊ด: [Select]
Private Sub Combo16_AfterUpdate()
Me.status = Me.Combo16.Column(1)
End Sub

ความหมาย ของ .Column(1) คือการเอา รายการจาก ตัว Combobox คอลัมน์ที่ 2 มาแสดง ใน textbox โดย .Column(0) คือคอลัมน์แรก ส่วน คอลัมน์ ต่อๆไป ก็สามารถระบุ 1 2 3 4 5 ไปเรื่อยๆ ได้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: MyDDT

231
ที่จริง ถ้าจะให้ Advance อีกนิด เราสามารถสร้าง Control แบบ Unbound น่าจะเวิคนะครับ

ตัวอย่างเพื่อจะนำไปปรับใช้

คำสั่งในการบันทึกข้อมูล
โค๊ด: [Select]
Private Sub Save_Click()
Call AddNewToTable
subform.Requery
MsgBox "บันทึกข้อมูลแล้วค่ะ", vbInformation, "สถานะ"
Call ResetForm
End Sub

โค๊ด: [Select]
Sub AddNewToTable()
On Error GoTo Err_Err
    Dim DB As Database
    Dim rs As Recordset
    Set DB = CurrentDb()
    Set rs = DB.OpenRecordset("BillHead", dbOpenDynaset)
    rs.AddNew
    rs![BillNumber] = Me.BillNumber
    rs![CustomerName] = Me.CustomerName
    rs![CustomerLastName] = Me.CustomerLastName
    rs![Tel1] = Me.Tel1
    rs![Tel2] = Me.Tel2
    rs.Update
Exit_err:
        Exit Sub
Err_Err:
        MsgBox Error$
        MsgBox "Error, ( Add New)!", vbExclamation, "แจ้ง"
        Resume Exit_err
End Sub

คำสั่งทำให้ ข้อมูลจากตัว Control บนฟอร์ม เป็นค่าว่าง
โค๊ด: [Select]
Sub ResetForm()
    On Error GoTo Err_Err
    Dim ctl As Control
   
       
    For Each ctl In Me
        If ctl.ControlType = acComboBox Then
            ctl = Null
        End If
        If ctl.ControlType = acTextBox Then
         ctl = Null
        End If
        If ctl.ControlType = acCheckBox Then
                ctl = False
        End If

    Next ctl
Exit_err:
        Exit Sub
Err_Err:
        MsgBox Error$
         MsgBox "ERROR ResetForm"
        Resume Exit_err

End Sub

ประมาณนี้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: MyDDT, armdack

232
ห้อง MS Access / : unrecognized database format
« เมื่อ: 06 ก.ค. 61 , 21:42:50 »
ตรง ERROR 3443
ตัวฐานข้อมูล และโปรแกรม ได้นำมาทำใหม่จาก Access เวอร์ชั่นเก่าหรือเปล่าครับ
ขอดูตรงการกำหนด reference  ของ  DAO library ตรงหน้าต่างใส่โค้ด Tools->References ว่ามีพวก "Microsoft Office 12.0 Access database engine Object Library"  หรือเปล่าถ้า   Office 10  ใช้  14.0

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

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

ใช่เลยค่ะ เหมือนบันทึกจากฟอร์มหลักลงฟอร์มย่อยอ่ะค่ะ พอกดบันทึก ช่องก็จะว่างให้เราบันทึก Record ต่อไปได้ อะไรประมาณนี้อ่ะค่ะ


งั้นก็เอา การตั้งค่าตรง หัวข้อที่ 3 ออกไปครับ

Form หลัก และ Form ย่อย ใช้ RecordSource จากตารางเดียวกัน
สมมุติชื่อ ฟอร์มย่อยว่า Subform
ที่ปุ่ม บันทึกใส่แบบนี้ครับ

โค๊ด: [Select]
Private Sub Save_Click()
DoCmd.GoToRecord , , acNewRec
subform.Requery
MsgBox "บันทึกข้อมูลแล้วค่ะ", vbInformation, "สถานะ"
End Sub

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

234



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

และต้องไปกำหนด ความสัมพันธ์ของตารางด้วยครับ


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

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