Page 3 of 4

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

Posted: Fri May 18, 2012 12:05 am
by ottokung25
snasui wrote::lol: ไม่เข้าใจครับ
ottokung25 wrote:ต้องการให้เอาค่าใน Oat3(Rent) ในคอลัมภ์ที่ 3 ชื่อ EQ-CODE ครับ
ช่วยขยายความเพิ่มเติมว่า เอาค่าจากไหนไปไหนครับ

จาก Listbox2 ครับ

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

Posted: Fri May 18, 2012 12:09 am
by snasui
:shock: ไม่ได้ช่วยให้เข้าใจเพิ่มขึ้นครับ เขียนให้ครบถ้วนกระบวนความครับ งดเขียนเป็นท่อน ๆ อย่างเช่นที่เขียนมานี้ ต้องการทำอะไร จากไหน ไปไหน เริ่มตั้งแต่ต้นจนจบสำหรับงานท่อนนี้ครับ

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

Posted: Fri May 18, 2012 12:24 am
by ottokung25
ต้องการนำค่าที่อยู่ใน listbox2 ทั้งหมด ไปใส่ใน sheet ชื่อ rent ในคอลัมภ์ที่ 3 ครับ

ขอโทษด้วยนะครับ ผมอธิบายไม่ละเอียดเอง พอดีหงุดหงิดกันมันนี่แหละครับ ขอโทษจริงๆครับ

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

Posted: Fri May 18, 2012 9:40 am
by snasui
:D กรณีต้องการนำข้อมูลใน ListBox ไปวางใน Worksheet ลองดูตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

For a = 0 To UserForm2.ListBox2.ListCount - 1
   If UserForm2.ListBox2.Selected(a) = True Then
    Worksheet("RENT").Range("C65536").End(xlUp).Offset(1, 0) = UserForm2.ListBox2.List(a)
    UserForm2.ListBox2.Selected(a) = False
   End If
Next

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

Posted: Fri May 18, 2012 11:03 am
by ottokung25
ยังไม่ได้ครับ ตอนนี้ผมปรับโค๊คเป็นด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
'Dim i As Integer
'Dim j As Integer
'Dim final As Integer
'Dim actual As Integer
Dim a As Integer

For a = 0 To UserForm2.ListBox2.ListCount - 1
   If UserForm2.ListBox2.Selected(a) = True Then
    Worksheets("RENT").Range("C65536").End(xlUp).Offset(A1, 2, 3) = UserForm2.ListBox2.list(a)
    UserForm2.ListBox2.Selected(a) = False
    Exit For
   End If
Next


'For i = 1 To 1000
'If Oat3.Cells(i, 3) = "" Then
'final = i
'Exit For
'End If
'Next


Oat7.Cells(a, 2) = UserForm2.TextBox8
Oat7.Cells(a, 1) = UserForm2.TextBox9
Oat3.Cells(a, 2) = UserForm2.ComboBox1
Oat3.Cells(a, 5) = UserForm2.TextBox11
Oat3.Cells(a, 4) = UserForm2.TextBox6
Oat3.Cells(a, 6) = UserForm2.TextBox10
Oat3.Cells(a, 8) = UserForm2.TextBox7

 
UserForm2.ListBox2 = ""
UserForm2.ComboBox1 = ""
UserForm2.TextBox8 = ""
UserForm2.TextBox9 = ""
UserForm2.TextBox11 = ""
UserForm2.TextBox6 = ""
UserForm2.TextBox10 = ""
UserForm2.TextBox7 = ""


UserForm15.Hide
UserForm2.Hide

End Sub
ยังไม่มีการใส่ค่าจากใน Listbox อยู่ดีครับ ช่วยดูให้หน่อยครับ

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

Posted: Fri May 18, 2012 11:40 am
by snasui
:D Code ด้านล่างนี้ไม่ถูกต้องครับ

Code: Select all

.Offset(A1, 2, 3)
Offset จะมี Parameter ได้ 2 ค่าเท่านั้นคือบรรทัดและคอลัมน์

