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]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)ผมดาวน์โหลดมาตรวจสอบ พบว่ามีแล้วครับsu019 wrote:อาจารย์ค่ะ ไม่มี macro Code Update_all มาด้วยค่ะ
Code: Select all
Sub UpdateAll()
UpdateData
DeleteData
End Sub
มีปัญหาแน่ครับ สูตรที่ดึงมาก็เสียหาย ใช้การไม่ได้ครับsu019 wrote:ถ้ารายการที่เราต้องการ update ซึ่งตอนนี้มันเป็นสูตรดึงข้อมูลขึ้นโชว์ข้อมูลอยู่ แล้วเรามีการแก้ไขข้อมูลในบรรทัดนั้นเลย มันจะมีปัญหาอะไรหรือเปล่าค่ะ เพราะมันเป็นสูตร
แก้ปัญหาได้แน่นอน เพราะไม่ได้ใช้สูตร และสงสัยว่าทำไมไม่วาง Code ไว้ใน Module นำมาวางไว้ใน WorkSheet ไม่เกิดผลอะไรครับ เพราะไม่สามารถทดสอบได้ครับsu019 wrote:แล้วถ้าหากจะปรับเปลี่ยนมาใช้ Code เหมือน Link การแสดงข้อมูลจากฐานข้อมูลตามเงื่อนไขด้วย VBA
http://snasui.blogspot.com/ ซึ่งไม่ทราบว่าข้อมูลที่โชว์ออกมานั้น เราสามารถแก้ไขได้เลยไหมค่ะ แล้วมันจะแก้ปัญหาตรงนี้ได้ไหมค่ะ
ตามไฟล์ที่แนบมานั้น Code ไม่ได้วางใน VBE แต่วางใน Sheet Excel ตามภาพ ซึ่งไม่สามารถทดสอบได้ครับsu019 wrote:แก้ปัญหาได้แน่นอน เพราะไม่ได้ใช้สูตร และสงสัยว่าทำไมไม่วาง Code ไว้ใน Module นำมาวางไว้ใน WorkSheet ไม่เกิดผลอะไรครับ เพราะไม่สามารถทดสอบได้ครับ หมายความว่ายังไงค่ะ ไม่เข้าใจค่ะ
Code: Select all
Option Base 1
Sub ShowEmp()
Dim a() As Variant, lng As Long
Dim r As Range, rAll As Range
Dim rt As Range, rl As Long
Application.EnableEvents = False
Application.ScreenUpdating = False
rl = Rows.Count
With Worksheets("Data2")
Set rAll = .Range("G2", .Range("G" & rl).End(xlUp))
End With
For Each r In rAll
If r = Worksheets("Report").Range("E2") Then
lng = lng + 1
ReDim Preserve a(5, lng)
a(1, lng) = lng
a(2, lng) = r.Offset(0, -6)
a(3, lng) = r.Offset(0, -5)
a(4, lng) = r.Offset(0, -4)
a(5, lng) = r.Offset(0, -3)
End If
Next r
If lng > 0 Then
With Worksheets("Report")
Set rt = .Range("A5", .Range("E" & lng - 1 + 5))
.Range("A5", .Range("E" & rl)).ClearContents
.Range("A5:E5").Copy
rt.PasteSpecial xlPasteFormats
rt = Application.Transpose(a)
.Range("E2").Select
End With
Else
MsgBox "Data not found."
End If
Application.EnableEvents = True
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
Code: Select all
ReDim Preserve a(5, lng)
Code: Select all
ReDim Preserve a(9, lng)
Code: Select all
Set rt = .Range("A5", .Range("J" & lng - 1 + 5))
Code: Select all
Set rt = .Range("A5", .Range("J" & lng - 1 + 9))
Code: Select all
.Range("B5", .Range("B" & rl).End(xlUp)).NumberFormat = "@"
Code: Select all
Sub UpdateAll()
UpdateData
DeleteData
End Sub
Sub UpdateData()
Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
With Worksheets("Report")
Set rsAll = .Range("L5", .Range("L" & (5 - 1 + .Range("H2"))))
End With
With Worksheets("Database")
Set rtAll = .Range("C2", .Range("C" & Rows.Count).End(xlUp))
End With
For Each rs In rsAll
For i = rtAll.Count To 1 Step -1
If rs.Offset(0, -10) = rtAll(i).Offset(0, -1) _
And rs.Offset(0, -9) = rtAll(i) _
And rs = "Update" Then
rs.Offset(0, -10).Resize(1, 10).Copy
rtAll(i).Offset(0, -1).PasteSpecial xlPasteValues
End If
Next i
Next rs
Application.CutCopyMode = False
End Sub
Sub DeleteData()
Dim rsAll As Range, rtAll As Range
Dim rs As Range, i As Integer
With Worksheets("Report")
Set rsAll = .Range("L5", .Range("L" & (5 - 1 + .Range("H2"))))
MsgBox "Please Confirm Delete & Update Data OI "
End With
With Worksheets("Database")
Set rtAll = .Range("C2", .Range("C" & Rows.Count).End(xlUp))
End With
For Each rs In rsAll
For i = rtAll.Count To 1 Step -1
If rs.Offset(0, -10) = rtAll(i).Offset(0, -1) _
And rs.Offset(0, -9) = rtAll(i) _
And rs = "Update" Then
rtAll(i).EntireRow.Delete
End If
Next i
Next rs
End Sub
เมื่อไม่ใช่ก็ปรับให้เป็นใช่ครับ ผมเขียน Code เผื่อมาให้กรณีใช้สองเงื่อนไข กรณีไม่ใช้ก็ลบเงื่อนไขที่ไม่ใช้ทิ้งไปครับsu019 wrote:ตรงนี้มันไม่ใช่ค่ะ สิ่งที่ต้องการให้ข้อมูลจะ update หรือ Delete ก้ต่อเมื่อ เป็นไปตาม OI ที่เราดึงข้อมูลมาค่ะ