: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

ต้องการให้ข้อมูลแสดงใน User Form ครับ

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

ต้องการให้ข้อมูลแสดงใน User Form ครับ

#1

Post by pongpang »

ใน Use Form เมื่อต้องการตรวจสอบข้อมูล พิมพ์ชื่อ แล้วให้ข้อมูลของชื่อนั้น แสดง ปรากฏว่า เขียน Code แล้ว Error ตามไฟล์ที่แนบครับ
ขอความกรุณาให้คำแนะนำในการเขียน Code ที่ถูกต้องด้วยครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#2

Post by snasui »

:D Index และ Match เอาไปใช้ใน VBA ตรง ๆ แบบนั้นไม่ได้ครับ เพราะไม่ใช่ Function ใน VBA แต่เป็น Function ใน Excel หากจะนำไปใช้ต้องนำหน้าด้วย Application เช่น Application.Index, Application.Match ซึ่งเป็นการอ้างอิงแบบย่อ หากแบบเต็มจะเขียนเป็น Application.WorksheetFunction.Index, Application.WorksheetFunction.Match
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#3

Post by pongpang »

snasui wrote: Index และ Match เอาไปใช้ใน VBA ตรง ๆ แบบนั้นไม่ได้ครับ เพราะไม่ใช่ Function ใน VBA แต่เป็น Function ใน Excel หากจะนำไปใช้ต้องนำหน้าด้วย Application เช่น Application.Index, Application.Match ซึ่งเป็นการอ้างอิงแบบย่อ หากแบบเต็มจะเขียนเป็น Application.WorksheetFunction.Index, Application.WorksheetFunction.Match
เรียน คุณคนควน
ผมพยายามแล้วครับ ไม่ ERROR ครับ แต่ข้อมูลไม่แสดง ในTexBox ครับ ขอความกรุณาช่วยแนะนำด้วยเถอะครับ (เป็นเพียงส่วนหนึ่งที่ได้พยายาม) เช่น

Code: Select all

Private Sub TextBox2_text()
Application.IndexApplication.WorksheetFunction.Index
Set LastRow = TextBox1.Text
           LastRow.Index(Range(Data), Match(TextBox1.Text, Range(Name), 0), 2) = TextBox2.Text
End Sub

Private Sub TextBox3_value()
Application.IndexApplication.WorksheetFunction.Index
Set LastRow = TextBox1.Value
           LastRow.Index(Range(Data), Match(TextBox1.Value, Range(Name), 0), 3) = TextBox3.Value
End Sub


Private Sub TextBox2_Change()
Set LastRow = Sheet1.Range("a65536").End(xlUp)
Application.IndexApplication.WorksheetFunction.Index
Set LastRow = TextBox1.Text
           LastRow.Index(Range(Data), Match(TextBox1.Text, Range(Name), 0), 2) = TextBox2.Text
End Sub

Private Sub TextBox2_value()
Set LastRow = Sheet1.Range("a65536").End(xlUp)
Application.IndexApplication.WorksheetFunction.Index_
Application.IndexApplication.WorksheetFunction.Match
Set LastRow = TextBox1.Value
           LastRow.Index(Range(Data), Match(TextBox1.Value, Range(Name), 0), 2) = TextBox2.Text
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#4

Post by snasui »

:D ลองดูตัวอย่างตามด้านล่างครับ

Code: Select all

'Other code
With Application
	TextBox2.Text = .Index(Data,.Match(LastRow,Name,0),2)
End With
'Other code
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#5

Post by pongpang »

เรียน คุณคนควน
ขอบคุณมากครับที่ได้กรุณา ได้พยามนำ Code ไปใช้ โดยเขียน Code ดังนี้

Code: Select all

Private Sub TextBox2_Change()
Application.IndexApplication.WorksheetFunction.Index
    Set LastRow = TextBox1.Text
With Application
     TextBox2.Text = .Index(Data, .Match(LastRow, Name, 0), 2)
