Page 2 of 4
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Tue May 15, 2012 2:21 pm
by snasui
เนื่องจากมีการอ้างถึงชีทผิดไปจากที่ควรจะเป็นครับ
Properties ของ Worksheet ที่เกี่ยวกับ Name ของชีทจะมีอยู่ 2 แบบครับคือ
- Default Name ซึ่งจะอยู่ในวงเล็บเป็น (Name) และโปรแกรมจะมีการกำหนดให้ไว้ล่วงหน้าเช่น Sheet1, Sheet2 เป็นต้น จะไม่สามารถเปลี่ยนผ่านทาง Excel ต้องเข้ามาเปลี่ยนด้วย VBE (Visual Basic Editor)
- Name จะเป็นชื่อที่เราสามารถเปลี่ยนได้ผ่านทาง Excel
จากไฟล์ที่แนบมาหากใช้ Default Name คือ Oat5 เราสามารถใช้ Code เช่น
Oat5.Range("A2") ได้เลย หากใช้ Worksheets("Oat5").Range("A2") โปรแกรมจะไม่รู้จัก Sheet ที่ชื่อ Oat5 ครับ
หากเปลี่ยนเป็น Worksheets("NOTEBOOK").Range("A2") ก็สามารถใช้งานได้เช่นกัน
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Wed May 16, 2012 12:24 am
by ottokung25
ขอบคุณมากครับ สำหรับความรู้เพิ่มเติม
ดึงข้อมูลจาก Combobox ไม่ได้ครับ
Posted: Wed May 16, 2012 2:48 pm
by ottokung25
ขออนุญาติตั้งกระทู้ใหม่นะครับ
ตอนนี้เกิดปัญหาที่ว่า ไม่สามารถดึงข้อมูลจากชีท RENTER มาใส่ใน combobox ได้ครับ( Combobox แบบ 2 คอลัมภ์ )
Code: Select all
Private Sub UserForm_Initialize()
Dim cl As Range
Dim t As Range
Set ws = Worksheets("RENTER")
With Me.ListBox1
.RowSource = ""
For Each cl In Oat5.Range("A2:A" & _
Oat5.Range("A65536").End(xlUp).Row)
.AddItem cl.Value
Next cl
End With
For Each t In ws.Range("Name")
With Me.ComboBox1
.AddItem t.Value
.List(.ListCount - 1, 1) = t.Offset(0, 1).Value
End With
Next t
Me.TextBox6.Value = Format(Calendar1, "Medium Date")
End Sub
โดยส่วนที่เกี่ยวข้องจะมี
Code: Select all
Dim t As Range
Set ws = Worksheets("RENTER")
For Each t In ws.Range("Name")
With Me.ComboBox1
.AddItem t.Value
.List(.ListCount - 1, 1) = t.Offset(0, 1).Value
End With
Next t
ตอนนี้แจ้ง Error subscript out of range อีกแล้วครับ
ช่วยดูให้หน่อยครับ ขอบคุณครับ
Password VBA : 1150 ครับ
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Wed May 16, 2012 3:44 pm
by snasui
ลองปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Private Sub UserForm_Initialize()
Dim cl As Range
Dim t As Range
Dim Name As Range
Set ws = Worksheets("RENTER")
Set Name = ws.Range("A2", ws.Range("A" & Rows.Count).End(xlUp))
With Me.ListBox1
.RowSource = ""
For Each cl In Oat5.Range("A2:A" & _
Oat5.Range("A65536").End(xlUp).Row)
.AddItem cl.Value
Next cl
End With
For Each t In Name
With Me.ComboBox1
.AddItem t.Value
.List(.ListCount - 1, 1) = t.Offset(0, 1).Value
End With
Next t
Me.TextBox6.Value = Format(Calendar1, "Medium Date")
End Sub
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Wed May 16, 2012 4:16 pm
by ottokung25
ขอถามต่ออีกนิดครับ จะให้ใน Combobox แสดงค่าทั้งสองคอลัมภ์ ต้องตั้งค่าอย่างไรครับ หาไม่เจอ
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Wed May 16, 2012 4:24 pm
by snasui
ComboBox ไม่สามารถมีได้ถึงสองคอลัมน์ครับ ที่จะมีได้คือ ListBox ช่วยจับภาพมาให้หน่อยครับว่าภาพที่ต้องการนั้นเป็นอย่างไร
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Wed May 16, 2012 5:06 pm
by ottokung25
snasui wrote: ComboBox ไม่สามารถมีได้ถึงสองคอลัมน์ครับ ที่จะมีได้คือ ListBox ช่วยจับภาพมาให้หน่อยครับว่าภาพที่ต้องการนั้นเป็นอย่างไร
ถ้าอย่างนั้นไม่เป็นไรครับ ขอโทษด้วยครับ นึกว่ามันทำได้
ถ้าผมมีอะไรจะถามต่อนี่ให้ถามในกระทู้นี้เลยใช่หรือเปล่าครับ ( ท่าทางจะอีกเยอะ
)
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Wed May 16, 2012 5:07 pm
by snasui
กรณีเรื่องเดียวกันควรถามในหัวข้อเดิมครับเพื่อให้ง่ายต่อการติดตามและง่ายต่อการศึกษาของเพื่อนสมาชิก หากเป็นเรื่องใหม่ควรตั้งกระทู้ใหม่ครับ
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Thu May 17, 2012 11:49 am
by ottokung25
สอบถามหน่อยครับ
ตอนนี้ผมต้องการที่จะเอาค่าที่เลือกใน Listbox มาใช้ครับ โดยต้องการที่จะนำเอาค่าที่อ้างอิงกับ Listbox ใน Sheet ให้ย้ายไปที่อีกชีทหนึ่งครับ
คือผมจะใช้คำสั่งอะไรในการเลือกเอาค่าที่เลือกใน Listbox ไปใช้ครับ ผมใช้ Listbox1.select มันให้เลือกแต่ True กับ False ครับ
ขอไอเดียหรือชี้เป้าตัวอย่าง Code ให้หน่อยครับ
ขอบคุณครับ
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Thu May 17, 2012 12:14 pm
by snasui
ใช้การ Loop ธรรมดาครับ ยกตัวอย่างเช่น กำหนดให้ Message ทำการ Loop เพื่อแสดงค่าใน ListBox เฉพาะรายการที่ถูกเลือก
Code: Select all
dim i as integer
for i = 0 to listbox1.listcount - 1
if listbox1.selected(i) then
msgbox listbox1.list(i)
end if
next i
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Thu May 17, 2012 1:53 pm
by ottokung25
ตอนนี้ผมต้องการให้ค่าที่เลือกเอาไว้ใน Listbox2 ถ้ามีเลือกไว้ให้เอาข้อมูลของ Textbox 9 ไปใส่ใน Cell ของ Sheet ชื่อ Notebook ครับ แต่ผมงงอีกแล้วครับ มัน Error ที่บรรทัดนี้ครับ
Code: Select all
for i = 0 to listbox1.listcount - 1
มัน Error object require ครับ ผมไม่รู้ว่าลืมตัวแปรอะไรหรือเปล่า ช่วยดูให้หน่อยครับ แนบไฟล์อัพเดตมาให้ด้วยครับ
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Thu May 17, 2012 2:05 pm
by snasui
ช่วยระบุชื่อ Userform และ ชื่อ Procedure มาด้วยทุกครั้งเพื่อให้เข้าถึงปัญหาได้โดยไวครับ
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Thu May 17, 2012 2:18 pm
by ottokung25
Userform 15 ครับ
Commandbuttoun1_click ครับ
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Thu May 17, 2012 2:32 pm
by snasui
ลองปรับ Code เป็นตามด้านล่างครับ ให้อ้าง Collection คือ UserForm2 เข้ามาด้วยครับ
Code: Select all
For a = 0 To UserForm2.ListBox2.ListCount - 1
If UserForm2.ListBox2.Selected(a) Then
Oat5.Cells(final, 6) = UserForm2.ListBox2.List(a)
End If
Next a
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Thu May 17, 2012 4:10 pm
by ottokung25
ผมไม่เข้าใจตรงค่าที่วนลูปของ Listbox ครับ
มันจะเป็นค่า Index หรอครับ
แล้วมันจะอ้างอิงกับใน Cell ของ Sheet ได้อย่างไรครับ
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Thu May 17, 2012 4:13 pm
by snasui
ค่าที่ Loop ใน ListBox ตามที่ผมยกตัวอย่างไปนั้น เป็นการหาว่าค่าใดที่เราได้ทำเครื่องหมายที่ CheckBox เอาไว้บ้าง เพื่อที่จะนำไปใช้งานต่อ เช่นตรวจสอบต่อกับค่าใน Worksheet การจะเทียบกับค่าใน Worksheet ก็ต้องเขียน Code สำหรับทำเช่นนั้นมาด้วย ติดตรงไหนก็ค่อยมาดูกันต่อครับ
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Thu May 17, 2012 9:15 pm
by ottokung25
พบปัญหาอีกแล้วครับ
ตอนนี้ไม่สามารถทำให้ข้อมูลใน Listbox2 ไปอยู่ใน Sheet Oat5(Notebook) ได้ครับ แถมยังทำให้ตอนนี้บันทึกข้อมูลแค่แถวที่สองเท่านั้น เหมือนโค๊ดไม่วนลูปหาตัวสุดท้ายที่อยู่ในเซลล์ครับ จากโค๊ดด้านล่างนี้ครับ
Code: Select all
For a = 0 To UserForm2.ListBox2.ListCount - 1
If UserForm2.ListBox2.Selected(a) = True Then
Oat5.Range("A65536").End(xlUp)(2, 6) = UserForm2.ListBox2.list(a)
UserForm2.ListBox2.Selected(a) = False
End If
Next
อยู่ใน Userform 15 ส่วน Commandbutton1_click ครับ
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Thu May 17, 2012 11:42 pm
by snasui
ช่วยอธิบายลักษณะที่ต้องการวางข้อมูลด้วยครับว่าต้องการให้ Loop วางในคอลัมน์ไหน อย่างไร Code ที่เขียนมานั้นเป็นการวางที่เดิมซ้ำ ๆ ครับ
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Thu May 17, 2012 11:51 pm
by ottokung25
ต้องการให้เอาค่าใน Oat3(Rent) ในคอลัมภ์ที่ 3 ชื่อ EQ-CODE ครับ
ขอถามต่อเลยครับ ว่าจะให้ค่าจะใน Listbox ไปเชคใน Cell ก่อนได้มั้ยครับ
ประมาณว่าถ้าเจอข้อมูลที่ตรงกับใน Listbox แล้วให้เอาข้อมูลใน Textbox9 ไปวาง
เพราะผมอยากจะให้มันเข้าไปลบข้อมูลในอีก Sheet หนึ่งด้วยครับ(เอาไว้นับจำนวนครับ)
ประมาณนี้ครับ
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Fri May 18, 2012 12:01 am
by snasui
ไม่เข้าใจครับ
ottokung25 wrote:ต้องการให้เอาค่าใน Oat3(Rent) ในคอลัมภ์ที่ 3 ชื่อ EQ-CODE ครับ
ช่วยขยายความเพิ่มเติมว่า เอาค่าจากไหนไปไหนครับ
ottokung25 wrote:ขอถามต่อเลยครับ ว่าจะให้ค่าจะใน Listbox ไปเชคใน Cell ก่อนได้มั้ยครับ
ประมาณว่าถ้าเจอข้อมูลที่ตรงกับใน Listbox แล้วให้เอาข้อมูลใน Textbox9 ไปวาง
สามารถทำได้ครับ เช่นนำค่าใน ListBox ไป Loop เพื่อเปรียบเทียบกับค่าในคอลัมน์ที่ต้องการ