Page 1 of 1

ขอความอนุเคราะห์ ตรวจสอบCode เนื่องจาก run ได้เพี่ยงรอบเดียว

Posted: Fri Jul 24, 2015 9:57 pm
by akekorn
สวัสดีครับเพื่อนสมาชิกทุกท่าน
ผมมีปัญหาการเขียน vba ความต้องการคือมีชีท 12 ชีท ต้องการนำข้อมูลจาก access ชื่อ คิวรี 1 - 12มี
ทั้งหมด 12 คิวรีโดยในโปรแกรมจะเรียกมาวางคิวรี 1 วาง ที่ชีท1 คิวรี 2 วางที่ชีท2 ต่อๆไปจนถึงชีท12
พอเขียนเสร็จปรากฎว่า มันทำเพียงชีท 1 ต่อจากนั้นขึ้น Errror ว่า
runtime error 91 object variable or with block variable not set
ซึ่งผมไม่ทราบว่าจะแก้ไขให้ รันรอบต่อไปจนครบ 12 รอบได้อย่างไรจึงขอความอนุเคราะห์จากเพื่อนสมาชิกช่วยแก้ไข
code ให้ผมด้วยครับโดยผมได้แนบ code มาด้วย

Code: Select all

Sub GetData01()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sQRY As String
Dim strFilePath As String
Dim B As String
B = Format(Year(Date), "0000") & Format(Month(Date) - 1, "00")
    strFilePath = "D:\Adhoc_2015\ID0060_072015\base2013\OTHERLOAN_2013.mdb"
    Set cnn = New ADODB.Connection
    Set rs = New ADODB.Recordset
     
For I = 1 To 12
    Sheets("Sheet" & I).Range("AKKE" & I).ClearContents
 
    'sQRY = "SELECT tblData.* FROM tblData"
'    sQRY = "NEWCUST"
sQRY = I
    cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & strFilePath & ";"
          rs.CursorLocation = adUseClient
    rs.Open sQRY, cnn, adOpenStatic, adLockReadOnly
    Application.ScreenUpdating = False
     Sheets("Sheet" & I).Range("AKKE" & I).CopyFromRecordset rs

    rs.Close
    Set rs = Nothing
    cnn.Close
    Set cnn = Nothing
Next I
    Exit Sub
Code นี้จะรันรอบแรกผ่านพอรอบสองเป็นต้นมาขึ้น error ข้อความตามที่แจ้งครับผม
ขอบคุณในความอนุเคราะห์ครับ
เอกกร

Re: ขอความอนุเคราะห์ ตรวจสอบCode เนื่องจาก run ได้เพี่ยงรอบเดียว

Posted: Sat Jul 25, 2015 6:15 am
by snasui
:D Code บรรทัดนี้เป็นการนำ Range Name ที่ตั้งชื่อไว้แล้วมาใช้ Sheets("Sheet" & I).Range("AKKE" & I).ClearContents ให้ตรวจสอบว่า .Range("AAKE" & l) คือ Range ไหนของแต่ละชีท และได้ตั้งชื่อไว้ก่อนจะเรียกใช้แล้วหรือไม่ครับ

Re: ขอความอนุเคราะห์ ตรวจสอบCode เนื่องจาก run ได้เพี่ยงรอบเดียว

Posted: Sat Jul 25, 2015 9:21 pm
by akekorn
ครับผมคือ range akke&I ผมจะตั้งชื่อ akke1-akke12 ครับผมโดยผมได้ตั้งชื่อไว้แล้ว รันรอบแรกผ่านครับแต่พอโปรแกรม รอบต่อจะขึัน error ตามที่แจ้งครับผม

Re: ขอความอนุเคราะห์ ตรวจสอบCode เนื่องจาก run ได้เพี่ยงรอบเดียว

Posted: Sun Jul 26, 2015 9:26 pm
by snasui
:D แนบไฟล์ตัวอย่างที่เป็นปัญหามาด้วยจะได้ช่วยทดสอบให้ได้ครับ

Re: ขอความอนุเคราะห์ ตรวจสอบCode เนื่องจาก run ได้เพี่ยงรอบเดียว

Posted: Mon Jul 27, 2015 9:41 am
by menem
ผมไม่แน่ใจว่า

Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset

ต้องอยู่ใน Loop for/next หรือเปล่า
(ไม่คุ้นกับการดึงข้อมูลจาก DB น่ะครับ)

Re: ขอความอนุเคราะห์ ตรวจสอบCode เนื่องจาก run ได้เพี่ยงรอบเดียว

Posted: Wed Jul 29, 2015 9:20 pm
by akekorn
ผมได้แนบfile มาให้แล้วครับ
รบกวนด้วยครับผม

Re: ขอความอนุเคราะห์ ตรวจสอบCode เนื่องจาก run ได้เพี่ยงรอบเดียว

Posted: Wed Jul 29, 2015 9:36 pm
by snasui
:D ตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

Sub GetData01()
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sQRY As String
    Dim strFilePath As String
    Dim B As String
    B = Format(Year(Date), "0000") & Format(Month(Date) - 1, "00")
    strFilePath = "E:\New folder (6)\sample.mdb"
    Set cnn = New ADODB.Connection
    Set rs = New ADODB.Recordset
         
    For I = 1 To 3
        Sheets("Sheet" & I).Range("AKKE" & I).ClearContents
       'sQRY = "SELECT tblData.* FROM tblData"
       'sQRY = "NEWCUST"
        sQRY = I
        cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & strFilePath & ";"
              rs.CursorLocation = adUseClient
        rs.Open sQRY, cnn, adOpenStatic, adLockReadOnly
        Application.ScreenUpdating = False
        Sheets("Sheet" & I).Range("AKKE" & I).CopyFromRecordset rs
        cnn.Close
    Next I
    Set cnn = Nothing
    rs.Close
    set rs = Nothing
    Application.ScreenUpdating = True
End Sub

Re: ขอความอนุเคราะห์ ตรวจสอบCode เนื่องจาก run ได้เพี่ยงรอบเดียว

Posted: Fri Jul 31, 2015 9:32 pm
by akekorn
ขอบคุณมากครับคุณคนควน ผมรันได้แล้วครบทุกชีท
แต่พอตอนจะจบมันมี error ขึ้น run time error 3704 cperation is not allowed when the object is closed.
และมัน ติดerror ที่ rs.close
ไม่ทราบว่าจะแก้ได้อย่างไรครับ
ขอบคุณครับ

Re: ขอความอนุเคราะห์ ตรวจสอบCode เนื่องจาก run ได้เพี่ยงรอบเดียว

Posted: Fri Jul 31, 2015 10:46 pm
by snasui
:D ลอง Mark เป็น Comment แล้วสังเกตดูอีกรอบครับ