Page 1 of 2

Data realtime แสดงด้วย pivot table จาก access query

Posted: Tue Jul 26, 2011 7:23 pm
by godman
คือผมอยากให้ sheet pivot summary แสดงข้อมูลจาก sheet แรกมาครับ แต่ปัญหาความต้องการคือให้ผู้ใช้ใส่เลข 3 ตัวท้ายของ part number หรือหมายงานชิ้นงาน เช่น 15695-04 ก็ใส่เพียง 695 เพราะ 04 ไม่เกี่ยวครับ แล้วให้ผู้ใช้สามารถเลือกวันวันที่ที่จะ updated ได้ด้วยครับ ไม่ทราบว่าต้องเขียน macro อย่างไรดีครับ ให้ผู้ใช้กรอกข้อมูล 2 ช่องบนนะครับ

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Tue Jul 26, 2011 8:39 pm
by snasui
:D ลองดูตัวอย่างตามไฟล์แนบครับ โดยมีการให้ชื่อกับ Data ใช้ Code VBA ตามด้านล่าง ตรวจสอบข้อมูลตามเงื่อนไข หากเข้าเงื่อนไขให้แสดง True หากไม่เข้าเงื่อนไขให้แสดง False

Code: Select all

Sub FillData()
Dim rAll As Range
Dim r As Range
With Worksheets("Data input")
    Set rAll = .Range("E2", .Range("E2").End(xlDown))
End With
For Each r In rAll
    If CInt(Mid(r, 3, 3)) = Worksheets("Pivot Summary").Range("B1") And _
        r.Offset(, -2) = Worksheets("Pivot Summary").Range("B2") Then
            r.Offset(, 8) = True
    Else
            r.Offset(, 8) = False
    End If
    If Application.CountIf(Worksheets("Data input").Range("M:M"), True) = 0 Then
        MsgBox "Can not found data."
        Exit Sub
    Else
        Worksheets("Pivot Summary").PivotTables(1).PivotCache.Refresh
    End If
Next r
MsgBox "Finish."
End Sub

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Tue Jul 26, 2011 9:26 pm
by godman
ขอบคุณครับ อาจารย์ แต่ว่าต้องยอมรับว่าผมยังไม่ได้ลงลึกใน VBA ก็เลยต้องพึงพาอาจารย์ไปก่อน แต่เรื่องสูตรต่างๆที่เรียนไปผมก็นำไปต่อยอดครับ
แต่สำหรับกรณีนี้ ผมอาจจะให้ข้อมูลไม่ครบ หรืออธิบายไม่กระจ่าง คือ ที่อาจารย์ทำมาตรงเงืื่อนไข 100% ก็นำมา แต่ปัญหาคือผู้ใช้จำเวลาในระดับนาที ไม่ได้ นะสิครับ
ผมเลยคิดว่าควรจะเอาข้อมูล update ตั้งแต่ 6 ทุ่มจนถึง 6 ทุมของอีกวันคือเอาข้อมูลจาก 6 ทุ่มจนถึงเวลาปัจจุบัน ว่า data summary ยอดเท่าไหร่ครับและคำที่ลงท้ายด้วย xxx 3 ตัวหลังทั้งหมดครับ ผมได้ให้แนวทางคำตอบมาตามไฟล์แนบด้วยครับ ขอบพระคุณเป็ฯอย่างสูงครับ

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Tue Jul 26, 2011 10:31 pm
by snasui
:D ปรับ Code เป็นด้านล่าง ซึ่งเป็นการดูเฉพาะวันที่ ไม่ต้องดูเวลาครับ เนื่องจากงวดที่เวลาที่เป็นเงื่อนไขคือเวลา 1 วัน เริ่มหลังเที่ยงคืนจนถึงเที่ยงคืนอยู่แล้ว

Code: Select all

Sub FillData()
Dim rAll As Range
Dim r As Range
With Worksheets("Data input")
    Set rAll = .Range("E2", .Range("E2").End(xlDown))
