: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

Add value in ListBox

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
ANUSARA
Member
Member
Posts: 69
Joined: Wed Oct 06, 2010 11:12 pm

Add value in ListBox

#1

Post by ANUSARA »

อยากทำให้ข้อมูลที่เรา add ลงใน UserForm1 Page1 ไปขึ้น show ในListBox ของpage2 ของ UserForm1 เมื่อคลิกปุ่ม
Add New Value to Database
เพื่อให้เวลาคลิกเลือกดู ค่าเก่าที่เคย add ข้อมูลไว้ใน Select user value in database
ลองใส่คำสั่งที่ปุ่ม Add New Value to Database แล้วแต่ compile error ค่ะ


รบกวนช่วยดูว่าต้องแก้ไขตรงไหนค่ะ

ขอบคุณนะคะ

แนบไฟล์มาด้วยนะคะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add value in ListBox

#2

Post by snasui »

:D สำหรับ ListBox สามารถใช้การ AddItem เข้าไปได้ครับ

การกำหนดค่าให้กับ Object โดยอ้าง Object อื่น ๆ ก็สามารถอ้างถึงโดยตรง ยกตัวอย่างเช่น

ต้องการให้ข้อความใน TextBox2 มีค่าเหมือน TextBox1 สามารถใช้ Statement ตามด้านล่าง

Code: Select all

TextBox2.Text = TextBox1.Text
หากต้องการให้ ListBox1 มีข้อความเหมือน TextBox1 สามารถใช้ Statement ตามด้านล่าง

Code: Select all

ListBox1.AddItem TextBox1.Text
Call นั้นใช้สำหรับการเรียนใช้ฟังก์ชั่นหรือ Procedure จะใช้เช่นตัวอย่างที่แนบคือ Call Userform ไม่ได้ครับ
ANUSARA
Member
Member
Posts: 69
Joined: Wed Oct 06, 2010 11:12 pm

Re: Add value in ListBox

#3

Post by ANUSARA »

ลองใส่ code
TextBox8_Name = ListBox1
ListBox1.AddItem = TextBox8_Name
เพิ่มตามที่แนะนำแล้วค่ะแต่ยังขึ้น compile error ค่ะ และค่าก็ยังไม่แสดงใน ListBox ค่ะ ต้องแก้ไขต่ออย่างไรคะ

Private Sub CommandButton1_Click()
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Database")

'check for a name
If Trim(Me.TextBox8_Name.Value) = "" Then
Me.TextBox8_Name.SetFocus
MsgBox "Please enter a name of raw material or chemical"
Exit Sub
End If

'check for a CF
If Trim(Me.TxtBox3.Value) = "" Then
Me.TxtBox3.SetFocus
MsgBox "Please enter value"
Exit Sub

End If

If Not IsNumeric(TxtBox3) Then
MsgBox "Please enter numeric."
Me.TxtBox3.Text = "0.00"
Exit Sub
End If

Answer = MsgBox("Do you want save change?", 1 + 32, "Create record")

If Answer = 1 Then

'find first empty row in database
iRow = ws.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row

'copy the data to the database
ws.Cells(iRow, 2).Value = Me.TextBox2.Value
ws.Cells(iRow, 3).Value = Me.TextBox8_Name.Value
ws.Cells(iRow, 4).Value = Me.TxtBox3.Value
ws.Cells(iRow, 5).Value = "kg"
ws.Cells(iRow, 6).Value = Me.TxtBox4_Source.Value
ws.Cells(iRow, 7).Value = Me.TextBox5_Year.Value
ws.Cells(iRow, 8).Value = Me.TextBox6_Location.Value
ws.Cells(iRow, 9).Value = Me.TextBox7_Comment.Value

'clear the data
Me.TextBox8_Name.Value = ""
Me.TxtBox3.Value = ""
Me.TxtBox4_Source.Value = ""
Me.TextBox5_Year.Value = ""
Me.TextBox6_Location.Value = ""
Me.TextBox7_Comment.Value = ""

'TextBox8_Name = ListBox1
'ListBox1.AddItem = TextBox8_Name

'Unload Me

'ElseIf Answer = 2 Then
' Unload Me
'Exit Sub

End If

'If Page1.TextBox8_Name.Value <> "" Then
'With ThisWorkbook.Worksheets("Database")
'Row = .Cells(2, 3).End(xlDown).Row + 1
'.Cells(Row, 3).Value = UserForm1.TextBox8_Name.Value
'End With
'Call UserForm1.ListBox1
'UserForm2.TextBox1.Value = ""
'End If