เช่น Range("A1").Offset(1,0) หมายความว่า ให้ดูที่ A1 จากนั้นเลื่อนไป 1 บรรทัดและ 0 คอลัมน์ นั่นหมายความว่าตำแหน่งที่ได้คือ A2 ดังนั้น Code ควรจะเป็น .Offset(2,3) เท่านั้น

เท่าที่ดู Code ด้านล่าง

Code: Select all

For a = 0 To UserForm2.ListBox2.ListCount - 1
   If UserForm2.ListBox2.Selected(a) = True Then
    Worksheets("RENT").Range("C65536").End(xlUp).Offset(A1, 2, 3) = UserForm2.ListBox2.list(a)
    UserForm2.ListBox2.Selected(a) = False
    Exit For
   End If
Next
เห็นว่าเมื่อเข้าเงื่อนไขแล้วให้ออกจาก Loop (Exit For) เมื่อเป็นเช่นนั้นค่าที่จะนำไปวางจะได้แค่ตัวเดียวเท่านั้น ควรจะ Loop ให้จบเพื่อจะได้นำไปทุกค่าที่ต้องการ

ลองทำตัวอย่างโดยตัดมาเฉพาะ Form ที่เป็นปัญหานี้ Code และชีทที่ต้องการจะให้แสดงผลจะได้ง่ายเข้าครับ

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

Posted: Fri May 18, 2012 2:35 pm
by ottokung25
snasui wrote::D Code ด้านล่างนี้ไม่ถูกต้องครับ

Code: Select all

.Offset(A1, 2, 3)
Offset จะมี Parameter ได้ 2 ค่าเท่านั้นคือบรรทัดและคอลัมน์

เช่น Range("A1").Offset(1,0) หมายความว่า ให้ดูที่ A1 จากนั้นเลื่อนไป 1 บรรทัดและ 0 คอลัมน์ นั่นหมายความว่าตำแหน่งที่ได้คือ A2 ดังนั้น Code ควรจะเป็น .Offset(2,3) เท่านั้น

เท่าที่ดู Code ด้านล่าง

Code: Select all

For a = 0 To UserForm2.ListBox2.ListCount - 1
If UserForm2.ListBox2.Selected(a) = True Then
Worksheets("RENT").Range("C65536").End(xlUp).Offset(A1, 2, 3) = UserForm2.ListBox2.list(a)
UserForm2.ListBox2.Selected(a) = False
Exit For
End If
Next
เห็นว่าเมื่อเข้าเงื่อนไขแล้วให้ออกจาก Loop (Exit For) เมื่อเป็นเช่นนั้นค่าที่จะนำไปวางจะได้แค่ตัวเดียวเท่านั้น ควรจะ Loop ให้จบเพื่อจะได้นำไปทุกค่าที่ต้องการ

ลองทำตัวอย่างโดยตัดมาเฉพาะ Form ที่เป็นปัญหานี้ Code และชีทที่ต้องการจะให้แสดงผลจะได้ง่ายเข้าครับ
ตอนนี้ผมเจอปัญหาที่บรรทัดนี้ครับ

Code: Select all

If UserForm2.ListBox2.Selected(a) = True Then
Worksheets("RENT").Range("C65536").End(xlUp).Offset(A1, 2, 3) = UserForm2.ListBox2.list(a)
ผมลอง Debug แล้วพอมันเข้าเงื่อไข If แล้วมันข้ามบรรทัดที่ 2 ไปเลยครับ คือมัน Exit เลย ทั้งๆที่เงื่อนไขตรง แต่มันไม่เข้าไปทำงานข้างในครับ ช่วยดูหน่อยครับ

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

Posted: Fri May 18, 2012 3:30 pm
by snasui
:shock: :roll: ผมเขียนบอกไปแล้วครับว่า ตรง Offset ไม่ถูกต้อง

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

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

Posted: Fri May 18, 2012 4:36 pm
by ottokung25

Code: Select all

For a = 0 To UserForm2.ListBox2.ListCount - 1
   If UserForm2.ListBox2.Selected(a) = True Then
    UserForm2.ListBox2.list(a) = Worksheets("RENT").Range("C65536").End(xlUp).offset(2, 3)
    'UserForm2.ListBox2.Selected(a) = False
         End If
