Page 2 of 2
Re: การรันลำดับที่
Posted: Sun Jan 20, 2013 10:17 pm
by snasui
krukrit wrote:มีปัญหาการเขียนคำสั่งMacroครับ 2 จุดครับ
1. เวลาโอนข้อมูลมาแล้วไม่มีเส้นตารางในส่วนที่โอนมาครับ
2. ในช่อง จำนวนเงิน ไม่เหมือนใน data ครับ คือไม่มีทศนิยม ครับ
ไม่รู้ว่าจะเขียนอย่างไรครับ
ข้อความนี้ผมทราบแล้ว จากที่โพสต์มาไม่ต่ำกว่าสองรอบ

แสดงว่าบันทึก Macro มาแล้ว คิดว่าเข้าใจการบันทึก Macro นะครับ การเขียน VBA กับการบันทึก Macro ไม่เหมือนกันนะครับ
เมื่อบันทึก Macro มาแล้ว ช่วยโพสต์ Code และแนบไฟล์ล่าสุดมาดูกันครับ ช่วยแจ้งมาด้วยว่าอยู่ที่ Module ใด ชื่อว่า Procedure อะไร
Re: การรันลำดับที่
Posted: Tue Jan 22, 2013 8:02 pm
by krukrit
หาวิธีแก้ไขได้แล้วครับ
แต่มีปัญหาใหม่ครับคือ เวลาโอนข้อมูลแล้วอยากให้แต่คนที่มียอดเงินมา
ผมเขียน vba แล้วแต่ก็ยังมีคนมีมียอดเงินเป็นตัวหนังสือมาด้วย
แก้ไขอย่างไรครับ
Re: การรันลำดับที่
Posted: Tue Jan 22, 2013 8:14 pm
by snasui

ลองดูตัวอย่าง Code ตามด้านล่างครับ
Code: Select all
Private Sub CommandButton1_Click()
With Sheet2
.Cells(2, 1) = "ลำดับที่"
.Cells(2, 2) = "เลขที่สมาชิก"
.Cells(2, 3) = "ชื่อ - สกุล"
.Cells(2, 4) = "จำนวนเงิน"
.Range("A2", "D2").HorizontalAlignment = xlCenter
.Range("A2", "D2").Font.Bold = True
r = 3
l = 1
For i = 2 To Sheet1.Range("A" & Rows.Count).End(xlUp).Row
If IsNumeric(Sheet1.Cells(i, 3)) And Trim(Sheet1.Cells(i, 3)) _
<> "Transaction Number" Then
.Cells(r, 1) = l
.Cells(r, 2) = Trim(Sheet1.Cells(i, 1))
.Cells(r, 3) = Trim(Sheet1.Cells(i, 2))
.Cells(r, 4) = Trim(Sheet1.Cells(i, 3))
r = r + 1
l = l + 1
End If
Next
End With
End Sub
Re: การรันลำดับที่
Posted: Tue Jan 22, 2013 8:37 pm
by krukrit
ขอคุณมากครับ
ขอเพิ่มอีกนิดครับคือ โอนข้อมูลมาแล้วให้มีผลรวมจำนวนเงินทั้งหมดด้านล่างครับ
Re: การรันลำดับที่
Posted: Tue Jan 22, 2013 8:40 pm
by snasui

ลองปรับมาดูก่อน ติดตรงไหนสามารถถามมาได้เรื่อย ๆ ครับ
Re: การรันลำดับที่
Posted: Tue Jan 22, 2013 9:23 pm
by krukrit
คิดไม่ออกจริงๆ ครับช่วยด้วยครับ
Re: การรันลำดับที่
Posted: Tue Jan 22, 2013 9:30 pm
by snasui