End With
End Sub
แต่ข้อมูลไม่แสดงครับ ขอความกรุณช่วยแนะนำเพิ่มเติมด้วยครับ โดยขอ Code ที่เต็มรูปแบบครับ
ตามไฟล์ที่แนบครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#6

Post by snasui »

:D ให้ลบ Application.IndexApplication.WorksheetFunction.Index ทิ้งไปหรือ Mark เป็น Comment

สำหรับ Name ใน Code ที่เขียนมาหมายถึงอะไร กำหนดค่าให้กับตัวแปรเป็นช่วงข้อมูลใดครับ :?:
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#7

Post by pongpang »

snasui wrote::D ให้ลบ Application.IndexApplication.WorksheetFunction.Index ทิ้งไปหรือ Mark เป็น Comment
snasui wrote:สำหรับ Name ใน Code ที่เขียนมาหมายถึงอะไร กำหนดค่าให้กับตัวแปรเป็นช่วงข้อมูลใดครับ
เรียน คุณคนควน
ขอบคุณมาก ผมได้ปรับ Code ตามคำแนะนำแล้ว ครับ
แต่ข้อมูล ยังไม่แสดง ครับ
สำหรับ Name เป็นชื่อของ เร้งเนม( sheet1!A2:A5) เป็นคอลัมน์ Name(ชื่อ)ครับ
และ Data คือ เร้งเนม (Sheet1!A2:C5) เป็นเร้งของข้อมูลทั้งหมดครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#8

Post by snasui »

:D เมื่อเป็น Range Name จะเอามาใช้ใน Code ตรง ๆ เช่นนั้นไม่ได้ครับ จะต้องเขียนเป็นเช่น

Code: Select all

'Other code
Dim Data As Range
Dim Name As Range
Set Data = ActiveSheet.Range("Data")
Set Name = ActiveSheet.Range("Name")
LastRow = TextBox1.Text
With Application
     TextBox2.Text = .Index(Data, .Match(LastRow, Name, 0), 2)
End With
'Other code
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#9

Post by pongpang »

เรียน คุณคนควน
ขอบคุณมากครับ ที่ได้กรุณา ผมได้พิมพ์ Code ตามที่แนะนำแล้วแต่ข้อมูลยังไม่แสดงครับ และผมได้พยายามปรับ Code เช่น
ทั้งใส่และลบ Application.IndexApplication.WorksheetFunction.Index........With Application
ข้อมูลก็ไม่แสดง
ขอความกรุณาช่วยเหลือด้วยนะครับ ขอบคุณล่วงหน้า
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#10

Post by snasui »

:shock: บรรทัดใดที่ผมแนะนำว่าให้ลบไปหรือ Mark เป็น Comment ให้ละเลยไปได้เลย ไม่ต้องนำมาใช้สำหรับงานนี้อีก

กรณีนำ Code นั้นไปปรับใช้แล้วให้แนบไฟล์ล่าสุด พร้อม Code และแจ้งมาด้วยว่าคำตอบที่ต้องการเป็นอย่างไรครับ
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#11

Post by pongpang »

เรียน คุณคนควน
ขอบคุณมากครับ สำหรับ Code ที่นำไปใช้และปรับครั้งล่าสุด ดังนี้ ครับ

Code: Select all

Private Sub TextBox2_Change()
    Dim Data As Range
Dim Name As Range
Set Data = ActiveSheet.Range("Data")
Set Name = ActiveSheet.Range("Name")
LastRow = TextBox1.Text

     TextBox2.Text = .Index(Data, .Match(LastRow, Name, 0), 2)
End With
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: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#12

Post by snasui »

:D ลองดูตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

Private Sub TextBox1_Change()
    Dim Data As Range
    Dim Name As Range
    Dim lastRow As Integer
    Dim checkVal As Long
    Set Data = ActiveSheet.Range("Data")
    Set Name = ActiveSheet.Range("Name")
    With Application
        checkVal = .CountIf(Name, TextBox1.Text)
        If checkVal > 0 Then
            lastRow = .Match(TextBox1.Text, Name, 0)
            TextBox2.Text = .Index(Data, lastRow, 2)
        Else
            TextBox2.Text = ""
        End If
    End With
