อยากได้คำสั่ง วนลูป Range Column ที่เรากำหนด ใช้ใน IF
สวัสดีคะ ตอนนี้ติดปัญหาคะ
คืออยากได้โค้ด ที่ใช้คำสั่งวน ไป column ถัดไป
ซึ่งตอนนี้ใช้
If target.Address = Range("$E$18").Address Then
ต้องการคำสั่งที่ วนใช้ Column ถัดไป คือ E เเล้วต่อไป เป็น F ,G, H,I
ตามที่กำหนด รบกวนหน่อยคะ
Code ตามด้านล่างคะ
Sub worksheet_change(ByVal target As Range)
If target.Address = Range("$E$18").Address Then
Dim lot As String
lot = Range("E18:E18").Value
If Len(lot) <= 0 Then
Exit Sub
End If
Dim a As String
Dim x As String
a = getLotabc(x)
x = Range("E18:E18").Value
Call ShowMFGDate(lot)
End If
If target.Address = Range("$E$18:$I$18").Address Then
If UCase(target.Value) = UCase(Range("E39:E39").Value) Then
Range("E18:E18").Value = lot
End If
End If
End Sub
Function ConvertDate(lot As String) As Date
Dim nyear As Integer
Dim nmonth As Integer
Dim nday As Integer
Dim sTmp As String
sTmp = Mid(CStr(VBA.Year(Now())), 1, 3)
nyear = CInt(sTmp & Mid(lot, 1, 1))
sTmp = Mid(UCase(lot), 2, 1)
Select Case sTmp
Case "X"
nmonth = 10
Case "Y"
nmonth = 11
Case "Z"
nmonth = 12
Case Else
nmonth = CInt(sTmp)
End Select
nday = CInt(Mid(lot, 3, 2))
Dim dt As Date
dt = DateSerial(nyear, nmonth, nday)
ConvertDate = dt
End Function
Sub ShowMFGDate(lot As String)
Dim showlot As String
showlot = Range("E18:E18").Value
If UCase(showlot) = "NO" Then
Range("E18:E18").Value = showlot
Exit Sub
End If
Dim dt As Date
dt = ConvertDate(showlot)
Range("E39:E39").Value = dt
dt = Range("E39:E39")
lot = Range("E39:E39")
Range("E39:E39").Value = Format(dt, "dd-MMM-YY")
End Sub
Function getLotabc(x As String)
Dim a As String
a = Range("E18:E18").Value
getLotabc = a
End FunctionTag : .NET, Ms Access, Excel (Excel.Application)
Date :
2018-10-11 11:53:23
By :
S-Hyun
View :
2371
Reply :
4
ต้องเปลี่ยน .Range มาเป็น .Cells(RowIndex,columnIndex) แทนครับ
เนื่องจาก .Range มัน Loop ได้ในแนวลึก คือ แถวเท่านั้นไม่สามารถ Loop แนวนอน แบบคอลัมภ์ได้
Date :
2018-10-11 12:59:57
By :
K
ตัวอย่างโค้ดในการ Loop คอลัมภ์
ถ้าเริ่มจากคอลัมภ์ E Index column = 5 อ้างอิงจากรูป
ผมสมมุติว่าแถวที่ต้องการค่าคือแถวที่ 3 จะเขียนโค้ดได้ดังนี้
Code (VB.NET)
Dim Get_Column As Integer
Dim Get_Value As Integer ' เก็บค่าจาก Cells ที่เลือกใน Loop (อันนี้ผมเก็บแบบทับค่าเดิม หากไม่ต้องการทับค่าต้องเก็บเป็นอะเรย์)
For Get_Column = 5 To 9
Get_Value = Sheet1.Cells(3, Get_Column).Value
Next
Date :
2018-10-11 13:23:06
By :
K
เวลาที่นำโค๊ดไปทดลองแล้ว ไม่ได้ก็ควรจะนำโค๊ดที่ตัวเองทำแล้ว มาแสดง เพื่อที่คนตอบเขาจะได้รู้ว่าคุณทำอย่างไร มันถีงไม่ได้
พอตอบว่าไม่ได้ โดยที่ไม่มีอะไรบอกว่าเอาไปทำอย่างไร มันก็คงจบกันแค่นี้ คนตอบเขาคงมโนเองไม่ได้ว่า จะเป็นอย่างไรต่อไป
Date :
2018-10-11 14:36:59
By :
Chaidhanan
Load balance : Server 04