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

ไม่ได้ช่วยให้เข้าใจเพิ่มขึ้นครับ เขียนให้ครบถ้วนกระบวนความครับ งดเขียนเป็นท่อน ๆ อย่างเช่นที่เขียนมานี้ ต้องการทำอะไร จากไหน ไปไหน เริ่มตั้งแต่ต้นจนจบสำหรับงานท่อนนี้ครับ
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

กรณีต้องการนำข้อมูลใน 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

Code ด้านล่างนี้ไม่ถูกต้องครับ
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:
Code ด้านล่างนี้ไม่ถูกต้องครับ
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

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

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
ขอโทษครับ

Copy โค๊ดผิดอันครับ อันบนนี่ที่แก้แล้วครับ
ประเด็นเดิมนะครับ Debug แล้วเห็นมันเข้าเช็ค IF ว่า True แต่มันไม่ทำบรรทัดต่อไปครับ มันข้ามไป End If เลย
Re: ต้องการดึงข้อมูลจากใน Sheet มาใน Userform ครับ
Posted: Fri May 18, 2012 4:50 pm
by snasui

เรากำลังจะนำค่าจาก 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

ผมแจ้งให้คุณ ottokung25 ลองทำมาตามด้านล่างแต่ยังไม่เห็นแนบมาให้เลยครับ
snasui wrote:ลองทำตัวอย่างโดยตัดมาเฉพาะ Form ที่เป็นปัญหานี้ Code และชีทที่ต้องการจะให้แสดงผลจะได้ง่ายเข้าครับ
เพื่อลดความซับซ้อนควรตัดสิ่งที่ไม่เกี่ยวข้องออกไปก่อนจะได้ค้นหาปัญหาได้ง่าย สำหรับครั้งนี้ผมทำมาให้ก่อน ลองทดสอบตามไฟล์แนบ โดย
- คลิกปุ่ม Show Form
- คลิกเลือกค่าที่ต้องการใน ListBox1 แล้วกดปุ่ม >> (คือปุ่ม CommandButton4)
- คลิกเลือกค่าที่ต้องการใน ListBox2 แล้วคลิกปุ่ม OK
- สังเกตค่าในคอลัมน์ C ของชีท RENT
สังเกตว่า Code สำหรับการนำค่าใน ListBox2 ไปวางคือ Code ที่ผมได้ตอบไปแล้วคือตามด้านล่าง
snasui wrote: 
กรณีต้องการนำข้อมูลใน 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

ลองปรับ 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 อีกแล้วครับ

ตัวอย่าง 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

ลองปรับเป็นตามด้านล่างครับ
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

ดู Code แล้วเหมือนไม่ครบครับ เช่น ตัวแปร a น่าจะเป็นบรรทัดสุดท้ายแต่เป็นของชีทใด กำหนดไว้ตรงไหน เหตุใดไม่ Loop จากตัวแปร rAll เป็นต้น ลองแนบไฟล์ ตัดเฉพาะส่วนที่เกี่ยวข้องกับงานนี้มาดูกันครับ