End Sub
ขอบคุณค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add value in ListBox

#4

Post by snasui »

:D ช่วยแก้ Code ให้แสดงเป็น Code ดูวิธีตาม link นี้ครับ viewtopic.php?f=3&t=1187

และจากที่เขียนมา

Code: Select all

 ListBox1.AddItem = TextBox8_Name
ไม่ถูกต้องครับ ลองอ่านที่ผมแนะนำไปใหม่อีกรอบครับ
ANUSARA
Member
Member
Posts: 69
Joined: Wed Oct 06, 2010 11:12 pm

Re: Add value in ListBox

#5

Post by ANUSARA »

ลองเอา code ListBox1.AddItem = TextBox8_Name ใส่ดูแล้วก็ยังขึ้น compile error อยู่ค่ะ รบกวนช่วยดูด้วยนะคะ ขอบคุณค่ะ

Code: Select all

Private Sub CommandButton1_Click()
Dim iRow As Long
    Dim ws As Worksheet
    Set ws = Worksheets("Database")

    'check for a name
    If Trim(Me.TextBox8_Name.Value) = "" Then
        Me.TextBox8_Name.SetFocus
        MsgBox "Please enter a name of raw material or chemical"
    Exit Sub
    End If

    'check for a CF
    If Trim(Me.TxtBox3.Value) = "" Then
     Me.TxtBox3.SetFocus
     MsgBox "Please enter value"
    Exit Sub
  
End If

    If Not IsNumeric(TxtBox3) Then
        MsgBox "Please enter numeric."
        Me.TxtBox3.Text = "0.00"
        Exit Sub
    End If

Answer = MsgBox("Do you want save change?", 1 + 32, "Create record")
    
If Answer = 1 Then

 'find first empty row in database
    iRow = ws.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row

'copy the data to the database
    ws.Cells(iRow, 2).Value = Me.TextBox2.Value
    ws.Cells(iRow, 3).Value = Me.TextBox8_Name.Value
    ws.Cells(iRow, 4).Value = Me.TxtBox3.Value
    ws.Cells(iRow, 5).Value = "kg"
    ws.Cells(iRow, 6).Value = Me.TxtBox4_Source.Value
    ws.Cells(iRow, 7).Value = Me.TextBox5_Year.Value
    ws.Cells(iRow, 8).Value = Me.TextBox6_Location.Value
    ws.Cells(iRow, 9).Value = Me.TextBox7_Comment.Value

'clear the data
    Me.TextBox8_Name.Value = ""
    Me.TxtBox3.Value = ""
    Me.TxtBox4_Source.Value = ""
    Me.TextBox5_Year.Value = ""
    Me.TextBox6_Location.Value = ""
    Me.TextBox7_Comment.Value = ""
    
    
'Unload Me

'ElseIf Answer = 2 Then
   ' Unload Me
'Exit Sub

End If

'If Page1.TextBox8_Name.Value <> "" Then
'With ThisWorkbook.Worksheets("Database")
    'Row = .Cells(2, 3).End(xlDown).Row + 1
    '.Cells(Row, 3).Value = UserForm1.TextBox8_Name.Value
'End With
'Call UserForm1.ListBox1
'UserForm2.TextBox1.Value = ""
'End If

'TextBox2.Text = TextBox1.Text

ListBox1.AddItem = TextBox8_Name

End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add value in ListBox

#6

Post by snasui »

ANUSARA wrote:ลองเอา code ListBox1.AddItem = TextBox8_Name ใส่ดูแล้วก็ยังขึ้น compile error อยู่ค่ะ รบกวนช่วยดูด้วยนะคะ ขอบคุณค่ะ
:lol: ก็ไม่ควรจะได้ครับผมไม่ได้แนะนำว่าให้ใช้ ListBox1.AddItem = TextBox8_Name ครับ ช่วยอ่านใหม่ช้า ๆ อีกครั้งครับ
ANUSARA
Member
Member
Posts: 69
Joined: Wed Oct 06, 2010 11:12 pm

Re: Add value in ListBox

#7

Post by ANUSARA »

ลองใช้ code ตามด้านล่าง แต่ค่าที่ไปแสดงใน ListBox แสดงทุกตัวที่พิมพ์เหมือนตัวอักษร 1 ตัวก็แสดง 1 บรรทัดค่ะ และไม่ดึงค่าข้อมูลจาก หน้า databse อยากให้ดึงค่าจาก databse ที่เคยบันทึกมาด้วยค่ะ

