The expression on Key Down you entered ...
กระทู้เก่าบอร์ด อ.Yeadram

 1,249   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 ไหมครับ

2 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R19990
เวลาที่ต้องการให้โปรแกรม Access ใช้ได้กับไลบรารี่ Excel หรืออื่นๆ ที่อาจมีหลายเวอร์ชั่นตามแต่ละเครื่องที่นำไปรันนั้น โปรแกรมนั้นต้องถูกคอมไพล์ด้วยการอ้างถึงไลบรารี่ที่เป็นเวอร์ชั่นต่ำสุดที่เราคิดว่าเครื่องต่างๆนั้นจะมีใช้ แล้วเมื่อนำไปรันในเครื่องที่มี Office เวอร์ชั่นสูงกว่า ไลบรารี่ของ Excel จะเปลี่ยนไปเป็นเวอร์ชั่นสุดท้ายในระบบของเครื่องนั้นๆให้อัตโนมัติเอง เช่น เราคอมไพล์บนเครื่องที่อ้างถึง Excel 10.0 โปรแกรมเราก็รันได้บนเครื่องที่มี Excel 11.0 หรือสูงกว่าได้   แต่ถ้าเราคอมไพล์บนเวอร์ชั่นสูง เราจะไปรันที่เวอร์ชั่นต่ำกว่าไม่ได้

ไม่อีกวิธีก็คือต้องเขียนโปรแกรมด้วยการทำ 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 แทนก็ได้ครับ
2 @R19992
บรรทัด

Dim xlApp as Excel.Application
Set xlApp = CreateObject("Excel.Application")

แก้ไขเป็น

Dim xlApp as Excel.Application
Set xlApp = New Excel.Application
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3271s