Page 2 of 2

Re: การรันลำดับที่

Posted: Sun Jan 20, 2013 10:17 pm
by snasui
krukrit wrote:มีปัญหาการเขียนคำสั่งMacroครับ 2 จุดครับ
1. เวลาโอนข้อมูลมาแล้วไม่มีเส้นตารางในส่วนที่โอนมาครับ
2. ในช่อง จำนวนเงิน ไม่เหมือนใน data ครับ คือไม่มีทศนิยม ครับ
ไม่รู้ว่าจะเขียนอย่างไรครับ
ข้อความนี้ผมทราบแล้ว จากที่โพสต์มาไม่ต่ำกว่าสองรอบ :roll: แสดงว่าบันทึก 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
:D ลองดูตัวอย่าง 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
:D ลองปรับมาดูก่อน ติดตรงไหนสามารถถามมาได้เรื่อย ๆ ครับ

Re: การรันลำดับที่

Posted: Tue Jan 22, 2013 9:23 pm
by krukrit
คิดไม่ออกจริงๆ ครับช่วยด้วยครับ

Re: การรันลำดับที่

Posted: Tue Jan 22, 2013 9:30 pm
by snasui
:D ลองบันทึก 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
:D ที่ผมบอกให้บันทึก 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
:D ค่อย ๆ ถามตอบกันไปนะครับ

ไม่ทราบว่าเข้าใจความหมายของการบันทึก Macro หรือไม่ครับ :?:

Re: การรันลำดับที่

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

Re: การรันลำดับที่

Posted: Thu Jan 31, 2013 8:38 pm
by snasui
:roll: หากไม่ตอบในสิ่งที่ผมถามก็เป็นไปไม่ได้ที่ผมจะตอบตามที่ถามครับ

ผมทราบว่ากำลังเรียนรู้ สิ่งที่ผมถามก็เพื่อสิ่งนั้น คือเพื่อแนะแนวสำหรับการเรียนรู้ครับ

Re: การรันลำดับที่

Posted: Fri Feb 01, 2013 6:44 am
by snasui
:D ในส่วนของการค้นหาข้อมูลซึ่งเป็นคำถามใหม่และได้พยายามเขียน 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::D ค่อย ๆ ถามตอบกันไปนะครับ

ไม่ทราบว่าเข้าใจความหมายของการบันทึก Macro หรือไม่ครับ :?:

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

Re: การรันลำดับที่

Posted: Fri Feb 01, 2013 9:27 pm
by snasui
:D เป็นการเข้าใจไม่ถูกต้องครับ

บันทึก Macro คือการกำหนดให้ Excel สร้าง Code VBA มาให้ในทุกการทำงานของเรา เช่นการคลิกซ้าย คลิกขวา การกดแป้นต่าง ๆ การเข้าเมนูต่าง ๆ

Code ที่ได้มานี้ เรียกว่าเป็นการบันทึก Macro เราสามารถนำไปปรับปรุง แก้ไข เปลี่ยนแปลง เพื่อให้ตรงกับความต้องการ ลดความยุ่งยากของการเขียนขึ้นมาเองได้มาก

Code ที่ได้จากการบันทึก Macro นี้โปรแกรมมักจะสร้าง Module มาให้ใหม่ สามารถเข้าไปดูใน Module นั้น ๆ เพื่อนำ Code มาใช้ได้

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