Code: Select all

Private Sub TextBox8_Name_Change()
UserForm1.ListBox1.AddItem (UserForm1.TextBox8_Name.Text)
End Sub
ขอบคุณค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add value in ListBox

#8

Post by snasui »

:D หลักการก็ให้ประกาศตัวแปรช่วงข้อมูลแล้วค่อยใช้ For each...Next มาแสดงใน ListBox ครับ

ยกตัวอย่างเช่น

Code: Select all

   '...
   dim rall as range
   dim r as range
   with sheets("exam")
      set rall = .range("a1", .range("a" & rows.count).end(xlup))
   end with
   for each r in rall
      lisbox1.additem r
   next r
   '...
'... คือ Code อื่น ๆ เป็นการละไว้ในฐานที่เข้าใจ
ANUSARA
Member
Member
Posts: 69
Joined: Wed Oct 06, 2010 11:12 pm

Re: Add value in ListBox

#9

Post by ANUSARA »

ลองทำแล้วค่ะแต่ไม่แน่ใจว่าเข้าใจตามที่คุณแนะนำหรือไม่ค่ะ และมันขึ้น compile error ที่ Lisbox1.AddItem r ค่ะ อยากรบกวนช่วยแนะนำด้วยนะคะ ไม่ค่อยเข้าใจ VBA เท่าไหร่ค่ะ

Code: Select all

Private Sub TextBox8_Name_Change()

Dim rall As Range
   Dim r As Range
   With Sheets("database")
      Set rall = .Range("C2", .Range("C" & Rows.Count).End(xlUp))
   End With
   For Each r In rall
      Lisbox1.AddItem r
   Next r
UserForm1.ListBox1.AddItem (UserForm1.TextBox8_Name.Text)
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add value in ListBox

#10

Post by snasui »

:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Private Sub TextBox8_Name_Change()
   Dim rall As Range
   Dim r As Range
   With Sheets("database")
      Set rall = .Range("C2", .Range("C" & Rows.Count).End(xlUp))
   End With
   For Each r In rall
      ListBox1.AddItem r ' Change lisbox1 to ListBox1
   Next r
'UserForm1.ListBox1.AddItem (UserForm1.TextBox8_Name.Text)
End Sub
โดยปกติการนำข้อมูลมาไว้ใน ListBox เพื่อให้เลือกได้ ควรทำที่ UserForm_Initialize Events และเมื่อมีการ Update TextBox8_Name ค่อย Add รายการเข้าไปเพิ่มทีละรายการ (หากต้องการ) สำหรับ Code นี้กรณีที่ TextBox8_Name มีการเปลี่ยนจะมีการเพิ่มชุดข้อมูลเข้าไปอีกครั้ง
ANUSARA
Member
Member
Posts: 69
Joined: Wed Oct 06, 2010 11:12 pm

Re: Add value in ListBox

#11

Post by ANUSARA »

ขอบคุณนะคะ
แต่ทำไมเวลาที่ใส่ค่าไปแล้วค่าที่ไปแสดงใน ListBox ถึงต้องซ้ำกับเดิมที่เคยใส่ไว้ด้วยค่ะ ต้องแก้อย่างไรคะ

เช่น ใส่ค่า Name ครั้งที่ 1 เป็น 1 ค่าที่แสดงใน ListBox จะแสดงค่า 1 เรียงลงมา 3 ตัว ค่ะ
ใส่ค่า Name ครั้งที่ 2 เป็น we ค่าที่แสดงใน ListBox จะแสดงค่า 1 we 1 we เรียงลงมาค่ะ
ใส่ค่า Name ครั้งที่ 3 เป็น s1 ค่าที่แสดงใน ListBox จะแสดงค่า 1 we s1 1 we s1 1 we s1 เรียงลงมาค่ะ มันจะซ้ำกันตามจำนวนครั้งที่ใส่ค่ะ

และถ้าเราอยากให้ค่าใน ListBox มันคงค่ารายการตามName ในdatabase ที่เคย add ค่าไว้เผื่อผู้ใช้อยาก selectค่าได้เลยโดยไม่ต้อง addค่าก่อนถึงจะเห็นค่าข้อมูลเก่าที่เคยaddไว้ ต้องเพิ่ม code อย่างไรคะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add value in ListBox

#12

Post by snasui »

