Page 2 of 4

Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ

Posted: Tue May 15, 2012 2:21 pm
by snasui
:D เนื่องจากมีการอ้างถึงชีทผิดไปจากที่ควรจะเป็นครับ

Properties ของ Worksheet ที่เกี่ยวกับ Name ของชีทจะมีอยู่ 2 แบบครับคือ
  1. Default Name ซึ่งจะอยู่ในวงเล็บเป็น (Name) และโปรแกรมจะมีการกำหนดให้ไว้ล่วงหน้าเช่น Sheet1, Sheet2 เป็นต้น จะไม่สามารถเปลี่ยนผ่านทาง Excel ต้องเข้ามาเปลี่ยนด้วย VBE (Visual Basic Editor)
  2. 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
:D ลองปรับ 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 แสดงค่าทั้งสองคอลัมภ์ ต้องตั้งค่าอย่างไรครับ หาไม่เจอ :D

Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ

Posted: Wed May 16, 2012 4:24 pm
by snasui
:D ComboBox ไม่สามารถมีได้ถึงสองคอลัมน์ครับ ที่จะมีได้คือ ListBox ช่วยจับภาพมาให้หน่อยครับว่าภาพที่ต้องการนั้นเป็นอย่างไร

Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ

Posted: Wed May 16, 2012 5:06 pm
by ottokung25
snasui wrote::D ComboBox ไม่สามารถมีได้ถึงสองคอลัมน์ครับ ที่จะมีได้คือ ListBox ช่วยจับภาพมาให้หน่อยครับว่าภาพที่ต้องการนั้นเป็นอย่างไร
ถ้าอย่างนั้นไม่เป็นไรครับ ขอโทษด้วยครับ นึกว่ามันทำได้ :D

ถ้าผมมีอะไรจะถามต่อนี่ให้ถามในกระทู้นี้เลยใช่หรือเปล่าครับ ( ท่าทางจะอีกเยอะ :lol: )

Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ

Posted: Wed May 16, 2012 5:07 pm
by snasui
:D กรณีเรื่องเดียวกันควรถามในหัวข้อเดิมครับเพื่อให้ง่ายต่อการติดตามและง่ายต่อการศึกษาของเพื่อนสมาชิก หากเป็นเรื่องใหม่ควรตั้งกระทู้ใหม่ครับ

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
:D ใช้การ 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
:D ช่วยระบุชื่อ 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
:D ลองปรับ 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
:D ค่าที่ Loop ใน ListBox ตามที่ผมยกตัวอย่างไปนั้น เป็นการหาว่าค่าใดที่เราได้ทำเครื่องหมายที่ CheckBox เอาไว้บ้าง เพื่อที่จะนำไปใช้งานต่อ เช่นตรวจสอบต่อกับค่าใน Worksheet การจะเทียบกับค่าใน Worksheet ก็ต้องเขียน Code สำหรับทำเช่นนั้นมาด้วย ติดตรงไหนก็ค่อยมาดูกันต่อครับ :D

Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ

Posted: Thu May 17, 2012 9:15 pm
by ottokung25
พบปัญหาอีกแล้วครับ :D ตอนนี้ไม่สามารถทำให้ข้อมูลใน 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
:D ช่วยอธิบายลักษณะที่ต้องการวางข้อมูลด้วยครับว่าต้องการให้ 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
:lol: ไม่เข้าใจครับ
ottokung25 wrote:ต้องการให้เอาค่าใน Oat3(Rent) ในคอลัมภ์ที่ 3 ชื่อ EQ-CODE ครับ
ช่วยขยายความเพิ่มเติมว่า เอาค่าจากไหนไปไหนครับ
ottokung25 wrote:ขอถามต่อเลยครับ ว่าจะให้ค่าจะใน Listbox ไปเชคใน Cell ก่อนได้มั้ยครับ
ประมาณว่าถ้าเจอข้อมูลที่ตรงกับใน Listbox แล้วให้เอาข้อมูลใน Textbox9 ไปวาง
สามารถทำได้ครับ เช่นนำค่าใน ListBox ไป Loop เพื่อเปรียบเทียบกับค่าในคอลัมน์ที่ต้องการ