End With
For Each r In rAll
    If CInt(Mid(r, 3, 3)) = Worksheets("Pivot Summary").Range("B1") And _
        DateValue(r.Offset(, -2)) = DateValue(Worksheets("Pivot Summary").Range("B2")) Then
            r.Offset(, 8) = True
    Else
            r.Offset(, 8) = False
    End If
    If Application.CountIf(Worksheets("Data input").Range("M:M"), True) = 0 Then
        MsgBox "Can not found data."
        Exit Sub
    Else
        Worksheets("Pivot Summary").PivotTables(1).PivotCache.Refresh
    End If
Next r
MsgBox "Finish."
End Sub

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Tue Jul 26, 2011 10:47 pm
by godman
อาจารย์ครับ ผมลองใส่ 700 ลงไปข้อมูลมาไม่หมดครับ และถ้าผมต้องการใช้ช่อง วันที่ เวลา เป็น นับถึงวันที่ เวลา ณ ปัจจุบัน ต้องเขียนโค้ดยังไงครับ

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Jul 27, 2011 9:07 am
by snasui
:D ค่อย ๆ ถามตอบกันไปนะครับ เท่าที่ได้ตรวจสอบเงื่อนไข

B5 = 25/7/2011 14:33:52 (เงื่อนไขคือต้องเป็นวันที่ 25/7/2011)
F10 = 23/7/2011 19:29:23
F11 = 25/7/2011 9:43:43
F12 = 24/5/2011 4:16:00

ดังนั้นดึงมาได้รายการเดียวจึงถูกต้องแล้วครับ เพราะ F10 และ F12 ไม่เข้าเงื่อนไข

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Jul 27, 2011 9:23 am
by snasui
snasui wrote::D ปรับ Code เป็นด้านล่าง ซึ่งเป็นการดูเฉพาะวันที่ ไม่ต้องดูเวลาครับ เนื่องจากงวดที่เวลาที่เป็นเงื่อนไขคือเวลา 1 วัน เริ่มหลังเที่ยงคืนจนถึงเที่ยงคืนอยู่แล้ว

Code: Select all

Sub FillData()
Dim rAll As Range
Dim r As Range
With Worksheets("Data input")
    Set rAll = .Range("E2", .Range("E2").End(xlDown))
End With
For Each r In rAll
    If CInt(Mid(r, 3, 3)) = Worksheets("Pivot Summary").Range("B1") And _
        DateValue(r.Offset(, -2)) = DateValue(Worksheets("Pivot Summary").Range("B2")) Then
            r.Offset(, 8) = True
    Else
            r.Offset(, 8) = False
    End If
    If Application.CountIf(Worksheets("Data input").Range("M:M"), True) = 0 Then
        MsgBox "Can not found data."
        Exit Sub
    Else
        Worksheets("Pivot Summary").PivotTables(1).PivotCache.Refresh
    End If
Next r
MsgBox "Finish."
End Sub
จาก Code ด้านบนยังไม่ถูกต้องเนื่องจากบรรทัดสับกันครับ ผมปรับมาให้ใหม่ตามด้านล่าง ซึ่งรวมทั้งการปรับให้ดูวันที่และเวลาจนถึงปัจจุบันแล้วครับ

Code: Select all

Sub FillData()
Dim rAll As Range
Dim r As Range
With Worksheets("Data input")
    Set rAll = .Range("E2", .Range("E2").End(xlDown))
End With
For Each r In rAll
    If CInt(Mid(r, 3, 3)) = Worksheets("Pivot Summary").Range("B1") And _
        (CDbl(r.Offset(, -2)) >= CDbl(Worksheets("Pivot Summary").Range("B2")) _
        And CDbl(r.Offset(, -2)) <= CDbl(Date + Time)) Then
            r.Offset(, 8) = True
    Else
            r.Offset(, 8) = False
    End If
Next r
If Application.CountIf(Worksheets("Data input").Range("M:M"), True) = 0 Then
    MsgBox "Can not found data."
    Exit Sub
Else
    Worksheets("Pivot Summary").PivotTables(1).PivotCache.Refresh