Next a
ขอโทษครับ :cry: Copy โค๊ดผิดอันครับ อันบนนี่ที่แก้แล้วครับ

ประเด็นเดิมนะครับ Debug แล้วเห็นมันเข้าเช็ค IF ว่า True แต่มันไม่ทำบรรทัดต่อไปครับ มันข้ามไป End If เลย

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

Posted: Fri May 18, 2012 4:50 pm
by snasui
:D เรากำลังจะนำค่าจาก UserForm ไปบันทึกใน Worksheet แต่ Code ที่โพสต์มาเป็นการนำค่าจาก Worksheet ลงใน Form มัน Error ให้ทำการ Debug ก็ถูกต้องแล้วครับ เนื่องจาก Code ควรจะเป็นตามด้านล่างครับ

Code: Select all

For a = 0 To UserForm2.ListBox2.ListCount - 1
   If UserForm2.ListBox2.Selected(a) = True Then
     Worksheets("RENT").Range("C65536").End(xlUp).Offset(2, 3) = UserForm2.ListBox2.List(a)
    UserForm2.ListBox2.Selected(a) = False
    End If
Next a

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

Posted: Sun May 20, 2012 6:01 pm
by ottokung25
ผลลัพธ์เหมือนเดิมเลยครับ ผมไม่รู้จะแก้อย่างไรแล้ว

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

Posted: Sun May 20, 2012 9:44 pm
by snasui
:D ผมแจ้งให้คุณ ottokung25 ลองทำมาตามด้านล่างแต่ยังไม่เห็นแนบมาให้เลยครับ :flw:
snasui wrote:ลองทำตัวอย่างโดยตัดมาเฉพาะ Form ที่เป็นปัญหานี้ Code และชีทที่ต้องการจะให้แสดงผลจะได้ง่ายเข้าครับ
เพื่อลดความซับซ้อนควรตัดสิ่งที่ไม่เกี่ยวข้องออกไปก่อนจะได้ค้นหาปัญหาได้ง่าย สำหรับครั้งนี้ผมทำมาให้ก่อน ลองทดสอบตามไฟล์แนบ โดย
  1. คลิกปุ่ม Show Form
  2. คลิกเลือกค่าที่ต้องการใน ListBox1 แล้วกดปุ่ม >> (คือปุ่ม CommandButton4)
  3. คลิกเลือกค่าที่ต้องการใน ListBox2 แล้วคลิกปุ่ม OK
  4. สังเกตค่าในคอลัมน์ C ของชีท RENT
สังเกตว่า Code สำหรับการนำค่าใน ListBox2 ไปวางคือ Code ที่ผมได้ตอบไปแล้วคือตามด้านล่าง
snasui wrote: :D กรณีต้องการนำข้อมูลใน ListBox ไปวางใน Worksheet ลองดูตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

For a = 0 To UserForm2.ListBox2.ListCount - 1
   If UserForm2.ListBox2.Selected(a) = True Then
    Worksheet("RENT").Range("C65536").End(xlUp).Offset(1, 0) = UserForm2.ListBox2.List(a)
    UserForm2.ListBox2.Selected(a) = False
   End If
Next

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

Posted: Mon May 21, 2012 11:15 am
by ottokung25
ได้แล้วครับ ขอบคุณมากครับ

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

Posted: Mon May 21, 2012 4:40 pm
by ottokung25
สอบถามหน่อยครับ

ตอนนี้ผมอยากให้มันเช็คข้อมูลที่เลือกไว้ใน Listbox2 ให้ไปลบข้อมูลในชีทชื่อ NRENT ( ข้อมูลที่ตรงกันกับใน Listbox2 ครับ )

สามารถใช้อะไรอ้างอิงได้บ้างครับ ในการให้มันเข้าไปหาข้อมูลที่ตรงกันใน sheet แล้วลบข้อมูลนั้นออกไปครับ

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

Posted: Mon May 21, 2012 7:26 pm
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
    Dim a As Integer
    Dim rAll As Range
    Dim r As Range
    With Worksheets("NRENT")
        Set rAll = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
    End With
    For a = 0 To UserForm2.ListBox2.ListCount - 1
        If UserForm2.ListBox2.Selected(a) Then
            For Each r In rAll
                If r = UserForm2.ListBox2.list(a) Then
                    r.EntireRow.Delete
                End If
            Next r
