แสดงกระทู้

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 ... 9 10 11 [12] 13 14 15 ... 21
199
ผมเคยเกิดเหตุการณ์แบบนี้ครับ
เลยไปกำหนด ตรง References โดยกำหนดให้มี DAO Object Library ด้วย
เวอร์ชั่นเท่าที่เห็นมา เหมือนจะมีถึง 3.6 นะครับ เวอร์ชั่นใหม่ๆ ไม่เคยเจอ
หรือเขาจะไม่ทำต่อแล้วหรือเปล่าไม่แน่ใจครับ แต่ผมว่ามันยังใช้งานได้ดีอยู่ทั้ง access เวอร์เก่า และใหม่

dim dbs As Database ดึงตรงจากฐานข้อมูล
Dim dbs As dao.Database  ใช้ Dao เป็นตัวกลางในการเชื่อมข้อมูลระหว่าง Database กับส่วนที่ใช้ในการแสดงผลข้อมูล


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

200
ตรงหน้าเขียนโค้ด Tool >  references
ของท่านมีอะไรบ้างครับ อย่างน้อยต้องมี รายการพวกนี้อยู่

Mrocrosoft Access 1x.0 object library
Mrocrosoft OFFICE 1x.0 Access database Engine Object
Ole Automation
DAO 3.6 หรือเวอร์ชั่นใด เท่าที่มี

แล้วลองเปลี่ยนเป็นแบบนี้ดูครับว่าได้ไหม
Dim dbs As dao.Database
โพสต์นี้ได้รับคำขอบคุณจาก: prajak, kitisak

201


Form HN

ลองดูตัวอย่างนีครับ ระบบบันทึก,Filter Hn และ แก้ไข
1.แก้ไขฟอร์ม Carbo+5-FUHN เป็น Unbound + เพิ่มฟอร์ม บางส่วนให้นะครับ (ไปตกแต่งเองได้เลย)
2.ผม ได้เพิ่ม ID เมื่อมีการกรอก HN เพราะบางครั้งคนไข้ HN เดียวกัน อาจจะมาหลายครั้งโดย Dx ที่มาไม่เหมือนกันครับ
3.โหมด Edit ปุ่ม Save จะหายไปนะครับ
4.คลิ๊กข้อมูลที่ลงทะเบียนไว้แล้วเพื่อเปิดฟอร์มหลักได้เลยโดยกดที่ Record ใน SubForm
ส่วนการเพิ่มข้อมูลใหม่จะแสดงปุ่ม Save
Form หลักที่บันทึกข้อมูลทั้งหมด
1.แก้ไขการ Filter Hn ให้ใหม่
2.เพิ่มระบบอัพเดทข้อมูลเมื่อแก้ไขเสร็จ ที่ปุ่ม Update
3.เมื่อกดปุ่ม AddRecord จะกลับมายังฟอร์ม Hn เพื่อเพิ่มข้อมูลใหม่

ผิดตรงไหนแจ้งได้นะครับ (ฟอร์มหลักผมอาจจะทำให้ใหม่ โดยเป็น Unbound ทั้งหมดครับ) Coming Soon  :cool:
โพสต์นี้ได้รับคำขอบคุณจาก: Looktarn

202
เรียกชื่อก็พอคับ ผมไม่ใช่อาจารย์นะครับ ศึกษาอยู่เหมือนกันพยายามทดลองทำก่อนถ้าได้ผลก็แชร์ต่อ  :cool: :cool:
ถ้าผมแนะนำผิดพลาดไป อาจารย์ทุกท่าน ช่วยแนะนำเพิ่มเติมด้วยนะครับ อาจารย์สันติสุข  อาจารย์TTT อาจารย์ Oddywriter อาจารย์ท่านอืนๆ  :miao:
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

203
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.Cells.Font
         .name = "Tahoma"
         .FontStyle = "Regular"
         .Size = 11
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

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

