EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)ช่วยขยายความเพิ่มเติมว่า เอาค่าจากไหนไปไหนครับsnasui wrote: ไม่เข้าใจครับottokung25 wrote:ต้องการให้เอาค่าใน Oat3(Rent) ในคอลัมภ์ที่ 3 ชื่อ EQ-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
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
Code: Select all
.Offset(A1, 2, 3)
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
ตอนนี้ผมเจอปัญหาที่บรรทัดนี้ครับsnasui wrote: Code ด้านล่างนี้ไม่ถูกต้องครับOffset จะมี Parameter ได้ 2 ค่าเท่านั้นคือบรรทัดและคอลัมน์Code: Select all
.Offset(A1, 2, 3)
เช่น Range("A1").Offset(1,0) หมายความว่า ให้ดูที่ A1 จากนั้นเลื่อนไป 1 บรรทัดและ 0 คอลัมน์ นั่นหมายความว่าตำแหน่งที่ได้คือ A2 ดังนั้น Code ควรจะเป็น .Offset(2,3) เท่านั้น
เท่าที่ดู Code ด้านล่างเห็นว่าเมื่อเข้าเงื่อนไขแล้วให้ออกจาก Loop (Exit For) เมื่อเป็นเช่นนั้นค่าที่จะนำไปวางจะได้แค่ตัวเดียวเท่านั้น ควรจะ Loop ให้จบเพื่อจะได้นำไปทุกค่าที่ต้องการ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
ลองทำตัวอย่างโดยตัดมาเฉพาะ 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)
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
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
เพื่อลดความซับซ้อนควรตัดสิ่งที่ไม่เกี่ยวข้องออกไปก่อนจะได้ค้นหาปัญหาได้ง่าย สำหรับครั้งนี้ผมทำมาให้ก่อน ลองทดสอบตามไฟล์แนบ โดยsnasui wrote:ลองทำตัวอย่างโดยตัดมาเฉพาะ Form ที่เป็นปัญหานี้ 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
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: 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
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
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