Excel & VBA เรียกเปิดแฟ้ม ตรงไปที่ชีท และเลือกเซลทันที
|"เพื่อนคนหนึ่งของผม ชื่อลุงไม้..."|123it.co.nr|เรื่องทั้งหมด|เรื่องที่แล้ว |เรื่องต่อไป|
จาก 3 ทุ่ม ถึงตี 1 เมื่อคืน แล้วเข้านอน และจาก 8 โมงเช้าถึง 10 โมงครึ่ง ผมก็สามารถสรุปและแก้ไขปัญหาคาใจ(ตัวเอง)ลงจนได้ หลายๆท่านอาจจะทำได้นานแล้ว แต่ผมเพิ่งพบ เลยขอนำมาบันทึกไว้ครับ
เรื่องของเรื่องก็คือ ผมสร้างรายงานออกมาแล้ว 2 หน้า เป็นหน้าแสดงรายงานแบบละเอียด 1 หน้า และเป็นหน้าสรุปอีก 1 หน้า ซึ่งผมออกแบบระบบการทำงานเอาไว้ แล้วยูสเซอร์ชอบกันมาก บอกว่าสะดวกดี เพราะไม่ต้องมาไล่หารายชื่อทีละคนทีละบรรทัด ดับเบิ้ลคลิกหน้าสรุปที่ชื่อใครปุ๊บ ก็ตรงดิ่งมาที่ช่วงบรรทัดของรายชื่อนั้นๆในหน้ารายละเอียดให้ทันที
พอได้คืบก็อยากได้ศอก(เหมือนโบราณว่าไว้) พอดับเบิ้ลคลิกที่หน้าสรุป มาเปิดหน้ารายละเอียดของชื่อนั้นๆได้แล้ว ยูสเซอร์ก็ปรารภว่า ถ้าจะดับเบิ้ลคลิกที่บรรทัดใดในหน้ารายละเอียดนี้ แล้วให้ไปเปิดไฟล์ต้นตอของรายการนี้เลย เพื่อที่จะได้ตรวจสอบถึงที่มาที่ไป ว่าพนักงานคนต้นทางบันทึกไว้อย่างไร ผมก็เลยบอกว่าจะลองดู
ในระบบการทำงาน ผมไม่อนุญาตให้ยูสเซอร์ Brown หาไฟล์ต่างๆด้วยตัวเองอยู่แล้ว แต่การที่จะเขียนคำสั่งเข้ากับปุ่ม แล้วคลิกไปคลิกมาก็ใช่ที่ เลยขอยึดคอนเซ็ปต์เดิม คือการทำงานด้วยการดับเบิ้ลคลิกต่อเนื่องกันไป
ผมใช้เซลในคอลัมน์ A แอบเก็บ path, filename, sheetsname และ row เอาไว้ ในรูปแบบดังนี้ (แทน / ด้วย แบ็คสแลช นะครับ ผมใส่แล้ว เวลาแสดงหน้าบล็อกแล้วมองไม่เห็น ใครทำเป็นช่วยสอนทีครับ)
C:/worksystem/salefile1.xls:data1:21
นั่นคือ จากพาธและชื่อไฟล์ ผมคั่นด้วย : แล้วเป็นชื่อชีท จากนั้นคั่นด้วย : อีกที แล้วตามด้วยเลขบรรทัด ซึ่งข้อความตรงนี้ สร้างขึ้นในขณะที่สร้างหน้ารายงาน (ด้วย VBA)
คำสั่งที่นำมาประยุกต์ใช้ มี 2 ส่วนที่จำเป็น คือ
1. Workbooks . Open (path & file) 2. Application.Goto Reference:= file & worksheet & range
ผมจึงนำ 2 คำสั่งนี้มารวมกัน เพื่อให้สามารถสั่งได้ในครั้งเดียว กลายเป็น
Application.Goto Reference:=workbooks . Open(path & file & worksheet & range)
ที่ชีทรายงานแบบละเอียด ผมใส่คำสั่งนี้เอาไว้
Activesheet.OnDoubleclick="OpenSource"
และนี่คือหน้าตาโดยประมาณของโค้ดที่ใช้
Sub OpenSource()Dim TextOfSource as string,p1 as integer,p2 as integer
'///เซลนี้ใส่ข้อความ C:/worksystem/salefile1.xls:data1:21 เอาไว้ TextOfSource=ActiveCell.text '///ค้นหาตำแหน่งของการสิ้นสุดพาธและชื่อไฟล์ โดยค้นจากซ้ายไปขวา ระบุตำแน่งเริ่มค้นที่ 3 เพราะ 1 และ 2 คือ C: นั่นเอง p1 = InStr(3, TextOfSource, ":")
'///ค้นหาตำแหน่งเริ่มต้นของเลขบรรทัด โดยค้นย้อนจากขวาไปซ้าย ตำแหน่งเริ่มค้นจะเป็นตำแหน่งสุดท้ายของข้อความ ก็คือตำแหน่งที่ Len(TextOfSource)นั่นเอง p2 = InStrRev(TextOfSource, ":", Len(TextOfSource))
Application.Goto reference:= _ Workbooks . Open(Left(TextOfSource, p1 - 1),Readonly:=true). _ Worksheets(Mid(TextOfSource, p1 + 1, p2 - p1 - 1)). _ Range("e" & Right(TextOfSource, Len(TextOfSource) - p2))
CenterOnCell Activecell end sub บรรทัดสุดท้าย "CenterOnCell" นั้น ใช้สำหรับการดึง Activecell ให้มาแสดงอยู่กึ่งกลางจอภาพพอดี ใช้คำนี้ค้นได้ตามเน็ตครับ
หลังจากอัพเดทให้ยูสเซอร์เอาไปใช้กันแล้ว พากันบ่นอุบเลย ว่าเหน็บกินขา เพราะไม่ค่อยได้ลุกไปใหน อยากเห็นอะไรก็ดับเบิ้ลคลิกเอา แถมยังปวดข้อมือขวาอีก เพราะนั่งดับเบิ้ลคลิกทั้งวัน...
ส่วนผม...ขอหลบไปงีบสักพักก่อนละครับ เมื่อคืนนั่งดึกไปหน่อย...ZZzz...
Create Date : 18 กันยายน 2551 |
Last Update : 16 ตุลาคม 2551 21:06:11 น. |
|
4 comments
|
Counter : 6542 Pageviews. |
|
|
|
|