204
อ้างถึง
ทีนี้พบปัญหาเวลาที่เราไปเลือกข้อมูลเก่ามาแก้ไข มันก็จะadd new ตลอดเวลาในข้อมูล table อยากให้มันเซฟข้อมูลเฉพาะเวลาเรากรอกรายละเอียดข้อมูลนะคะ จะต้องทำอย่างไร
ข้อมูลที่ต้องกรอกบนฟอร์มเยอะไหมครับ ผมเคยเขียนโปรแกรมของโรงพยาบาลเป็นการคีย์เวชระเบียน ตอนแรกผมลองใช้แบบ Bound Control คือดึง RecordSource จากตารางโดยตรง ปรากฎว่าไม่เวิค เลยเปลี่ยนมาใช้การบันทึกข้อมูลโดยกรอกข้อมูลบนฟอร์มโดย Control เป็น Unbound Control ครับข้อมูลที่ได้จากการกดปุ่มบันทึก เกิดจากการกดปุ่มบันทึก และ ผ่านการตรวจสอบจาก คำสั่งเช็คค่าต่างๆว่าครบแล้วหรือไม่ ถึงจะบันทึกลงในตารางให้เรา
แต่มันอาจจะยากนิดนึงเพราะเป็นโค้ดทั้งหมดแต่ถ้าจะนำไปใช้ระยะยาวผมว่าน่าจะดีกว่า
ส่วนการแก้ไข ปัญหาส่วนนั้น ส่งไฟล์ที่มีฟอร์ม และตารางแบบในตัวอย่างมาครับผมลองทำตัวอย่างให้ ทั้งแบบ บันทึกข้อมูล และ การแก้ไขข้อมูล


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

205
อ้างถึง
สั่งให้ทุแถวให้เป็น tahoma ขนาด 11 ทั้งหมดเลยต้องทำอย่างไรคะ

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
        .Font.Name = "Tahoma"
        .Font.Size = 11        'กำหนดขนาด
        .Font.Bold = false     'กำหนดตัวหนาหรือปกติ
        .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
โพสต์นี้ได้รับคำขอบคุณจาก: มาลี

206
ถ้า Filter  Style แล้ว Style จาก Textbox ไหนมี Style นี้อยู่ก็ให้แสดง PO ทุกรายการที่มีแบบนั้นใช่ไหมครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

207
พอดีพึ่งเริ่มเขียนVBในAccessเลยอยากรู้ว่าDoCmd.SetWarnings False/True ไว้ใช้ทำอะอะไรและDoCmd.คืออะไร

SetWarnings คือการเปิด/ปิดข้อความโต้ตอบ ของระบบครับ True = เปิด   / False = ปิด
ถ้าคุณใช้งานไปคุณจะสังเกตุเห็นข้อความสอบถามจากระบบเช่น ตกลง หรือ ยกเลิก ใช่ หรือ ไม่ เป็นต้น
การสั่งให้  DoCmd.SetWarnings False เป็นการสั่งปิดข้อความตอบโต้ของระบบออกไป
ซึ่งคุณต้องมั่นใจว่าผลลัพธ์ของแมโครแอคชันทั้งหมด หรือการนำไปใช้กับ Query แบบ MakeTable /Append /Delete นั้นทำงานถูกต้องแล้วด้วยนะครับ ถ้าต้องการให้แสดงข้อความตอบโต้ กำหนดเป็น True

ยกตัวอย่าง
ผมสมมุติว่าต้องการสร้าง Make Table Query ขึ้นมา 1 ตัว โดยใช้คำสั่งในการรัน Query ดังนี้
โค๊ด: [Select]
Private Sub Command0_Click()
DoCmd.OpenQuery "Query1"
End Sub
ผลที่ได้คือจะมีข้อความตอบโต้ขึ้นมา ซึ่งไม่สะดวกในการนำไปใช้งานกับโปรแกรมจริงๆ


ผมเลยนิยม ปิดคำสั่งตอบโต้ซะโดยใส่ Code แบบนี้
โค๊ด: [Select]
Private Sub Command0_Click()
DoCmd.SetWarnings False
DoCmd.OpenQuery "Query1"
DoCmd.SetWarnings True
End Sub
DoCmd คือ Object ในการสั่งให้ Methods ทำงานซึ่ง Methods ก็มีมากมายที่ ใช้ใน Visual Basic ซึ่งรวมถึงการสั่ง run มาโคร actions โดยวิธีการจะดูว่า Methods มีอะไรบ้าง ที่หน้าต่าง เขียนโค็ดถ้าท่านพิมพ์ DoCmd. เมื่อใส่ . ท่านจะเห็นว่ามีอะไรบ้างที่ทำงานด้วยใช้ Docmd ซึ่ง นำไปใช้งานได้หลากหลายเช่น การเปิด/ปิดฟอร์ม ปริ้นรายงาน ตั้งค่าตัว Control การ Import/Export และอื่นๆ มากมาย
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak, armdack, Atis