:lol: ที่สงสัยนั้นผมตอบไว้เรียบร้อยแล้วครับตามนี้
snasui wrote:โดยปกติการนำข้อมูลมาไว้ใน ListBox เพื่อให้เลือกได้ ควรทำที่ UserForm_Initialize Events และเมื่อมีการ Update TextBox8_Name ค่อย Add รายการเข้าไปเพิ่มทีละรายการ (หากต้องการ) สำหรับ Code นี้กรณีที่ TextBox8_Name มีการเปลี่ยนจะมีการเพิ่มชุดข้อมูลเข้าไปอีกครั้ง
ดังนั้นสิ่งที่น่าจะเป็นคำถามคือ UserForm_Initialize Events สามารถดูได้จากไหน จะได้เอา Code การ Loop ไปใส่ได้

คำตอบคือให้ดับเบิ้ลคลิกที่ Userform แล้วเลือก Event ตามภาพด้านล่าง จากน้้นนำ Code การ Loop ค่ามาใส่ไว้ ความหมายคือเมื่อมีการ Load Userform ขึ้นมา มันก็จะนำค่าต่าง ๆ ในข้อมูลเป้าหมายมาแสดงใน ListBox ให้เลย

กรณีไปผูก ListBox กับการเปลี่ยนแปลงของ Control อื่น ๆ เช่นที่ทำตัวอย่างมา ก็จะเกิดปัญหาเช่นนั้นแหละครับ เมื่อ Control ตัวอื่น ๆ มีการเปลี่ยนแปลงมันก็จะ Update ListBox ทุกครั้ง จำเป็นต้องเขียน Code ในการดักจับอีกวุ่นวายว่าเมื่อไรจะให้ Update ListBox ฯลฯ
You do not have the required permissions to view the files attached to this post.
ANUSARA
Member
Member
Posts: 69
Joined: Wed Oct 06, 2010 11:12 pm

Re: Add value in ListBox

#13

Post by ANUSARA »

ขอบคุณนะคะ

ขอถามเพิ่มนะคะ ถ้าจะทำให้ TextBox ของ Value Source Year Location Comment ขึ้นแสดงค่าตามข้อมูลใน ListBox ที่เลือก ดึงข้อมูลมาจาก Sheet Databaseค่ะ
ได้ลองใช้ code ตามด้านล่างค่ะแต่ขึ้น error ไม่ทราบว่าต้องแก้ไขอย่างไรคะ

Code: Select all

Private Sub ListBox1_Select()

With Worksheets("Database")
   TxtBox14.Value = Application.VLookup(Me.ListBox1, .Range("C2:I100"), 4, False)
   TxtBox12.Value = Application.VLookup(Me.ListBox1, .Range("C2:I100"), 6, False)
   TxtBox11.Value = Application.VLookup(Me.ListBox1, .Range("C2:I100"), 7, False)
   TxtBox10.Value = Application.VLookup(Me.ListBox1, .Range("C2:I100"), 8, False)
   TxtBox9.Value = Application.VLookup(Me.ListBox1, .Range("C2:I100"), 9, False)
End With

End Sub

และอีก code หนึ่งคือ code ที่จะลบ ข้อมูลจาก ListBox ที่เลือก แล้วกดปุ่ม detete ลองใส่ code ตามด้านล่าง แล้วขึ้น error ค่ะต้องแก้ไขอย่างไรคะ

Code: Select all

Private Sub CommandButton7_Click()

      Dim lng As Long
    Answer = MsgBox("Are you sure you want to delete data from database?", 4 + 48, "Delete database")
    
    If Answer = 6 Then
        lng = Application.Match(ListBox1.Value, Worksheets("Database").Range("C:I"), 0)
        Worksheets("Database").Rows(lng).Delete
        Unload Me
        
    ElseIf Answer = 7 Then
        Unload Me
        Exit Sub
    End If

End Sub
ขอบคุณมากค่ะ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add value in ListBox

#14

Post by snasui »

:D ListBox ไม่มี Event Select ครับ ผมเปลี่ยนเป็น Event Click ให้แล้วตามด้านล่าง, TextBox ก็เขียนเป็น TxtBox เป็นสาเหตุหนึ่งที่ทำให้เกิด Error และ Range สำหรับ Lookup ก็น้อยกว่าคอลัมน์ที่ต้องการนำมาแสดงผล

Code: Select all