End Sub
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#13

Post by pongpang »

เรียน คุณคนควน
ขอบคุณมากครับ สามารถแสดงข้อมูลได้ครบถ้วนทุกประการครับ และถ้าจะกรุณาช่วยอธิบาย คำเหล่านี้
As Range
As Integer
checkVal As Long
หมายถึงอะไร จะเป็นพระคุณอย่างยิ่ง และขอขอบคุณล่วงหน้าครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#14

Post by snasui »

:D ทั้งหมดนั้นเป็นการประกาศตัวแปรครับ

As Range คือประกาศตัวแปรเป็น Object ของ Excel โดย Range หมายถึงช่วงข้อมูล ใช้หน่วยความจำ 4 bytes

การประกาศตัวแปรส่วนที่เหลือดูจากที่นี่ครับ Data Type Summary
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#15

Post by pongpang »

ขอบคุณมากครับ ที่ได้ให้ความกรุณา
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#16

Post by pongpang »

เรียน อาจารย์คนควนและอาจารย์ทุกท่าน
ตากที่สร้างไฟล์โดยใช้ User Form ในการบันทึกข้อมูลและคืนค่าข้อมูล เมื่อปรับปรุงไฟล์ เกิดปัญปัญหา คือ
เมื่อเปลี่ยนจาก TextBox เป็น ComboBox มีปัญหา ดังนี้ ครับ
1. ใช้บันทึกข้อมูลไม่ได้
2. ใช้ในการค้นหาข้อมูลก็ไม่ได้
จะ Error ตามภาพ
ไม่ทราบว่าจะต้องปรับปรุง Code ที่ส่วนใด ขอความกรุณาด้วยครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#17

Post by snasui »

:D ลองปรับบรรทัดที่มีปัญหาเป็นตามนี้ครับ lastRow = .Match(CInt(ComboBox1.Text), Num, 0)

สังเกตว่าหากมีการ Assign ค่าให้กับตัวแปรแล้วจะไม่ครอบด้วยฟันหนู ใน Code ตัวแปร Num จะไม่เขียนเป็น "Num"
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#18

Post by pongpang »

snasui wrote::D ลองปรับบรรทัดที่มีปัญหาเป็นตามนี้ครับ lastRow = .Match(CInt(ComboBox1.Text), Num, 0)
เรียน คุณคนควน
ขอบคุณมากครับ แต่ยัง Error และพบปัญหาดังนี้ ครับ
1.ไม่สามารถป้อนข้อมูลใหม่ได้โดยพิมพ์ตัวแรกก็จะ Error ทันทึที่ lastRow = .Match(CInt(ComboBox1.Text), Num, 0)

Code: Select all

Private Sub ComboBox1_Change()
    Dim Num As Range 'Num:rangename Column เลขที่
    Dim Alldata As Range 'AllData:rangename ข้อมูลทั้งหมด(ทุกColumn)
    Dim lastRow As Integer
    Dim checkVal As Long
    Set Alldata = ActiveSheet.Range("AllData")
    Set Num = ActiveSheet.Range("Num")
    With Application
        checkVal = .CountIf(Num, ComboBox1.Text)
        If checkVal > 0 Then
            lastRow = .Match(CInt(ComboBox1.Text), Num, 0)
            TextBox1.Text = .Index(Alldata, lastRow, 1)
            TextBox2.Text = .Index(Alldata, lastRow, 2)
            TextBox3.Text = .Index(Alldata, lastRow, 3)
            TextBox4.Text = .Index(Alldata, lastRow, 4)
            TextBox5.Text = .Index(Alldata, lastRow, 5)
        Else
            ComboBox1.Text = ""
            TextBox1.Text = ""
            TextBox2.Text = ""
            TextBox3.Text = ""
            TextBox4.Text = ""
            TextBox5.Text = ""
        End If
    End With