208
เจอตัวอย่างทั้งแบบ Excel และ Access นะครับ ลองดูไม่รู้ใช้ได้หรือเปล่า
มี ชื่อจังหวัด อำเภอ ตำบล และ รหัสไปรษณีย์ ครับ

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

209
ลองดูตัวอย่างนี้ครับ Fix พศ ไว้ตลอด
โค๊ด: [Select]
Private Sub Data_AfterUpdate()
Dim fixyear As String
If GetUserLocaleInfo(GetSystemDefaultLCID(), &H1009) = 7 Then
Me.RunnungNum = Format(Me.txtDate, "YY") & Format(Me.txtDate, "MM") & Right("00" & DCount([myDate], "[tblRunningNumber]") + 1, 3)
ElseIf GetUserLocaleInfo(GetSystemDefaultLCID(), &H1009) <> 7 Then
fixyear = bYear(Me.txtDate)
Me.RunnungNum = Right(fixyear, 2) & Format(Me.txtDate, "MM") & Right("00" & DCount([myDate], "[tblRunningNumber]") + 1, 3)
End If
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: UnKnown

210
ไฟล์ตามนี้เลยครับ ลองลบโมดูลที่น่าสงสัยแล้วก็ไม่หาย
https://drive.google.com/open?id=1uOVAL07-6CHgAHXNR0jhh4UfaH5McaCv

เช็คแล้วพบว่าคุณต้องกำหนดตรง Row Source ของ Combobox ให้เพิ่ม DISTINCT เข้าไปด้วย เพราะข้อมูลในรายการมีการซ้ำกันทำให้ Combobox ไม่สามารถแสดงรายการตามที่เราพิมพ์ได้

โค๊ด: [Select]
SELECT DISTINCT CarInsu.ChassisNO, CarInsu.licensePlate
FROM CarInsu
ORDER BY CarInsu.licensePlate;


หรือท่านจะใช้การ Group By ในการตั้งค่าคิวรี่ก็ได้เหมือนกันครับ
ครับแล้วอาการนั้นจะหายไป
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

211
โค๊ด: [Select]
Private Sub save_Click()
 Dim rstObj As DAO.Recordset, msgStr As String
 Me.Dirty = False
    Set rstObj = CurrentDb.OpenRecordset("FindDuplicate")
    Do While Not rstObj.EOF
        msgStr = msgStr & rstObj.Fields("ID") & vbCrLf
        rstObj.MoveNext
    Loop
    If IsNull(msgStr) Or msgStr = "" Then
    Me.EDTDATE = Now
    DoCmd.RunCommand acCmdSave
    Else
    Call MsgBox(msgStr, , "ตรวจพบ ID ซ้ำกัน !!!!")
    End If
     Set rstObj = Nothing
End Sub
ที่ปุ่ม Save แก้เป็นแบบนี้ครับ
คือถ้าเจอ ID ไหนซ้ำกันก็จะแจ้งเดือน ปกติ ถ้าเพิ่ง Copy มาแล้ว Save แล้วมันจะแจ้งว่า ID ไหน ซ้ำกับ ID ไหน พอเราแก้ไขกดเซฟไปก็จะสามารถเซฟได้แล้วครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

212
ที่ตัวรายงาน ส่วนของ Detail  ตรง Event On Print ใส่โค้ดนี้เข้าไปครับ
โค๊ด: [Select]
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
Dim ctl As Control, strText As Variant, strName As String
    Me.ScaleMode = 1
    For Each ctl In Me.Detail.Controls
        If ctl.ControlType = acTextBox Then
       
        strName = ctl.Name
            If Nz(ctl.Tag, "") = "" Then
                ctl.Tag = ctl.FontSize
            End If
            ctl.FontSize = ctl.Tag
            Me.FontSize = ctl.FontSize
            strText = ctl.Value
           If Len(strText) > 0 Then
            Do Until TextWidth(strText) < ctl.Width
                ctl.FontSize = ctl.FontSize - 1
                Me.FontSize = ctl.FontSize
            Loop
            Do Until TextHeight(strText) < ctl.Height - (ctl.Height * 0.26)
                ctl.FontSize = ctl.FontSize - 1
                Me.FontSize = ctl.FontSize
            Loop
        End If
        End If
       
    Next ctl