Private Sub ListBox1_Click()
    With Worksheets("Database")
       TextBox14.Value = Application.VLookup(Me.ListBox1, .Range("C2:Z100"), 4, False)
       TextBox12.Value = Application.VLookup(Me.ListBox1, .Range("C2:Z100"), 6, False)
       TextBox11.Value = Application.VLookup(Me.ListBox1, .Range("C2:Z100"), 7, False)
       TextBox10.Value = Application.VLookup(Me.ListBox1, .Range("C2:Z100"), 8, False)
       TextBox9.Value = Application.VLookup(Me.ListBox1, .Range("C2:Z100"), 9, False)
    End With
End Sub

Private Sub TextBox14_Change()
TextBox14.Value = Application.VLookup(Me.ListBox1, Worksheets("Database").Range("C2:Z100"), 4, False)
End Sub
สำหรับกรณีการลบ Code ควรจะปรับเป็นด้านล่าง

Code: Select all

'Other code
If Answer = 6 Then
     lng = Application.Match(ListBox1.Value, Worksheets("Database").Range("C:C"), 0)
     Worksheets("Database").Rows(lng).Delete
     Unload Me        
ElseIf Answer = 7 Then
'Other code
สังเกตตรง Range จากเดิม Range("C:I") ซึ่งไม่สามารถนำไปใช้กับฟังก์ชั่น Match ได้ครับ
ANUSARA
Member
Member
Posts: 69
Joined: Wed Oct 06, 2010 11:12 pm

Re: Add value in ListBox

#15

Post by ANUSARA »

code สำหรับการ delete สามารถทำได้แล้วค่ะ แต่ code ด้านล่างนี้ยัง error อยู่ค่ะ ไม่ทราบว่าเป็นเพราะเหตุใดคะ รบกวนด้วยค่ะ ขอบคุณมากค่ะ

Code: Select all

Private Sub ListBox1_Click()
    With Worksheets("Database")
       TextBox14.Value = Application.VLookup(Me.ListBox1, .Range("C2:Z100"), 4, False)
       TextBox12.Value = Application.VLookup(Me.ListBox1, .Range("C2:Z100"), 6, False)
       TextBox11.Value = Application.VLookup(Me.ListBox1, .Range("C2:Z100"), 7, False)
       TextBox10.Value = Application.VLookup(Me.ListBox1, .Range("C2:Z100"), 8, False)
       TextBox9.Value = Application.VLookup(Me.ListBox1, .Range("C2:Z100"), 9, False)
    End With
End Sub

Private Sub TextBox14_Change()
TextBox14.Value = Application.VLookup(Me.ListBox1, Worksheets("Database").Range("C2:Z100"), 4, False)
End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add value in ListBox

#16

Post by snasui »

:shock: สิ่งที่พบคือช่อง Name เป็น Number บ้างเป็น Text บ้าง ซึ่งไม่ทราบว่าข้อมูลจริงมีลักษณะเป็นอย่างไร หากข้อมูลจริงมี Text บ้าง Number เช่นนี้แล้ว เพื่อให้ง่ายผมแนะนำให้เปลี่ยนข้อมูลต้นแหล่งให้เป็น Text ท้้งหมด เนื่องจากเรากำลังจะนำค่าใน TextBox ไป Lookup และค่าใน TextBox จะเป็น Text เสมอ
ANUSARA
Member
Member
Posts: 69
Joined: Wed Oct 06, 2010 11:12 pm

Re: Add value in ListBox

#17

Post by ANUSARA »

ขอบคุณค่ะ
คือถ้าช่อง Name ต้องใส่เฉพาะ ตัวอักษร ใช่ไหมคะ ถ้าเป็นคำที่มีทั้งตัวอักษรและตัวเลข จะได้ไหมคะ
ส่วนช่อง Value จะใส่เฉพาะค่าตัวเลขเท่านั้นค่ะ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add value in ListBox

#18

Post by snasui »

:D ต้องเข้าใจ Text, Number, ตัวเลข, ตัวอักษร ก่อนครับ
  1. Text จะเป็น ตัวเลขล้วนก็ได้แต่ถูกจัด Format ให้เป็น Text ส่วนตัวเลขผสมตัวอักษรและตัวอักษรล้วนจะถูกจัดให้เป็น Text อยู่แล้ว
  2. Number จำเป็นที่จะต้องเป็นตัวเลขอย่างเดียวและจัด Format ให้เป็น Number ถ้าจัด Format ให้เป็น Text ก็จะกลายเป็น Text
