Page 2 of 3

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

Posted: Fri Jul 29, 2011 6:40 pm
by snasui
Bafnet wrote:Sheet10.Cells(r, 6).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1) & "),FileB!A:T,3,0)"
จากตัวอย่าง Code ข้างบน กรณีอ้างอิงตำแหน่งเซลล์ใน Vlookup ลองปรับเป็น
Sheet10.Cells(r, 6).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & "),FileB!A:T,3,0)"

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

Posted: Fri Jul 29, 2011 6:59 pm
by Bafnet
อาจารย์ครับ ลองทดสอบดูเป็นเพราะที่ range(A:A) ที่ชีท FileBเป็นตัวเลขที่อยู่ในรูปข้อความ
พอแก้เป็นตัวเลขก็ใช้ได้ แต่ผมไม่อยากแก้ให้อยู่ในรูปแบบตัวเลข เพราะมันมีเป็นหมื่นรายการ
และกลัวว่าคำสั่งที่เกี่ยวข้องกับ range(A:A) ที่ FileB ที่ประกาศตัวแปรเป็น String จะมีผล
ขอVLOOkUp ข้อความนะครับ :tt:
:lol:

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

Posted: Fri Jul 29, 2011 7:17 pm
by snasui
:lol: เริ่มงงครับ :P

กรณีผลจากการแปลสูตรที่ได้จาก Code ในความเห็นก่อนคือ =VLOOKUP(40014235,FileB!A:T,3,0) ซึ่งจะเห็นว่า 40014235 เป็น Number หากเป็นข้อความจะกลายเป็น "40014235"

การบังคับให้ Sheet9.Cells(r, 3) เป็น Text สามารถกำหนดเป็น

Cstr(Sheet9.Cells(r, 3)) เพื่อจะใช้ Vlookup กับค่า Text

หรือจะกำหนดให้เป็น Number สามารถกำหนดเป็น

Clng(Sheet9.Cells(r, 3)) เพื่อจะใช้ Vlookup กับ Number

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

Posted: Fri Jul 29, 2011 7:39 pm
by Bafnet
Debug ครับ
ที่เรียนอาจารย์ว่าเป็นข้อความเพราะว่าตามตัวอย่าง1.Xlsm ที่แนบ
ที่Colum A จะเห็นว่าตัวเลขถูกเก็บไว้ในรูปแบบข้อความ หรือมีอัญประกาศเดี่ยวนำหน้า (คอมเมนต์มันบอกครับ :lol: )
ก็เลยลองนั่ง Delete อะไรก็ตามที่อยู่หน้าตัวเลข ทั้งๆที่มองไม่เห็น :roll: ไปที่ละบรรทัด
ก็สังเกตุว่าที่Colum A หลังจากDelete ตัวเลขก็เขยิบมาชิดขวา และเมื่อรัน สูตรVlookUpในtolone ก็ได้ผลครับ

อาจารย์ครับตอนนี้ได้ผลแล้วครับ
Sheet10.Cells(r, 6).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & "),FileB!A:T,3,0)"

ต้องเอา ) หลัง ).Address & " ออกครับ
Sheet10.Cells(r, 6).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & ",FileB!A:T,3,0)"

ขอบคุณครับ ไม่มีอาจารย์ไม่รู้จะทำไงดี ไปทำต่อนะครับเดี๋ยวมาใหม่ ตีสองตีสามทุกคืน :lol:

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

Posted: Fri Jul 29, 2011 7:46 pm
by snasui
:shock: โอ้ว...โทษทีครับ ผม Copy มาจาก Link นี้ viewtopic.php?p=8265#p8265 โดยไม่ได้สังเกตว่าของเดิมมีวงเล็บอยู่ด้วย เลยทำให้งงกันไปใหญ่ เมื่อแก้ปัญหาได้แล้วก็ดีใจด้วยครับ :P

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

Posted: Fri Jul 29, 2011 7:50 pm
by Bafnet
มาอีกแล้ว :lol:
ได้แบบนี้ครับ

