...ส บ า ย ๆ ส ไ ต ล์ มื อ ไ ม่ PRO แ ถ ม ยั ง... LOWFESSIONAL ...
 
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.  
 
 
 
 
บรรทัดสุดท้ายคืออะไร ใช้อย่างไงอะครับ
 
 

โดย: แดนน้อย IP: 202.176.94.17 วันที่: 28 กันยายน 2551 เวลา:13:48:00 น.  

 
 
 
ลองค้นกุเกิ้ลด้วย CenterOnCell VBA ก็จะพบกับตัวอย่างโค้ดครับ

CenterOnCell Activecell นำมาใช้เพราะว่า บางชีทงานที่มีการ Freeze ส่วนบนเอาไว้ เวลาเราสั่ง Activecell ไปก็จริง แต่อาจจะหลบไป Active อยู่นอกขอบเขตจอภาพได้ เช่น อาจจะหลบอยู่ในส่วนที่ Freeze ไว้ โค้ดนี้จะช่วย "ดึง" มาแสดงไว้ที่กลางจอทุกครั้งครับผม
 
 

โดย: mitrapap วันที่: 29 กันยายน 2551 เวลา:10:10:36 น.  

 
 
 
//www.cpearson.com/excel/zoom.htm
 
 

โดย: mitrapap วันที่: 29 กันยายน 2551 เวลา:10:11:58 น.  

 
 
 
สวัสดีครับ คุณมิตรภาพ
ผมเพิ่งกลับเข้ามาตอนดึกๆ เลยเพิ่งมาเปิดอ่านบล็อก
ประหลาดใจมาก ที่มีคนแวะมาอวยพรให้เยอะแยะมากมาย
กว่าผมจะไล่ขอบคุณหมดทุกคน ก็เลยเที่ยงคืนแล้ว
ก็..ขอให้มีความสุขเช่นกันครับ
 
 

โดย: ครูเอก วันที่: 13 ตุลาคม 2551 เวลา:1:00:41 น.  

Name
Opinion
*ใช้ code html ตกแต่งข้อความได้เฉพาะสมาชิก

mitrapap
 
Location :
สระบุรี Thailand

[Profile ทั้งหมด]

ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 18 คน [?]




Free Domain Names @ .co.nr!
[Add mitrapap's blog to your web]

MY VIP Friend

 
pantip.com pantipmarket.com pantown.com