จากกรณีนี้ผมเข้าใจว่า Name จะมีการคีย์ตัวเลขบ้าง ตัวอักษรบ้าง ปนกันบ้าง แต่ควรจะมี Format เป็น Text ไม่ใช่มี Format ผสมกัน และหากเป็นเช่นนั้น ควรจัด Format ในช่อง Name ให้เป็น Text เพราะจะได้ง่ายต่อการ Lookup จาก TextBox ที่มีสถานะเป็น Text เนื่องจากการ Lookup จะดูการจัด Format เป็นสำคัญ เราไม่สามารถ Lookup ข้าม Format กันได้

ตัวอย่างการจัด Format ให้เป็น Text ด้วย Manual
คลุมช่อง Name > คลิกขวา > Format Cells... > ที่แถบ Number เลือกเป็น Text

แต่หากกรณีต้องการจะใช้ Format ในช่อง Name ผสมกันไปเช่นนั้นจำเป็นจะต้องเขียน Code ในการจัดการค่าใน TextBox หรือในช่อง Name อย่างใดอย่างหนึ่งเพื่อให้ Lookup กันได้ ส่วนจะเขียนอย่างไรนั้นให้ลองเขียนก่อนครับ ติดตรงไหนก็มาดูกันต่อไป
ANUSARA
Member
Member
Posts: 69
Joined: Wed Oct 06, 2010 11:12 pm

Re: Add value in ListBox

#19

Post by ANUSARA »

ลองนำcode ทั้งหมดมาทำเองอีก แต่ขึ้น error ในcodeด้านล่างค่ะ ไม่ทราบว่าเป็นเพราะเหตุใดค่ะ รบกวนช่วยตรวจดูให้ด้วยนะคะ
แนบไฟล์มาให้ด้วยค่ะ
ขอบคุณค่ะ

Code: Select all

Private Sub ListBox1_SelectNewRW_Click()
With Worksheets("UsEF_RW")
      TextBox14_SelectCF.Value = Application.VLookup(Me.ListBox1_SelectNewRW, .Range("E15:Q100"), 10, False)
      TextBox12_SelectSource.Value = Application.VLookup(Me.ListBox1_SelectNewRW, .Range("E15:Q100"), 12, False)
      TextBox11_SelectYear.Value = Application.VLookup(Me.ListBox1_SelectNewRW, .Range("E15:Q100"), 13, False)
      TextBox10_SelectLocation.Value = Application.VLookup(Me.ListBox1_SelectNewRW, .Range("E15:Q100"), 14, False)
      TextBox9_SelectComment.Value = Application.VLookup(Me.ListBox1_SelectNewRW, .Range("E15:Q100"), 15, False)
    End With
End Sub


Private Sub TextBox14_SelectCF_Change()
TextBox14_SelectCF.Value = Application.VLookup(Me.ListBox1_SelectNewRW, Worksheets("UsEF_RW").Range("E15:Q100"), 6, False)
End Sub

Private Sub TextBox12_SelectSource_Change()
TextBox12_SelectSource.Value = Application.VLookup(Me.ListBox1_SelectNewRW, Worksheets("UsEF_RW").Range("E15:Q100"), 8, False)
End Sub

Private Sub TextBox11_SelectYear_Change()
TextBox11_SelectYear.Value = Application.VLookup(Me.ListBox1_SelectNewRW, Worksheets("UsEF_RW").Range("E15:Q100"), 9, False)
End Sub

Private Sub TextBox10_SelectLocation_Change()
TextBox10_SelectLocation.Value = Application.VLookup(Me.ListBox1_SelectNewRW, Worksheets("UsEF_RW").Range("E15:Q100"), 10, False)
End Sub

Private Sub TextBox9_SelectComment_Change()
TextBox9_SelectComment.Value = Application.VLookup(Me.ListBox1_SelectNewRW, Worksheets("UsEF_RW").Range("E15:Q100"), 11, False)
End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Add value in ListBox

#20

Post by snasui »

:D ยังไม่มี Code ใดที่ทำหน้าที่ปรับคอลัมน์ Name ให้มี Format เป็น Text นอกจากนี้ช่วงข้อมูลเช่น .Range("E15:Q100"), 14, False) เป็นสูตรที่ผิดพลาด เนื่องจาก E15:Q100 มีขอบเขตข้อมูลแค่ 13 คอลัมน์เท่านั้น แต่ต้องการนำคอลัมน์ที่ 14 มาแสดง ช่วงอื่น ๆ ที่มีลักษณะเช่นนี้จะผิดพลาดทั้งหมดครับ
Post Reply