End If
MsgBox "Finish."
End Sub


Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Jul 27, 2011 9:55 am
by godman
อาจารย์ครับ ใช่ครับ อาจารย์ทำถูกแล้วครับ
อยากให้ข้อมูลมันแสดงทั้งหมดไม่ว่าจะอยู่ของวันใหน เช่น คีย์ 720 ก็ให้มันเอาข้อมูลของวันที่ 23 กค 24 กค 27 กค จนถึงเวลานี้now จะต้องเปลี่ยน code อย่างไรบ้างครับ

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Jul 27, 2011 10:25 am
by snasui
godman wrote:อยากให้ข้อมูลมันแสดงทั้งหมดไม่ว่าจะอยู่ของวันใหน เช่น คีย์ 720 ก็ให้มันเอาข้อมูลของวันที่ 23 กค 24 กค 27 กค จนถึงเวลานี้now จะต้องเปลี่ยน code อย่างไรบ้างครับ
ใช้ Code ล่าสุดด้านบนและวันที่ต้องคีย์วันที่ 23/7/2011 ครับ เพื่อจะได้นำข้อมูลตั้งแต่ 23/7/2011 จนถึงปัจจุบันมาแสดง

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Jul 27, 2011 11:15 am
by godman
ผมลอง run ใส่ 695 มันขั้น errer ว่า run time errer 12 type mismatch ครับ

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Jul 27, 2011 11:16 am
by godman
ผมแนบไฟล์มาด้วยครับ ลืมไป

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Jul 27, 2011 11:29 am
by snasui
:D บรรทัดที่ 392-406 คือต้นเหตุครับ

ผมปรับ Code ให้ใหม่ตามด้านล่างเพื่อให้ Run ได้แม้ว่าจะเกิด Error ครับ

Code: Select all

Sub FillData()
Dim rAll As Range
Dim r As Range
On Error Resume Next
With Worksheets("Data input")
    Set rAll = .Range("E2", .Range("E2").End(xlDown))
End With
For Each r In rAll
    If CInt(Mid(r, 3, 3)) = Worksheets("Pivot Summary").Range("B1") And _
        (CDbl(r.Offset(, -2)) >= CDbl(Worksheets("Pivot Summary").Range("B2")) _
        And CDbl(r.Offset(, -2)) <= CDbl(Date + Time)) Then
            r.Offset(, 8) = True
    Else
            r.Offset(, 8) = False
    End If
Next r
If Application.CountIf(Worksheets("Data input").Range("M:M"), True) = 0 Then
    MsgBox "Can not found data."
    Exit Sub
Else
    Worksheets("Pivot Summary").PivotTables(1).PivotCache.Refresh
End If
MsgBox "Finish."
End Sub

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Jul 27, 2011 11:49 am
by godman
ผมลองรัน 695 มาเฉพาะของวันที่ 27 ครับ แต่ของอีก 2 วันไม่แสดงครับอาจารย์ ใช้มาโครใหม่แล้ว

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Jul 27, 2011 11:52 am
by godman
ผมลองใส่ 700 ก็ไม่มาครับ มีหลายหลายวัน ก่อนหน้า

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Jul 27, 2011 12:00 pm
by snasui
:D อีก 2 วันที่ว่าคือวันที่เท่าไรครับ :?:

สำหรับ Code ที่ผมเขียนนั้น เป็นการตรวจสอบตามด้านล่างครับ

ในเซลล์ B2 ชีท Pivot Summary กรอกวันที่ใดไว้ โปรแกรมจะดึงข้อมูลตั้งแต่วันนั้นจนถึงปัจจุบันครับ ถ้ากรอกวันที่ปัจจุบันก็ได้ข้อมูลเพียงวันปัจจุบันเท่านั้นครับ

ไม่ทราบว่าที่ต้องการเป็นแบบใด ขอรายละเอียดที่ชัดเจนอีกครั้งครับ อธิบายได้เต็มที่ครับ

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Jul 27, 2011 12:16 pm
by snasui
:D ส่วน Code ด้านล่างนี้เป็นการตรวจสอบว่าในเซลล์ B2 ของชีท Pivot Summary เป็นวันที่เท่าไร ก็ให้ดึงข้อมูลของวันที่ก่อนหน้าจนกระทั่งถึงวันที่ในเซลล์ B2