ลองบันทึก Macro การสร้างยอดรวมมาครับ ได้เท่าไรก็เท่านั้น สำหรับการบันทึก Macro ด้วย Excel 2003 ดูที่นี่ครับ
http://office.microsoft.com/th-th/excel ... 04711.aspx
http://office.microsoft.com/en-us/excel ... 04711.aspx
Re: การรันลำดับที่
Posted: Wed Jan 30, 2013 8:19 pm
by krukrit
1. ทำอย่างไรถึงจะค้นหาคนที่มีชื่อเดียวกันหรือใกล้เคียงถัดไปได้ คือคลิก ครั้งแรกเป็นคนที่ 1 คลิกครั้งที่สอง เป็นคนถัดไป เรือยๆ ครับ
2. ทำอย่างไรถึงจะได้ผลรวมจำนวนเงินด้านล่างแบบแถบสีเหลือง ครับ
Re: การรันลำดับที่
Posted: Wed Jan 30, 2013 9:59 pm
by snasui

ที่ผมบอกให้บันทึก Macro เกียวกับการหายอดรวมอยู่ที่ Procedure ใดครับ
ลองอธิบายเกี่ยวกับการค้นหามาว่ามีลักษณะการทำงานอย่างไร Code ที่เขียนมาแล้วนั้นติดขัดตรงไหนครับ
Re: การรันลำดับที่
Posted: Thu Jan 31, 2013 2:51 pm
by krukrit
โอนข้อมูลมายังform1 ได้ แต่ติดตรงที่จะรวมยอดเงินทั้งหมดให้มาต่อท้ายจำนวนเงินที่โอนครับ
Code: Select all
Private Sub CommandButton6_Click()
If Range("K10") = "" Then Exit Sub
i = WorksheetFunction.CountA(Worksheets("form1").Columns("b:b")) + 3
Worksheets("form1").Cells(i, 2).Value = Range("K3").Value
Worksheets("form1").Cells(i, 3).Value = Range("K7").Value
Worksheets("form1").Cells(i, 4).Value = Range("K8").Value
Worksheets("form1").Cells(i, 5).Value = Range("K9").Value
Worksheets("form1").Cells(i, 6).Value = Range("K10").Value
If Range("A4") = "" Then
Worksheets("form1").Cells(i, 1).Value = 1
Worksheets("form1").Cells(i, 7).Value = 1
Else
Worksheets("form1").Cells(i, 1).Value = Range("A3").End(xlDown) + 1
Worksheets("form1").Cells(i, 7).Value = Range("G3").End(xlDown) + 1
End If
End Sub
Re: การรันลำดับที่
Posted: Thu Jan 31, 2013 2:59 pm
by krukrit
ส่วนที่เป็นการค้นหาจะหาได้เฉพาะคนแรกคนถัดไปไม่เลื่อนไปครับ(คลิกกี่ครั้งก็อยู่ที่คนแรกครับ)
Code: Select all
Private Sub CommandButton4_Click()
If Range("K1") = "" Then Exit Sub
If Worksheets("data").Columns("a:d").Find(Range("K1"), LookIn:=xlValues) Is Nothing Then
MsgBox "äÁèÁÕàÅ¢•Õè¹Õé!"
Else
i = Worksheets("data").Columns("a:d").Find(Range("K1"), LookIn:=xlValues).Row
Worksheets("data").Range("A" & i).Resize(1, 7).Copy
Worksheets("form1").Range("K3").PasteSpecial xlPasteValues, Transpose:=True
Application.CutCopyMode = False
End If
End Sub
Re: การรันลำดับที่
Posted: Thu Jan 31, 2013 3:54 pm
by snasui

ค่อย ๆ ถามตอบกันไปนะครับ
ไม่ทราบว่าเข้าใจ
ความหมายของการบันทึก Macro หรือไม่ครับ

Re: การรันลำดับที่
Posted: Thu Jan 31, 2013 7:44 pm
by krukrit
คือว่าผมกำลังพยายามเรียนรู้ครับอาจช้าหน่อย
ช่วยดูงานผมด้วยครับ
Re: การรันลำดับที่
Posted: Thu Jan 31, 2013 8:38 pm
by snasui

