กระทู้เก่าบอร์ด อ.Yeadram
1,316 2
URL.หัวข้อ /
URL
The expression on Key Down you entered ...
อ่านหัวข้อแล้วอาจงงนะครับ
แต่ผมมักจะเจอ Message ประมาณหัวข้อเด้งขึ้นมาบอก user
พอลองไล่ปัญหาดูพบว่า มาจากการใช้งานข้ามรุ่นกัน
...คือการใช้งานปกติที่ user ใช้ ก็ไม่มีปัญหาอะไร
แต่เมื่อใดที่มีการแก้โปรแกรม เครื่องที่ใช้แก้เป็น Access version 2007
แต่เครื่อง user เป็น version 2003 ...file เป็น .mdb
ปัญหาคือเมื่อผมแก้โปรแกรมเสร็จ ไม่แน่ใจเหมือนกันว่า Access มันไปเปลี่ยน Reference ของ Microsoft Excel 12.0 Object Library ให้เองเลยหรือเปล่าไม่รู้
พอแก้เสร็จ เอาไปให้ USER RUN มันก็ฟ้อง msg ตามหัวข้อ
คือพอไปถึงเครื่อง user มันเหมือนหา Microsoft Excel 12.0 Object Library ไม่เจอ ก็เลย run แล้วเกิด error
ทีนี้ครับ กลับมาที่เครื่องผม ผมก็พยามไปหาไอ reference ตัวเก่า ย้อนไปเป็น excel 11 แต่ก็หาไม่เจอ เพราะเครื่องผมใหม่แล้ว ก็เลยต้องตามไปเปิดหน้า coding ที่เครื่อง user เพื่อเปลี่ยนให้มันเป็น version เก่า
คำถามคือ เคยเจอปัญหาแบบนี้กันบ้างไหมครับ
แล้วแก้กันยังไงครับ มีวิธีที่ไม่ต้องไปนั่งตามแก้ที่เครื่อง user ไหมครับ
แต่ผมมักจะเจอ Message ประมาณหัวข้อเด้งขึ้นมาบอก user
พอลองไล่ปัญหาดูพบว่า มาจากการใช้งานข้ามรุ่นกัน
...คือการใช้งานปกติที่ user ใช้ ก็ไม่มีปัญหาอะไร
แต่เมื่อใดที่มีการแก้โปรแกรม เครื่องที่ใช้แก้เป็น Access version 2007
แต่เครื่อง user เป็น version 2003 ...file เป็น .mdb
ปัญหาคือเมื่อผมแก้โปรแกรมเสร็จ ไม่แน่ใจเหมือนกันว่า Access มันไปเปลี่ยน Reference ของ Microsoft Excel 12.0 Object Library ให้เองเลยหรือเปล่าไม่รู้
พอแก้เสร็จ เอาไปให้ USER RUN มันก็ฟ้อง msg ตามหัวข้อ
คือพอไปถึงเครื่อง user มันเหมือนหา Microsoft Excel 12.0 Object Library ไม่เจอ ก็เลย run แล้วเกิด error
ทีนี้ครับ กลับมาที่เครื่องผม ผมก็พยามไปหาไอ reference ตัวเก่า ย้อนไปเป็น excel 11 แต่ก็หาไม่เจอ เพราะเครื่องผมใหม่แล้ว ก็เลยต้องตามไปเปิดหน้า coding ที่เครื่อง user เพื่อเปลี่ยนให้มันเป็น version เก่า
คำถามคือ เคยเจอปัญหาแบบนี้กันบ้างไหมครับ
แล้วแก้กันยังไงครับ มีวิธีที่ไม่ต้องไปนั่งตามแก้ที่เครื่อง user ไหมครับ
2 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R19992
บรรทัด
Dim xlApp as Excel.Application
Set xlApp = CreateObject("Excel.Application")
แก้ไขเป็น
Dim xlApp as Excel.Application
Set xlApp = New Excel.Application
Dim xlApp as Excel.Application
Set xlApp = CreateObject("Excel.Application")
แก้ไขเป็น
Dim xlApp as Excel.Application
Set xlApp = New Excel.Application
Time: 0.3580s
ไม่อีกวิธีก็คือต้องเขียนโปรแกรมด้วยการทำ Late Binding ซึ่งเราไม่จำเป็นต้องอ้างเวอร์ชั่นของ Excel และไม่ต้องอ้างใน VBA Reference อีกต่อไป Late Binding หมายถึงการอ้างถึงไลบรารี่ (ในที่นี้คือ Excel) ก็ต่อเมื่อโค้ดนั้นกำลังจะทำงาน ตย.โค้ดคือ
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
...
...
...
Set xlApp = Nothing
ในขณะที่วิธีที่คุณทำโดยการอ้างใน VBA Reference นั้นเรียกว่า Early Binding ตย.โค้ดคือ
Dim xlApp as Excel.Application
Set xlApp = CreateObject("Excel.Application")
...
...
...
Set xlApp = Nothing
การทำ Early Binding ให้ข้อดีในแง่ของความเร็วที่ดีกว่าและระหว่างเขียนโค้ด ตัวคอมไพล์เลอร์ก็จะตรวจว่าใช้ property, method, ค่า enumerate ได้ถูกต้องหรือไม่ เพราะคอมไพล์เลอร์มันรู้ว่าตัวแปรนั้นอ้างไปยังไลบรารี่อะไรได้ตั้งแต่เริ่มเขียนโค้ดแล้ว (จากคำสั่ง Dim xlApp as Excel.Application) แต่ถ้าโปรแกรมคุณไม่ต้องการความเร็วสูง และยอมรับได้ว่าจะเห็นว่าเขียนอะไรผิดก็เมื่อรันอยู่เท่านั้น ก็ใช้ Late Binding แทนก็ได้ครับ