Code: Select all

Sub FillData()
Dim rAll As Range
Dim r As Range
On Error Resume Next
With Worksheets("Data input")
    Set rAll = .Range("E2", .Range("E2").End(xlDown))
End With
For Each r In rAll
    If CInt(Mid(r, 3, 3)) = Worksheets("Pivot Summary").Range("B1") And _
        CDbl(r.Offset(, -2)) <= CDbl(Worksheets("Pivot Summary").Range("B2")) Then
            r.Offset(, 8) = True
    Else
            r.Offset(, 8) = False
    End If
Next r
If Application.CountIf(Worksheets("Data input").Range("M:M"), True) = 0 Then
    MsgBox "Can not found data."
    Exit Sub
Else
    Worksheets("Pivot Summary").PivotTables(1).PivotCache.Refresh
End If
MsgBox "Finish."
End Sub

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Jul 27, 2011 1:13 pm
by godman
ผมอาจจะสื่อสารคลาดเคลื่อน ผมต้องการให้วันในอดีตก่อนหน้า จนถึง วันนี้ เวลานี้ แสดงครับ แสดงว่า code บนสุดโอเค ครับ ขอบคุณครับ ผมลองดูครับ

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Jul 27, 2011 1:17 pm
by godman
ได้แล้วครับ แต่ผมอาจจะมีคำถามเพิ่มเติมในภายหลัง ครับ เกี่ยวกับการแสดงข้อมูลจาก access และการแสดงข้อมูลเลือก วันที่นี้แวลานี้ ถึง วันที่อื่นเวลาอื่น แล้วให้มันไปแสดงโดยขึ้นไฟล์ใหม่ แล้วให้ sheet หายไปคงเหลือแต่ sheet หลัก แต่ตอนนี้ขอบคุณมากครับ อาจารย์

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Aug 03, 2011 10:13 pm
by godman
อ้างอิงจาก code ที่เกี่ยวข้องข้างบนครับ
Sub FillData()
Dim rAll As Range
Dim r As Range
On Error Resume Next
With Worksheets("Data input")
Set rAll = .Range("E2", .Range("E2").End(xlDown))
End With
For Each r In rAll
If CInt(Mid(r, 3, 3)) = Worksheets("Pivot Summary").Range("B1") And _
CDbl(r.Offset(, -2)) <= CDbl(Worksheets("Pivot Summary").Range("B2")) Then
r.Offset(, 8) = True
Else
r.Offset(, 8) = False
End If
Next r
If Application.CountIf(Worksheets("Data input").Range("M:M"), True) = 0 Then
MsgBox "Can not found data."
Exit Sub
Else
Worksheets("Pivot Summary").PivotTables(1).PivotCache.Refresh
End If
MsgBox "Finish."
End Sub
อาจารย์ครับจากตรงนี้ ถ้าผมเปลี่ยนเป็น -1 หมายความว่าให้เอาข้อมูลประวัติก่อนหน้าจนถึงวันที่เวลาตามที่เลือกในช่อง B2 ใช่ไหมครับ เพราะผมลองเปลี่ยนแล้วมันโอเค นำไปใช้ได้ไใช่ไหมครับ และนำไปประยุกต์ใช้ในเรื่องอื่นๆได้ด้วยใช่ไหมครับ ผมตื่นเต้นมากที่มันทำได้
CDbl(r.Offset(, -2)) <= CDbl(Worksheets("Pivot Summary").Range("B2")) Then

Re: Data realtime แสดงด้วย pivot table จาก access query

Posted: Wed Aug 03, 2011 10:33 pm
by godman
ผมต้องรบกวนเพิ่มเติมครับ เนื่องจากผู้บังคับบัญชาต้องการให้แสดงข้อมูลจากวนที่....ถึงวันที่.....ครับ โดยให้คีย์ part number เต็ม ครับ ต้องเปลี่ยนโค้ดอย่างไรบ้างครับ ขอขอบคุณมากนะครับที่ให้ code ผมจะลองศีกษา โค้ดอาจารย์ดู ผมแนบไฟล์มาด้วย