End Sub
2.เมื่อเลือกเลขที่เก่า ก็จะแสดงข้อมูลแต่ข้อมูลคลาดเคลื่อนดังภาพ
ขอความกรุณาแนะนำด้วยครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31256
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#19

Post by snasui »

:D ลองปรับ Code เป็น

Code: Select all

'Other code
If ComboBox1.Text <> "" And checkVal > 0 Then
'Other code
สำหรับค่าที่ไม่ตรงนั้นให้ดูว่า Range Name ที่ให้ไว้เริ่มที่คอลัมน์ใดหมายถึงคอลัมน์นั้นมีค่าเป็น 1 ในฟังก์ชั่น Index ดังนั้น การจะให้แสดงชื่อควรจะเป็น Code

TextBox1.Text = .Index(Alldata, lastRow, 1) หรือควรเป็น TextBox1.Text = .Index(Alldata, lastRow, 2) :?:
pongpang
Member
Member
Posts: 242
Joined: Fri Jul 05, 2013 9:35 pm

Re: ต้องการให้ข้อมูลแสดงใน User Form ครับ

#20

Post by pongpang »

เรียน คุณคนควน
ได้ปรับปรุง Code ในส่วนที่ท่านแนะนำ ดังนี้

If ComboBox1.Text <> "" And checkVal > 0 Then
lastRow = .Match(CInt(ComboBox1.Text), Num, 0)
TextBox1.Text = .Index(Alldata, lastRow, 2)
TextBox2.Text = .Index(Alldata, lastRow, 3)
TextBox3.Text = .Index(Alldata, lastRow, 4)
TextBox4.Text = .Index(Alldata, lastRow, 5)
TextBox5.Text = .Index(Alldata, lastRow, 6)

ของเดิม If checkVal > 0 Then
TextBox1.Text = .Index(Alldata, lastRow, 1)
TextBox2.Text = .Index(Alldata, lastRow, 2)
TextBox3.Text = .Index(Alldata, lastRow, 3)
TextBox4.Text = .Index(Alldata, lastRow, 4)
TextBox5.Text = .Index(Alldata, lastRow, 5)

ผลที่ได้ ดังนี้
1.เมื่อเลือกตัวเลข ที่พิมพ์ไว้แล้ว จะแสดงค่าถูกต้อง
2.ถ้าจะพิมพ์ข้อมูลเพิ่ม(ไม่ตรงกับเลขเก่า)ไม่สามารถพิมพ์ในComboBoxได้เลย

Code: Select all

Private Sub ComboBox1_Change()
    Dim Num As Range 'Num:rangename Column 
    Dim Alldata As Range 'AllData:rangename 
    Dim lastRow As Integer
    Dim checkVal As Long
    Set Alldata = ActiveSheet.Range("AllData")
    Set Num = ActiveSheet.Range("Num")
    With Application
        checkVal = .CountIf(Num, ComboBox1.Text)
        If ComboBox1.Text <> "" And checkVal > 0 Then
            lastRow = .Match(CInt(ComboBox1.Text), Num, 0)
            TextBox1.Text = .Index(Alldata, lastRow, 2)
            TextBox2.Text = .Index(Alldata, lastRow, 3)
            TextBox3.Text = .Index(Alldata, lastRow, 4)
            TextBox4.Text = .Index(Alldata, lastRow, 5)
            TextBox5.Text = .Index(Alldata, lastRow, 6)
        Else
            ComboBox1.Text = ""
            TextBox1.Text = ""
            TextBox2.Text = ""
            TextBox3.Text = ""
            TextBox4.Text = ""
            TextBox5.Text = ""
        End If
    End With
    ComboBox1.SetFocus
End Sub
ขอความกรุณาต่อครับ
You do not have the required permissions to view the files attached to this post.
Post Reply