'            Worksheets("RENT").Range("C65536").End(xlUp).Offset(1, 0) = UserForm2.ListBox2.list(a)
            UserForm2.ListBox2.Selected(a) = False
        End If
    Next
End Sub
ควรเขียน Code ที่ลองปรับเองมาด้วย เผื่อสามารถจะเขียน Code ต่อจากนั้นได้เลยครับ

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

Posted: Thu May 24, 2012 7:42 pm
by ottokung25
สอบถามเพิ่มเติมครับ ตอนนี้ผมต้องการที่จะเอาข้อมูลที่อยู่ในในชีทชื่อ NRENT ไปไว้ใน SHEET2 ครับ โดยการ Cut ข้อมูลตามที่เลือกไว้ใน Listbox2 ครับ

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

Code: Select all

With Worksheets("NRENT")
        Set rAll = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
    End With
    For a = 0 To UserForm2.ListBox2.ListCount - 1
        If UserForm2.ListBox2.Selected(a) = False Then
            
               Worksheets("RENT").Range("C65536").End(xlUp).Offset(1, 0) = UserForm2.ListBox2.list(a)
            For Each r In rAll
                If r = UserForm2.ListBox2.list(a) Then
                    r.EntireRow.Cut = Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).Paste
                    
                End If
            Next r

            UserForm2.ListBox2.Selected(a) = True
        End If
    Next
ไม่ทราบว่าผมใช้คำสั่ง .cut และ .paste ผิดไปหรือเปล่าครับ ช่วยดูให้หน่อยครับ ขอบคุณครับ

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

Posted: Thu May 24, 2012 9:04 pm
by snasui
:D ลองปรับเป็นตามด้านล่างครับ

Code: Select all

With Worksheets("NRENT")
        Set rAll = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
End With
For a = 0 To UserForm2.ListBox2.ListCount - 1
    If UserForm2.ListBox2.Selected(a) = False Then
        Worksheets("RENT").Range("C65536").End(xlUp).Offset(1, 0) = UserForm2.ListBox2.List(a)
        For Each r In rAll
            If r = UserForm2.ListBox2.List(a) Then
                r.EntireRow.Cut
                Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0).Paste
            End If
        Next r
        UserForm2.ListBox2.Selected(a) = True
    End If
Next

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

Posted: Thu May 24, 2012 9:35 pm
by ottokung25
ได้แล้วครับ ขอบคุณมากๆครับ

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

Posted: Fri May 25, 2012 10:28 am
by ottokung25
สอบถามเพิ่มเติมครับ ตอนนี้ผมต้องการที่จะนำค่าที่เลือกใน Combobox มาใช้ในการเปรียบเทียบกับข้อมูลในเซลล์ครับ ว่าถ้าเหมือนกันให้ Copy ไปยังอีกชีทแล้วลบข้อมูลแถวนั้น

แต่ผมลองเขียนมาแล้วไม่ทราบว่าผิดที่อะไรครับ ช่วยดูให้หน่อยครับ

Code: Select all

With Worksheets("RENT")
         Set rAll = .Range("A2", .Range("A" & Rows.count).End(xlUp))
         End With
  For k = a To 2 Step -1
       If r = InStr(1, Cells(a, 1).Value, UserForm3.ComboBox1.text, vbTextCompare) = 1 Then
            r.EntireRow.Copy Destination:=Worksheets("RENT").Range("C65536").End(xlUp).Offset(1, 0)
            r.EntireRow.Delete
            End If
        Next

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

Posted: Fri May 25, 2012 11:16 am
by snasui
:D ดู Code แล้วเหมือนไม่ครบครับ เช่น ตัวแปร a น่าจะเป็นบรรทัดสุดท้ายแต่เป็นของชีทใด กำหนดไว้ตรงไหน เหตุใดไม่ Loop จากตัวแปร rAll เป็นต้น ลองแนบไฟล์ ตัดเฉพาะส่วนที่เกี่ยวข้องกับงานนี้มาดูกันครับ