Sub Tolone()
Dim r As Integer
Dim i As Single
Dim y As Single
With Workbooks("DumP.xlsm").Worksheets("FileB")
Sheet9.Range("T1").Value = "˹ÕéÃÇÁ"
r = 2
Do Until Sheet9.Cells(r, 1).Value = ""
i = Sheet9.Cells(r, 12).Value
y = Sheet9.Cells(r, 14).Value
Sheet9.Cells(r, 20).Value = i + y
Sheet9.Cells(r, 15).Formula = "=VLOOKUP(" & Sheet9.Cells(r, 3) & ",FileA!A:G,5,0)"
Sheet9.Cells(r, 16).Formula = "=VLOOKUP(" & Sheet9.Cells(r, 3) & ",FileA!A:G,7,0)"
r = r + 1
Loop
End With
With Workbooks("DumP.xlsm").Worksheets("FileC")
Sheet10.Range("F1").Value = "àÅ¢·ÐàºÕ¹"
Sheet10.Range("G1").Value = "ª×èÍ-Ê¡ØÅ"
Sheet10.Range("H1").Value = "·ÕèÍÂÙè"
Sheet10.Range("I1").Value = "ÃËÑÊâ¤Ã§¡ÒÃ"
r = 2
Do Until Sheet10.Cells(r, 1).Value = ""
Sheet10.Cells(r, 6).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & ",FileB!A:T,3,0)"
Sheet10.Cells(r, 7).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & ",FileB!A:T,15,0)"
Sheet10.Cells(r, 8).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & ",FileB!A:T,16,0)"
Sheet10.Cells(r, 9).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & ",FileB!A:T,17,0)"
r = r + 1
Loop
End With
End Sub

แต่นานมากจนน่ากลัว จะไม่ถามนะครับว่ามีวิธีไหนเร็วกว่า :lol:
แต่อยากถามว่า มีเครื่องมือไหนบ้าง เช่น ProgressBar ที่เราจะสร้างบนUSERFORM เพื่อให้ผู้ใช้ทราบว่าโปรแกรมกำลังประมวลผล
คล้ายเวลาเราติดตั้งโปรแกรม :lol:

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

Posted: Fri Jul 29, 2011 7:59 pm
by snasui
:D สำหรับวิธีที่เร็วกว่า เราจะหลีกเลี่ยงการ Vlookup ทั้งคอลัมน์อย่างที่เขียนมาครับ เช่น A:T แต่จะกำหนดช่วงข้อมูลไว้ล่วงหน้าเช่น A1:T1000 จะเห็นผลต่างชัดเจน หรือจะกำหนดตัวแปรไว้ก่อนก็จะดีครับ จะได้เพิ่มลดได้ตามปริมาณข้อมูลที่มีซึ่งยืดหยุ่นกว่าการกำหนดตายตัวแบบ A1:T1000

ส่วนการทำ Progress Bar ลองศึกษาดูต้นฉบับที่นี่ http://spreadsheetpage.com/index.php/ti ... indicator/ และลองดูการปรับใช้ที่กระทู้นี้ครับ http://www.snasui.com/viewtopic.php?p=5703#p5703

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

Posted: Fri Jul 29, 2011 8:20 pm
by Bafnet
อ่า...เห็นด้วยครับคราวแรกผมก็ตั้งใจจะกำหนดข้อมูลเหมือนที่อาจารย์แนะนำ
แต่ก็ไม่ทราบว่าจะกำหนดขอบเขตข้อมูลอย่างไร เฉพาะหน่วยอำเภออย่างของผม ชีทFileC มี 8,000 กว่ารายการ
จากจำนวนลูกค้า 1,700 คน
แต่ถ้าเกิดเป็นสาขาแถวภาคกลาง อีสาน ลูกค้าเกษตรกร หมื่นกว่าคน ชีทFileC ก็จะประมาณ 47,000 กว่ารายการ
นี่ล่ะครับที่บอกว่าช้าจนน่ากลัว ปัตตานีสร้างโปรแกรมแล้วอีสานใช้ไม่ได้ แบงค์เอาผมตายเลยครับ :lol:
แต่คาดว่าต้องเปลี่ยนครับ คือไปVlookUp หลังกรองข้อมูลจะดีกว่า ข้อมูลอาจน้อยลงพอที่เราจะกำหนดขอบเขตได้

:roll: แต่จะว่าไปมัน Loop และ Vlookup ตามเซลที่ไม่ว่างไม่ใช่หรอครับ
Do Until Sheet9.Cells(r, 1).Value = ""
ไม่ใช่สิ.อาจารย์น่าจะหมายถึงตอนให้มันVlookup มันต้องวิ่งดูข้อมูลทั้ง Range..อืมใช่ๆๆ :lol:

ขอบคุรมากครับ
เดี๋ยวจะไปตามลิงค์ที่อาจารย์บอกครับ

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

Posted: Fri Jul 29, 2011 11:46 pm
by Bafnet
ไปอ่านมาแล้วครับ
แต่ผมก็งงๆ ขั้นตอนการสร้างฟอร์มเข้าใจ แต่คำสั่งครับไม่ทราบจะนำมาใช้กับ Tolone อย่างไร
เพราะ Tolone ทำงานกับสองชีทคือ FileB และ FileC

Sub Tolone()
Dim Counter As Integer
Dim RowMax As Integer, ColMax As Integer
Dim c As Integer
Dim r As Integer
Dim i As Single
Dim Y As Single
Dim PctDone As Single
Application.ScreenUpdating = False
Counter = 1 ' คืออะไร
RowMax = 100 'ผมคิดว่าน่าจะแทนด้วย RowMax = Sheets("FileB").Range("AA1").value โดยให้ Sheets("FileB").Range("AA1")= COUNTA(A:A)
ColMax = 25 'ผมไม่เข้าใจ คืออะไร
With Workbooks("DumP.xlsm").Worksheets("FileB")
Sheets("FileB").Activate
Sheet9.Range("O:P").Value = ""
Sheet9.Range("T1").Value = "˹ÕéÃÇÁ"
Sheet9.Range("O1").Value = "ª×èÍÊ¡ØÅ"
Sheet9.Range("P1").Value = "·ÕèÍÂÙè"
r = 2
Do Until r = Rowmax
i = Sheet9.Cells(r, 12).Value
Y = Sheet9.Cells(r, 14).Value
Sheet9.Cells(r, 20).Value = i + Y
Sheet9.Cells(r, 15).Formula = "=VLOOKUP(" & Sheet9.Cells(r, 3) & ",FileA!A:G,5,0)"
Sheet9.Cells(r, 16).Formula = "=VLOOKUP(" & Sheet9.Cells(r, 3) & ",FileA!A:G,7,0)"
PctDone = Counter / (RowMax * ColMax)
With UserForm1
.FrameProgress.Caption = Format(PctDone, "0%")
.LabelProgress.Width = PctDone * (.FrameProgress.Width - 10)
End With
' The DoEvents statement is responsible for the form updating
DoEvents
r = r + 1
Loop
End With

แล้วคำสั่งที่ Vlookup FileC จะไปยังไง งงงงงงๆ :roll:

Unload UserForm1
End Sub

มีอีกอย่างที่ผมคิดนะครับ คือที่่ Sheets("FileB").Range("AA1")= COUNTA(A:A)
เมื่อสั่งรัน Tolone ตัวเลขในเซลAA1 ก็วิ่งตามรายการที่เกิดขึ้น ทำอย่างไรจะให้ตัวเลขนี้แสดงบน UserForm
ผมเขียนคำสั่งเพิ่ม ต่อจาก VlookUp ก่อนบรรทัด r = r+1
....
TextBox7.value = Sheet9.Range("AA1").value
r = r+1
Loop
มันก็แสดงผลนะครับ แต่เป็นตอนจบเลยทีเดียว :lol:

:roll: อยากได้ครับ :oops:

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

Posted: Sat Jul 30, 2011 12:51 am
by Bafnet
ได้แล้วครับ
แต่ใช้การรันของเลขแทยครับ
ขอบคุณมากครับ
:lol:

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

Posted: Sat Jul 30, 2011 11:27 am
by Bafnet
สวัสดีครับ
ขอรบกวนถามอะไรหน่อยนะครับ
Application.ScreenUpdating = True
Application.ScreenUpdating = False
ความหมายคืออะไร
ต่างกันอย่างไร
ใช้ในโอกาสใดจึงเหมาะสม
ขอบคุณครับ

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

Posted: Sat Jul 30, 2011 11:48 am
by snasui
8-)
Bafnet wrote:Application.ScreenUpdating = False
ใช้เมื่อไม่ต้องการให้หน้าจอแสดงอาการวูบวาบเมื่อ Code กำลังทำงานครับ ยกตัวอย่างเช่นใน Code มีการเขียนเพื่อให้มีการ Activate, Select, Copy ข้ามไฟล์ ข้ามชีท ฯลฯ อาการวูบวาบตามการกระทำของโปรแกรมเช่นนี้จะเป็นตัวหน่วงให้ Code ทำงานได้ช้า หากต้องการให้เร็วขึ้นก็ต้องไปกำหนดให้โปรแกรมไม่ต้อง Update Screen ที่กำลังทำงาน

