:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

การแสดงข้อมูลที่ Filter

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#41

Post by Bafnet »

สวัสดีครับ
ผมได้ไปตามกระทู้ที่อาจารย์บอกครับ(เป็นเรื่องราวของการบันทึกลูกค้าและพนักงาน รายการอาหาร
และได้ลองอ่านดู ไม่พบประเด็นของการกำหนดให้ listbox มีเส้นตารางเลยครับ
นอกจากประเด็น
1.การบันทึกข้อมูล
2.การกำหนดให้ Userform แสดงเต็มจอ
3.การกำหนด Rowsource ให้กับ listbox (ซึ่งในกระทู้ข้างต้นมี Listbox อยู่อันเดียว)
แต่กระทู้ข้างต้นก็ทำให้ผมเห็นการบันทึกในคำสั่งที่ใช้ Offset และส่งค่าข้อมูลจาก TextBox ไปยังตำแหน่งที่ต้องการโดยตรง
ซึ่งต่างจากคำสั่งที่ผมใช้คือ textbox ส่งค่ามาที่ Range จากนั้นจึงส่ง Range ที่กำหนดไปบันทึก ซึ่งเป็นวิธีที่อาจารย์สอนผมในคราวแรก
ข้อแตกต่างที่ได้คือการใช้ Offset ดูจะเป็นกระบวนการที่กระชับ ทุกอย่างเก็บค่าอยู่ใน Userform ชอบครับ :lol:

รบกวนเรื่องlistbox นะครับ
...อาจารย์ครับการที่เราใช้คำสั่งที่ บันทึกจากมาโคร มันมีความเสถียรแตกต่างกับการใช้คำสั่งที่เราเขียนตรงใน VBA ไหมครับ
:roll:
User avatar
snasui
Site Admin
Site Admin
Posts: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การแสดงข้อมูลที่ Filter

#42

Post by snasui »

Bafnet wrote:ผมได้ไปตามกระทู้ที่อาจารย์บอกครับ(เป็นเรื่องราวของการบันทึกลูกค้าและพนักงาน รายการอาหาร
และได้ลองอ่านดู ไม่พบประเด็นของการกำหนดให้ listbox มีเส้นตารางเลยครับ
ไม่มี Properties ในการกำหนด Gridline ของ ListBox ครับ
Bafnet wrote:การที่เราใช้คำสั่งที่ บันทึกจากมาโคร มันมีความเสถียรแตกต่างกับการใช้คำสั่งที่เราเขียนตรงใน VBA ไหมครับ
ความเสถียรไม่น่าจะต่างกัน หากเขียน Code เองได้อย่างแม่นยำครับ สำหรับ Code ที่ได้จากการบันทึก Macro ย่อมมั่นใจได้ว่า Code มีความแม่นยำ ทำงานได้ถูกต้องแน่นอน แต่อาจจะได้ Code ที่เกินความจำเป็นมาให้ด้วย ซึ่งเราควรที่จะปรับออกไปให้เหลือเท่าที่จำเป็นเพื่อให้มีความกระชับทำงานได้รวดเร็ว

ผมสังเกตพบว่าส่วนใหญ่ที่ไม่เสถียรเกิดจากการเขียนของเราเองทั้งนั้นครับ เช่นเขียนวนลูบไม่รู้จักจบจนเครื่องแฮงก์ไปเอง การไม่ประกาศตัวแปร หรือประกาศตัวแปรไม่เหมาะสม ทำให้การใช้งานหน่วยความจำสิ้นเปลือง ส่งผลให้ Code ทำงานช้า นอกจากนั้นแล้วการกลับมาแก้ไขภายหลังก็ช้าด้วย เพราะจะแกะไม่ออกว่าตัวแปรที่กำลังติดตามนั้นคืออะไร :lol:
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#43

Post by Bafnet »

สวัสดีครับ...อาจารย์ครับที่บอกว่า
"ไม่มี Properties ในการกำหนด Gridline ของ ListBox ครับ"
ไม่เข้าใจจริงๆครับ :roll:
ผมลองดูใน Properties ของ ListBox ด้านซ้ายมือ ก็ไม่เจอ Properties/Gridline ของ ListBox
หรืออาจารย์จะบอกว่า เมื่อไม่มี Properties/Gridline ของ ListBox ก็จะกำหนดให้ ListBox มีเส้นตารางไม่ได้
ถ้าตามไฟล์ตัวอย่างที่ผมส่งไป ถ้าเราจะให้ ListBox มีเส้นตารางเหมือนข้อมูลที่ชีทที่เป็น Rowsource
ไม่เข้าใจครับ ขออภัยจริงๆ
User avatar
snasui
Site Admin
Site Admin
Posts: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การแสดงข้อมูลที่ Filter

#44

Post by snasui »

Bafnet wrote:หรืออาจารย์จะบอกว่า เมื่อไม่มี Properties/Gridline ของ ListBox ก็จะกำหนดให้ ListBox มีเส้นตารางไม่ได้
ครับ เข้าใจถูกต้องร้อยเปอร์เซ็นต์เต็มเปรี๊ยะไม่มีหย่อนแม้แต่นิดเดียวครับ :lol:

ดูเหมือนจะงงเรื่อง Properties อยู่นะครับ :?

Properties คือคุณลักษณะที่มีของ Object เพื่อให้เรากำหนดค่าได้ เช่น กว้าง, สูง, ชิดซ้าย, ชิดขวา, เอียง, บาง, หนา ฯลฯ

ส่วน Method คือ Action หรือการกระทำของ Object เช่น Copy, Paste, Add, Delete, Refresh เป็นต้น

ซึ่ง Properties และ Method นี้แต่ละ Object มีไม่เหมือนกัน เช่น ListBox โดยค่า Default แล้วไม่มี Properties ที่เป็น Greidline หรือเส้นตาราง ก็ไม่สามารถกำหนดค่าให้มันมีได้ หากจะกำหนดให้มีก็อาจจะใช้เทคนิคอื่นเข้ามาช่วย ยกตัวอย่างเช่นเขียน Class เพื่อสร้าง Gridline ขึ้นมาใช้กับ ListBox เองหรือไปเรียกฟังก์ชั่นของ Windows ผ่านฟังก์ชั่นที่เรียกว่า API (Application Programming Interface) มาใช้
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#45

Post by Bafnet »

:lol: ผมก็เลยงง. เพราะตอนหัดเขียนVB ได้ตำราของVB6 ตอนนั้นไม่มีหนังสือ Excell ก็เห็น Properties/Gridline ของ ListBox
ผมทราบตั้งแต่แรกครับว่าในexell Properties/Gridline ของ ListBox ในexell ไม่มี
snasui wrote::D เราสามารถทำ ListBox ให้มีลักษณะเหมือนตารางได้ตามจำนวนคอลัมน์และจำนวน List ได้ครับ
ลองส่งไฟล์ตัวอย่างมาดูจะได้ทดสอบได้สะดวกครับ
เลยคิดว่ามีวิธี
เดี๋ยวมาใหม่ครับ ไปทำต่อจะได้มีปัญหาๆๆมาถามอาจารย์ต่อ :lol:
ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การแสดงข้อมูลที่ Filter

#46

Post by snasui »

:D ผมอาจจะพูดย่อไปหน่อยครับ เหมือนตารางหมายถึงมีลักษณะแถวและคอลัมน์ครับ :P
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#47

Post by Bafnet »

สวัสดีครับอาจารย์
อ่า...อันนี้ต้องให้อาจารย์ช่วยครับ

Private Sub Report()
Dim ri As Range
On Error Resume Next
With Workbooks("DumP.xlsm").Worksheets("Report")
Set ri = .Range(.Range("A1"), .Range("I65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ri.Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
ri.PrintOut
End Sub

อาจารย์ครับมีสั้นและกระชับกว่านี้ไหมครับ เพื่อกำหนดให้ ri มีเส้นตาราง ขอจริงๆครับ

ประเด็นที่ 2 Worksheets("Report") เป็นชีทที่รับค่าข้อมูล ซึ่งข้อมูลมีลักษณะต่างกันตามข้อมูลที่ผู้ใช้เรียก
ความต้องการคือ หลังจาก

Private Sub Report()
Dim ri As Range
On Error Resume Next
With Workbooks("DumP.xlsm").Worksheets("Report")
Set ri = .Range(.Range("A1"), .Range("I65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ri.Select
จะกำหนดค่าอย่างไรให้ ช่วงความกว้างของ Columm ของช่วงข้อมูล ri มีความกว้างพอดีกับเนื้อหา
(เนื้อหาที่มากที่สุดของแต่ละคอลัมม์)


รบกวนด้วยนะครับ ช่วยด้วยนะครับ :flw:
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#48

Post by Bafnet »

สวัสดีครับ.(อีกครั้ง)
ประเด็นที่2 ได้แล้วครับ

Private Sub Report()
Dim ri As Range
On Error Resume Next
With Workbooks("DumP.xlsm").Worksheets("Report")
Set ri = .Range(.Range("A1"), .Range("I65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ri.Select
Selection.EntireColumn.AutoFit

:lol: ขอบคุณมากๆครับ รบกวนอาจารย์ประเด็นที่ 1 นะครับ(ที่สั้นกว่านั้น)
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#49

Post by Bafnet »

สวัสดีอีกครั้งครับ..อาจารย์
ประเด็นที่1.สั้นกว่า...พยายามได้ดังนี้ครับ

Private Sub Report()
Dim ri As Range
On Error Resume Next
With Worksheets("Sheet1")
Set ri = .Range(.Range("B1"), .Range("I65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ri.Select
Selection.EntireColumn.AutoFit
ri.Borders(xlDiagonalDown).LineStyle = xlNone
ri.Borders(xlDiagonalUp).LineStyle = xlNone
ri.Borders(xlEdgeLeft).LineStyle = xlContinuous
ri.Borders(xlEdgeTop).LineStyle = xlContinuous
ri.Borders(xlEdgeBottom).LineStyle = xlContinuous
ri.Borders(xlEdgeRight).LineStyle = xlContinuous
ri.Borders(xlInsideHorizontal).LineStyle = xlContinuous
ri.Borders(xlInsideVertical).LineStyle = xlContinuous
ri.PrintPreview
End Sub

มีสั้นกว่าอีกมั๊ยครับอาจารย์ ผมรบกวนอาจารย์อีกเรื่องนะครับ จากคำสั่งข้างต้น ผมต้องเขียน ri.ทุกครั้งที่มีคำสั่ง
รบกวนสอนวิธีเขียนแบบว่า ri.คำสั่งแรก, คำสั่งที่2, คำสั่งที่3... (ri.ครั้งเดียว ไม่ต้องชี้ข้อมูลทุกครั้ง :lol: )

ขอบคุณครับ...1.35 ไปนอนก่อนนะครับ :D
User avatar
snasui
Site Admin
Site Admin
Posts: 30750
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: การแสดงข้อมูลที่ Filter

#50

Post by snasui »

:D สามารถใช้ With เข้ามาช่วยเพื่อไม่ต้องอ้างถึง Object ซ้ำ ๆ ตามตัวอย่างด้านล่างครับ

Code: Select all

Selection.EntireColumn.AutoFit
With Selection
   .Borders(xlEdgeLeft).LineStyle = xlContinuous
   .Borders(xlEdgeTop).LineStyle = xlContinuous
   .Borders(xlEdgeBottom).LineStyle = xlContinuous
   .Borders(xlEdgeRight).LineStyle = xlContinuous
   .Borders(xlInsideHorizontal).LineStyle = xlContinuous
   .Borders(xlInsideVertical).LineStyle = xlContinuous
End With
Post Reply