กระทู้เก่าบอร์ด อ.Yeadram
1,668 4
URL.หัวข้อ /
URL
Dlookup ใน Report
ใน Report เรา Dlookup แบบมีเงื้อนไขได้มั้ยครับ
ขยายความ
ตารางA มีรายละเอียดดังนี้
วันที่ จำนวน
1/11/2554 1200
2/11/2554 2200
3/11/2554 560
ใน Report ของผมมี Textbox ชื่อ Date1 ซึ่งส่งค่าวันที่ 2/11/2554
ผมสร้าง Textbox อีกอัน ใส่ เงื่อนไขว่า =Dlookup("[วันที่]","ตารางA",.........)
ตรงเงื่อนไขของ Dlookup ต้องใส่อย่างไรครับ ผมอยากให้ออกมาตาม Textbox ชื่อ Date1
ถ้า Date1 =2/11/2554 ค่าที่ได้ คือ 2200
Date1 =3/11/2554 ค่าที่ได้ คือ 560
ขยายความ
ตารางA มีรายละเอียดดังนี้
วันที่ จำนวน
1/11/2554 1200
2/11/2554 2200
3/11/2554 560
ใน Report ของผมมี Textbox ชื่อ Date1 ซึ่งส่งค่าวันที่ 2/11/2554
ผมสร้าง Textbox อีกอัน ใส่ เงื่อนไขว่า =Dlookup("[วันที่]","ตารางA",.........)
ตรงเงื่อนไขของ Dlookup ต้องใส่อย่างไรครับ ผมอยากให้ออกมาตาม Textbox ชื่อ Date1
ถ้า Date1 =2/11/2554 ค่าที่ได้ คือ 2200
Date1 =3/11/2554 ค่าที่ได้ คือ 560
4 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R11647
ขอบพระคุณอาจารย์สันติสุขมากครับ ได้แล้วครับ แต่ผมไม่เข้าใจ
ตรง """ & Date1 & """ ") ใช้เครื่องหมาย " สามอันติดกัน ข้างหลังมีเว้นวรรค
หมายความว่ายังงัยครับ รู้ไว้จะได้ประยุกต์กับงานอื่นครับ
ตรง """ & Date1 & """ ") ใช้เครื่องหมาย " สามอันติดกัน ข้างหลังมีเว้นวรรค
หมายความว่ายังงัยครับ รู้ไว้จะได้ประยุกต์กับงานอื่นครับ
3 @R11649
argument ที่ 3 ของฟังก์ชั่น DLookup ต้องเป็น String Expression (นิพจน์ที่เป็นตัวอักษร) ทำหน้าที่เทียบเท่า WHERE clause ใน SQL statement เพื่อบอกเงื่อนไขว่าเราต้องการเรคอร์ดอะไรบ้าง
แต่เนื่องจาก Date1 ในโปรแกรมของคุณก็มี data type เป็น string เช่นเดียวกันกับ argument ที่ 3 นี้ ซึ่งตามข้อกำหนดแล้ว string จะมี delimited (ตัวคั่นเพื่อบอกขอบเขตของ string ว่าเริ่มที่ไหน จบที่ไหน) เป็น double quote หรือ single quote ก็ได้
ดังนั้น VBA จึงกำหนดไว้ว่า ถ้า string ต้องมีอักษรเดียวกันกับ string delimited แล้วหล่ะก็ ให้ใส่ string นั้น 2 ตัวติดกัน VBA จะตีความหมายออกมาเป็นตัวอักษรเดียวให้
เช่น string ของคุณคือ [วันที่]="xx/xx/xxxx" แต่ string นี้ก็ต้องอยู่ใน argument ที่ 3 อีกที ถ้าเราไม่ใส่ double quote 2 ตัวติดกัน ก็จะกลายเป็น "[วันที่]="xx/xx/xxxx"" สิ่งที่เกิดขึ้นคือ VBA จะตีว่านี่เป็น syntax error เพราะในส่วน "[วันที่]=" นั้น VBA ตีความว่าได้จบ string แล้ว มี double quote ปิดท้าย ถูกต้องตาม syntax แล้ว แต่พอมันเจอ xx/xx/xxxx ต่อท้ายมา ซึ่งไม่เป็นไปตาม syntax มันไม่รู้ว่ามันเป็นอะไร จู่ๆมีตัวเลข xx มาต่อท้าย มันก็ตีออกมาเป็น syntax error แต่พอคุณใส่ double quote 2 ตัว ก่อนหน้า xx/xx/xxxx มันก็จะตีความว่าเป็นตัวอักษร double quote 1 ตัว ไม่ใช่ double quote ที่เป็น string delimited
อีกวิธีนึงที่จะเลี่ยงก็คือ เราใช้ single quote เป็น string delimited สำหรับ string ชุดใน และใช้ double quote เป็น string delimited สำหรับ string ชุดนอกก็ได้ครับ
ส่วนที่ผมเว้นช่องว่างไว้ 1 ตัวอักษรนั้น เพื่อไม่ให้ตาลายเกินไป จะได้ดูได้ง่ายๆ ซึ่งเป็นสไตล์การเขียนโค้ดของผมเท่านั้นเอง จะไม่มีก็ได้ครับ
แต่เนื่องจาก Date1 ในโปรแกรมของคุณก็มี data type เป็น string เช่นเดียวกันกับ argument ที่ 3 นี้ ซึ่งตามข้อกำหนดแล้ว string จะมี delimited (ตัวคั่นเพื่อบอกขอบเขตของ string ว่าเริ่มที่ไหน จบที่ไหน) เป็น double quote หรือ single quote ก็ได้
ดังนั้น VBA จึงกำหนดไว้ว่า ถ้า string ต้องมีอักษรเดียวกันกับ string delimited แล้วหล่ะก็ ให้ใส่ string นั้น 2 ตัวติดกัน VBA จะตีความหมายออกมาเป็นตัวอักษรเดียวให้
เช่น string ของคุณคือ [วันที่]="xx/xx/xxxx" แต่ string นี้ก็ต้องอยู่ใน argument ที่ 3 อีกที ถ้าเราไม่ใส่ double quote 2 ตัวติดกัน ก็จะกลายเป็น "[วันที่]="xx/xx/xxxx"" สิ่งที่เกิดขึ้นคือ VBA จะตีว่านี่เป็น syntax error เพราะในส่วน "[วันที่]=" นั้น VBA ตีความว่าได้จบ string แล้ว มี double quote ปิดท้าย ถูกต้องตาม syntax แล้ว แต่พอมันเจอ xx/xx/xxxx ต่อท้ายมา ซึ่งไม่เป็นไปตาม syntax มันไม่รู้ว่ามันเป็นอะไร จู่ๆมีตัวเลข xx มาต่อท้าย มันก็ตีออกมาเป็น syntax error แต่พอคุณใส่ double quote 2 ตัว ก่อนหน้า xx/xx/xxxx มันก็จะตีความว่าเป็นตัวอักษร double quote 1 ตัว ไม่ใช่ double quote ที่เป็น string delimited
อีกวิธีนึงที่จะเลี่ยงก็คือ เราใช้ single quote เป็น string delimited สำหรับ string ชุดใน และใช้ double quote เป็น string delimited สำหรับ string ชุดนอกก็ได้ครับ
ส่วนที่ผมเว้นช่องว่างไว้ 1 ตัวอักษรนั้น เพื่อไม่ให้ตาลายเกินไป จะได้ดูได้ง่ายๆ ซึ่งเป็นสไตล์การเขียนโค้ดของผมเท่านั้นเอง จะไม่มีก็ได้ครับ
4 @R11650
ขอบคุณอาจารย์มากครับ ผมเคย Error แบบนี้ เลยกลับไปดู Query
ของหลายๆ ท่าน เจอ บางท่านใช้ single quote เลย ใช้โดยไม่ได้เข้าใจ
แต่คำอธิบายนี้ ทำให้ผมเข้าใจ ในสิ่งที่ผมไม่เข้าใจมานานครับ
ขอบพระคุณอาจารย์ สำหรับความรู้ที่ผมไม่เคยได้จากที่ไหนมาก่อนครับ
ของหลายๆ ท่าน เจอ บางท่านใช้ single quote เลย ใช้โดยไม่ได้เข้าใจ
แต่คำอธิบายนี้ ทำให้ผมเข้าใจ ในสิ่งที่ผมไม่เข้าใจมานานครับ
ขอบพระคุณอาจารย์ สำหรับความรู้ที่ผมไม่เคยได้จากที่ไหนมาก่อนครับ
Time: 0.3460s
=Dlookup("[จำนวน]","ตารางA","[วันที่]=#" & format(Date1,"dd-mmm-yyyy") & "#")
ถ้าฟิลด์ [วันที่] มี data type เป็น Text ก็ใช้
=Dlookup("[จำนวน]","ตารางA","[วันที่]=""" & Date1 & """ ")