End Sub

ผลที่ได้
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

213
ปกติ เมื่อเราลบข้อมูลจาก Form แล้ว สั่งให้โปรแกรมไปยัง Record ท้ายสุดก็ได้คับ
พอดีคุณสร้าง Macro มาผมเลยเพิ่มส่วนที่ต้องใส่เพิ่มดังนี้ครับ


เพิ่มเติมถ้าคุณต้องการให้แสดงวันที่และเวลาตรงปุ่ม Save แก้จาก Date เป็น now ดังนี้
โค๊ด: [Select]
Private Sub save_Click()
Me.EDTDATE = now
DoCmd.RunCommand acCmdSave
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

214
ครับอาจารย์ โค๊ตหายเกลี้ยงทั้งฟอร์ม ร้องไห้หนักมาก
1.ลอง compare ดูแล้วครับ ไม่หาย
2.ลองเพิ่ม combobox เปล่าๆ ดู(วาดไปเฉยๆไม่ได้ใส่ค่าอะไร)  combobox ตัวอื่นกลับมาใช้ได้เหมือนเดิม แต่พอปิดแล้วเปิดใหม่ ก็กลับมาเป็นอาการเดิมครับ งงมาก

ต้องไล่เช็คโค้ด ดูครับ ที่ Event  On Current  /  On FormLoad / On Open Form / รวมถึง Module และอื่นๆ ว่ามีการทำงานที่ไปกระทบกับ Combobox หรือไม่ หรือส่งรหัส Teamview มาทาง Inbox เดี่ยวผมดูให้ครับ
โพสต์นี้ได้รับคำขอบคุณจาก: kitisak

215
เช็ค4ฟิวด์เหมือนกันแสดงว่าซ้ำกันได้ใช่ไหมครับ งั้นผมขอกำหนด4ฟิวด์ดังนี้นะครับ
1 PD#
2 Style
3.Description
4.QTY PCS

รบกวนด้วยนะครับ
หากเห็นตัวอย่างคำสั่ง ผมอาจนำมาปรับใช้ เผื่อ4ฟิวด์นี้ยังแก้ปัญหาไม่ได้

ผมเคยทำโปรแกรมตัวนึงเป็นกรณี Copy ข้อมูลมาแก้ไขแบบของคุณ Prajak นี้ละครับ แต่ผมจะมี Field เพิ่มมาอีก Filed นึงไว้สำหรับเก็บค่าการ แก้ไขข้อมูล โดยกำหนดให้เมื่อ Copy ข้อมูลมา เราจะไม่ดึงค่า จาก Field Edit มาด้วย มันจึงเป็นค่าว่างอยู่โดยค่าว่างนี้จะ อัพเดทข้อมูลก็ต่อเมื่อกดปุ่ม Edit แล้ว โดยปุ่ม Editจะจัดเก็บวันที่ปัจจุบันใน Field Edit เมื่อเราต้องการ Copy ข้อมูลต่อไป หรือทำขั้นตอนต่อไป (กรณี Copy มาแล้วลืม Edit) ก็ให้คำสั่งเช็คค่าว่างของ Field Edit  ตรวจสอบ ถ้าว่างอยู่ก็มีการแจ้งเตือนขึ้นมาทันที ประมาณนี้ครับ ส่วนตัวอย่างเดี่ยวลองทำให้ดูครับ
โพสต์นี้ได้รับคำขอบคุณจาก: prajak

216
ห้อง MS Access / : สั่ง run query
« เมื่อ: 23 ก.ค. 61 , 15:11:37 »
เมื่อกด ปุ่มใน form แล้วให้ query หลายๆตัวทำงาน
จะมีวิธีเขียน vba อย่างไรคะ

สมมุติมีคิวรี่ชื่อ A B C D E F
สามารถใส่คำสั่งที่ปุ่มโดยสั่งให้ทำงานเรียงตามคิวรี่ที่จะให้ทำงานก่อนหลัง
ดังนี้
โค๊ด: [Select]
Private Sub Command1_Click()
With DoCmd
.SetWarnings False
.OpenQuery "A"
.OpenQuery "B"
.OpenQuery "C"
.OpenQuery "D"
.OpenQuery "E"
.OpenQuery "F"
.SetWarnings True
End With
End Sub
โพสต์นี้ได้รับคำขอบคุณจาก: WONDERWOMAN

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