:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

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

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#1

Post 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 ข้อความตามที่แจ้งครับผม
ขอบคุณในความอนุเคราะห์ครับ
เอกกร
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#2

Post by snasui »

:D Code บรรทัดนี้เป็นการนำ Range Name ที่ตั้งชื่อไว้แล้วมาใช้ Sheets("Sheet" & I).Range("AKKE" & I).ClearContents ให้ตรวจสอบว่า .Range("AAKE" & l) คือ Range ไหนของแต่ละชีท และได้ตั้งชื่อไว้ก่อนจะเรียกใช้แล้วหรือไม่ครับ
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#3

Post by akekorn »

ครับผมคือ range akke&I ผมจะตั้งชื่อ akke1-akke12 ครับผมโดยผมได้ตั้งชื่อไว้แล้ว รันรอบแรกผ่านครับแต่พอโปรแกรม รอบต่อจะขึัน error ตามที่แจ้งครับผม
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#4

Post by snasui »

:D แนบไฟล์ตัวอย่างที่เป็นปัญหามาด้วยจะได้ช่วยทดสอบให้ได้ครับ
menem
Silver
Silver
Posts: 549
Joined: Mon Jan 26, 2015 11:02 am

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

#5

Post by menem »

ผมไม่แน่ใจว่า

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

ต้องอยู่ใน Loop for/next หรือเปล่า
(ไม่คุ้นกับการดึงข้อมูลจาก DB น่ะครับ)
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#6

Post by akekorn »

ผมได้แนบfile มาให้แล้วครับ
รบกวนด้วยครับผม
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#7

Post 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
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#8

Post by akekorn »

ขอบคุณมากครับคุณคนควน ผมรันได้แล้วครบทุกชีท
แต่พอตอนจะจบมันมี error ขึ้น run time error 3704 cperation is not allowed when the object is closed.
และมัน ติดerror ที่ rs.close
ไม่ทราบว่าจะแก้ได้อย่างไรครับ
ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#9

Post by snasui »

:D ลอง Mark เป็น Comment แล้วสังเกตดูอีกรอบครับ
Post Reply