เมื่อทำงานจบแล้วจึงค่อยมากำหนดให้แสดงทำงานตามปกติด้วย Code ==> Application.ScreenUpdating = True

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

Posted: Sat Jul 30, 2011 7:51 pm
by Bafnet
สวัสดีครับ
อาจารย์ครับ ตอนนี้เกิดปัญหามากมายเลยครับ ตั้งแต่การFilter นั่งทำพอบันทึก exell ก็บอกว่าเกิดข้อผิดพลาดอย่างร้ายแรง :flw:
กำลังรื้อหน้านี้ใหม่ครับ
รบกวนสอบถามเรื่อง filter ครับ จากmacro

Sheets("FileB").Activate
Columns("E:E").Select
Range("E:E").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"W1"), Unique:=True
Columns("G:G").Select
Columns("G:G").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("X1" _
), Unique:=True
Columns("Q:Q").Select
Columns("Q:Q").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("Y1" _
), Unique:=True
Sheet17.Range("BC:BC").Value = Sheet9.Range("W:W").Value
Sheet17.Range("BD:BD").Value = Sheet9.Range("X:X").Value
Sheet17.Range("BE:BE").Value = Sheet9.Range("Y:Y").Value
Sheets("Coplone").Activate
Columns("BC:BC").Select
Selection.Sort Key1:=Range("BC2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Columns("BD:BD").Select
Selection.Sort Key1:=Range("BD2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Columns("BE:BE").Select
Selection.Sort Key1:=Range("BE2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
MsgBox "ÃǺÃÇÁ¢éÍÁÙÅÊÁºÙóì", vbOKOnly, "DumP"
Label18.Caption = "¢éÍÁÙÅÃÒ§ҹÊÁºÙóì"

ความต้องการคือแยกข้อมูลในคอลัมที่กำหนด ให้เหลือค่าที่ไม่ซ้ำเพื่อที่ผมจะนำค่าที่ได้ไปเป็นRowsource ให้กับCombobox
มีวิธีเขียน คำสั่งโดยตรงให้ผมหน่อยนะครับ ชีทFileB ตามตัวย่างที่เคยแนบนะครับ
ขอบคุณครับ

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

Posted: Sat Jul 30, 2011 8:40 pm
by snasui
:D ผมลองทดสอบ Code ด้านล่างนี้ทำงานถูกต้องครับ

Code: Select all

Sheets("FileB").Activate
 Columns("E:E").Select
 Range("E:E").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
 "W1"), Unique:=True
 Columns("G:G").Select
 Columns("G:G").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("X1" _
 ), Unique:=True
 Columns("Q:Q").Select
 Columns("Q:Q").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("Y1" _
 ), Unique:=True
และ Code ด้านล่าง

Code: Select all

Sheet17.Range("BC:BC").Value = Sheet9.Range("W:W").Value
 Sheet17.Range("BD:BD").Value = Sheet9.Range("X:X").Value
 Sheet17.Range("BE:BE").Value = Sheet9.Range("Y:Y").Value
ควรจะเปลี่ยนเป็น

Code: Select all

Sheet9.Range("W:W").Copy Sheet17.Range("BC:BC")
 Sheet9.Range("X:X").Copy Sheet17.Range("BD:BD")
 Sheet9.Range("Y:Y").Copy Sheet17.Range("BE:BE")
ซึ่งเป็นการ Copy ไปวางทั้งหมด หากต้องการ Copy ไปวางเฉพาะ Value ให้เปลี่ยนเป็น

Code: Select all

Sheet9.Range("W:W").Copy
Sheet17.Range("BC:BC").PasteSpecial xlPasteValues
Sheet9.Range("X:X").Copy
Sheet17.Range("BD:BD").PasteSpecial xlPasteValues
Sheet9.Range("Y:Y").Copy
Sheet17.Range("BE:BE").PasteSpecial xlPasteValues

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

Posted: Sun Jul 31, 2011 11:22 pm
by Bafnet
สวัสดดีครับอาจารย์
ขอบคุณครับสำหรับข้อแนะนำการปรับเปลี่ยน code
อาจารย์ครับ การที่เราไปสั่งกรองข้อมูลที่มีสูตรอยู่ในตัว เช่น VlookuP
มีผลต่อการประมวลผลไหมครับ
ผมรู้สึกนะครับว่าตอนกรองตอนที่เซลมีค่าสูตรอยู่ทั้งรวนทั้งช้า
แต่หลังจากแก้โดยการ Vlookup ที่อื่นก่อน แล้วส่งช่วงข้อมูลมายังช่วงข้อมูลที่จะกรอง
รู้สึกคำสั่งกรองข้อมูลทำงานดีขึ้นอย่างผิดหูผิดตา หรือผมคิดไปเอง

ต่อไปก็เข้าสู่หน้ารายได้รายจ่ายครับ
ถามเลยนะครับ :lol:
บน Userform ประกอบด้วย TextBox จำนวนหลายตัว ดั่งภาพ
2.jpg
ตรงสดมม์ มูลค่า ถ้าผู้ใช้คีย์จำนวนเงิน แล้วจะให้ Textbox รวมโดยอัตโนมัติ ทำอย่างไรครับ
กำหนดให้ textBox ในฟิลด์มูลค่า คือ textbox1 และ 2 ,3 ลงมา และให้ TextBox10 คือรวม
ถ้าผมสร้างโมดูลที่ชื่อ Income
Sub Income
Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, f As Integer
Dim g As Integer, h As Integer, i As Integer, j As Integer, k As Integer, l As Integer, M As Integer
a = frmlone.TextBox1.Value
b = frmlone.TextBox2.Value
c = frmlone.TextBox3.Value
d = frmlone.TextBox4.Value
e = frmlone.TextBox5.Value
f = frmlone.TextBox6.Value
g = frmlone.TextBox7.Value
......
h = a+b+c+d+e+f+g 'การเขียนเพื่อรวมค่าทั้งหมดที่ถูกต้องเขียนอย่างไรครับ
frmlone.TextBox10.Value = h
End sub

แล้วที่ TextBox แต่ละตัวผมกำหนดแบบนี้
TextBox1_AfterUpdate()
TextBox1.Value = Format(TextBox1.Value, "#,##000")
Income.Income
End Sub

อาจารย์เห็นควรอย่างไรครับ ผมยังขาดพื้นฐานอีกมากหากมีอะไรชี้แนะผมด้วย ผมอยากให้มันเสถียรและไม่สับสนเหมือนคนเขียน :tt:

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

Posted: Sun Jul 31, 2011 11:37 pm
by snasui
:D จากคำถาม
Bafnet wrote:อาจารย์ครับ การที่เราไปสั่งกรองข้อมูลที่มีสูตรอยู่ในตัว เช่น VlookuP
มีผลต่อการประมวลผลไหมครับ
มีครับ ยิ่งข้อมูลมากและ Vlookup แบบทั้งคอลัมน์ ยิ่งจากหลาย ๆ คอลัมน์จะยิ่งช้าหนักเข้าไปอีก
Bafnet wrote:แต่หลังจากแก้โดยการ Vlookup ที่อื่นก่อน แล้วส่งช่วงข้อมูลมายังช่วงข้อมูลที่จะกรอง
รู้สึกคำสั่งกรองข้อมูลทำงานดีขึ้นอย่างผิดหูผิดตา หรือผมคิดไปเอง
ไม่ได้คิดไปเองครับ ความจริงเป็นเช่นนั้น Vlookup จากข้อมูลปริมาณมากเป็นตัวหน่วงแน่นอนครับ

สำหรับ Code ที่ถามมา ถ้าไม่มีปัญหาใดก็ใช้ได้ครับ ปกติเราไม่ต้องเน้นพิศดาร เขียนให้เข้าใจง่าย มี Comment ไว้ตามสมควร เพื่อว่าเมื่อต้องปรับปรุงภายหลังจะได้สะดวก

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

Posted: Mon Aug 01, 2011 1:11 am
by Bafnet
:o มิน่าๆ
ขอบคุณมากครับ
code ข้างต้นยังไม่ทราบว่าใช้ได้รึป่าว เพียงแต่คิดว่าน่าจะแบบนั้น :lol:
ไม่กล้า...เลยมาถามอาจารย์
มีอะไรพึ่งจะนึกออก ว่าจะถามอาจารย์หลายครั้งแล้วครับ
เรื่อง Listbox ครับ
1.เราสามารถกำหนดให้ Listbox มีเส้นตารางตามจำนวนคอลัมม์ และ จำนวน list ไหมครับ
2.เมื่อเราเลือกรายการใน Listbox ซึ่งมีคำสั่ง

Private Sub ListBox1_Click() 'แสดงผลข้อมูลลูกค้าจาก Range ที่กำหนด ซึ่งบางRange อาจเป็นค่าว่าง ผู้ใช้ต้องเติมข้อมูลผ่าน Textbox เพื่อ update ข้อมูลที่ไม่มี
On Error Resume Next
TextBox1.Value = Sheet15.Range("A3").Value
TextBox2.Value = Sheet15.Range("B3").Value
TextBox3.Value = Sheet15.Range("C3").Value
TextBox4.Value = Sheet15.Range("E3").Value
TextBox207.Value = Sheet15.Range("R3").Value
TextBox5.Value = TextBox207.Value
TextBox8.Value = Sheet15.Range("AC7").Text
TextBox9.Value = Sheet15.Range("AC9").Value
TextBox10.Value = Sheet15.Range("AC10").Value
TextBox11.Value = Sheet15.Range("AC11").Value
TextBox12.Value = Sheet15.Range("AC12").Value
TextBox13.Value = Sheet15.Range("AC13").Value
TextBox14.Value = Sheet15.Range("C30").Value
TextBox15.Value = Sheet15.Range("D30").Value
TextBox17.Value = Sheet15.Range("T3").Value (สมมติให้ range นี้เป็น "" คือไม่มีข้อมูล
TextBox16.Value = Sheet15.Range("B30").Value
TextBox18.Value = Sheet15.Range("S3").Value
TextBox19.Value = Sheet15.Range("F3").Value
TextBox20.Value = Sheet15.Range("D3").Value
TextBox21.Value = Sheet15.Range("H3").Value
TextBox22.Value = Sheet15.Range("G14").Value
ComboBox1.Value = Sheet15.Range("K3").Value
ListBox1.Clear 'เดิมไม่มีคำสั่งนี้ และเคยเขียน ListBox1.ClearSelect แต่ Debug
End Sub

ปัญหาที่เกิดคือ พอเราคีย์ข้อมูลใน Textbox ที่ว่าง ซึ่งใน Textbox ซึ่งมีคำสั่ง

Private Sub TextBox17_Change()
Sheet15.Range("T4").value = TextBox17.Value
End Sub
Textbox ไม่ยอมแสดงผลที่คีย์ มันกลายเป็นค่าที่ว่าง
คล้ายๆกับว่าคำสั่งของ Listbox ยังคงทำงานอยู่ ทำให้ TextBox มีค่าตามrange ที่ว่าง ตามคำสั่งของ listBox

หลังจากเลือกรายการใน ListBox เราจะเขียนคำสั่งใดครับให้ ListBox คืนค่าเหมือนก่อนที่จะเลือก(ไม่เป็นแถบสีฟ้า)
ListBox1.Clear :roll: ก่อน End sub

ขอบคุณครับ

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

Posted: Mon Aug 01, 2011 7:45 pm
by snasui
:D เราสามารถทำ ListBox ให้มีลักษณะเหมือนตารางได้ตามจำนวนคอลัมน์และจำนวน List ได้ครับ

ลองส่งไฟล์ตัวอย่างมาดูจะได้ทดสอบได้สะดวกครับ

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

Posted: Thu Aug 04, 2011 10:43 pm
by Bafnet
สวัสดีครับอาจารย์
หายไปวันกว่าๆไม่สบาย
วันนี้ส่งไฟล์ตัวอย่างมาให้ครับ(LIstBox)
ขอบคุณมากครับ
สมุดงาน2.xlsm

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

Posted: Thu Aug 04, 2011 10:56 pm
by snasui
:D ผมเพิ่งตอบอีกกระทู้ไปพอดี ลองประยุกต์ดูจากตัวอย่างในความเห็นนี้ดูก่อนครับ ติดตรงไหนถามมาได้เรื่อย ๆ ครับ viewtopic.php?p=8401#p8401