หากไม่ตอบในสิ่งที่ผมถามก็เป็นไปไม่ได้ที่ผมจะตอบตามที่ถามครับ
ผมทราบว่ากำลังเรียนรู้ สิ่งที่ผมถามก็เพื่อสิ่งนั้น คือเพื่อแนะแนวสำหรับการเรียนรู้ครับ
Re: การรันลำดับที่
Posted: Fri Feb 01, 2013 6:44 am
by snasui

ในส่วนของการค้นหาข้อมูลซึ่งเป็นคำถามใหม่และได้พยายามเขียน Code มาเองแล้ว ลองปรับเป็นตามด้านล่าง
ปรับ Code ใน Sub CommandButton4_Click เดิมเป็น
Code: Select all
Private Sub CommandButton4_Click()
Dim i As Integer
If Sheets("data").Range("I2") = "" Then Call Module1.Macro1
i = Sheets("data").Range("I2")
If Range("K1") = "" Then Exit Sub
Worksheets("data").Range("A" & i).Resize(1, 7).Copy
Worksheets("form1").Range("K3").PasteSpecial xlPasteValues, Transpose:=True
Application.CutCopyMode = False
Sheets("data").Range("I2").Delete shift:=xlUp
End Sub
เพิ่ม Module เข้ามาใหม่ โดยเข้าเมนู Insert > Module แล้วนำ Code ด้านล่างไปวาง
Code: Select all
Sub Macro1()
Dim rAll As Range, r As Range
Dim i As Integer
Sheets("data").Range("I:I").ClearContents
With Sheets("data")
Set rAll = .Range("A2", .Range("D" & Rows.Count).End(xlUp))
End With
For Each r In rAll
If InStr(r, Sheets("form1").Range("K1")) > 0 Then
If Sheets("data").Range("I" & Rows.Count).End(xlUp) <> r.Row Then
Sheets("data").Range("I" & Rows.Count).End(xlUp).Offset(1, 0) = r.Row
End If
End If
Next r
End Sub
Re: การรันลำดับที่
Posted: Fri Feb 01, 2013 9:18 pm
by krukrit
snasui wrote:
ค่อย ๆ ถามตอบกันไปนะครับ
ไม่ทราบว่าเข้าใจ
ความหมายของการบันทึก Macro หรือไม่ครับ

ผมเข้าใจว่าเป็นการเขียนชุดคำสั่งที่จะสั่งให้การดำเนินงานในชีตงานเป็นไปตามที่ต้องการซึ่งมีความซับซ้อนมากๆ การใช้ชุดคำสั่งเป็นการช่วยให้งานของเรามีขนาดไฟล์ไม่ใหญ่มากเหมาะกับงานที่มีฐานข้อมูลมากๆครับ ไม่รู้ว่าจะถูกตามหลักการหรือไม่ครับ
Re: การรันลำดับที่
Posted: Fri Feb 01, 2013 9:27 pm
by snasui

เป็นการเข้าใจไม่ถูกต้องครับ
บันทึก Macro คือการกำหนดให้ Excel สร้าง Code VBA มาให้ในทุกการทำงานของเรา เช่นการคลิกซ้าย คลิกขวา การกดแป้นต่าง ๆ การเข้าเมนูต่าง ๆ
Code ที่ได้มานี้ เรียกว่าเป็นการบันทึก Macro เราสามารถนำไปปรับปรุง แก้ไข เปลี่ยนแปลง เพื่อให้ตรงกับความต้องการ ลดความยุ่งยากของการเขียนขึ้นมาเองได้มาก
Code ที่ได้จากการบันทึก Macro นี้โปรแกรมมักจะสร้าง Module มาให้ใหม่ สามารถเข้าไปดูใน Module นั้น ๆ เพื่อนำ Code มาใช้ได้
ส่วนการเขียน VBA เป็นการเขียน Code ขึ้นมาเองเลย เนื่องจากมีความรู้ความเข้าใจเกี่ยวกับ Object Oriented Programming ของ Excel เป็นเบื้องต้นแล้ว สำหรับการเข้าเมนูเพื่อบันทึก Macro ผมโพสต์ Link ไว้ในความเห็นก่อน ๆ แล้ว