Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 20

Chủ đề: Nhờ thêm vòng lặp cho file mảco có sẵn

  1. #1
    nguyenhuongit Guest

    Nhờ thêm vòng lặp cho file mảco có sẵn

    Hiện tại mình có đoạn code marco như sau

    Sub process()
    '
    ' process Macro
    '
    ' Keyboard Shortcut: Ctrl+y
    '
    Windows("search_result 8IS6.csv").Activate
    Range("Q2").Select 'mình muốn tăng lên thành Q3, Q4... sau khi chạy xong 1 lượt xử lý
    Selection.Copy
    Windows("sample.xlsm").Activate
    Range("B2").Select
    ActiveSheet.Paste
    Application.Run "sample.xlsm!Sheet2.Demo1"
    Range("E2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("process").Select
    ActiveWindow.SmallScroll Down:=-12
    Range("G1").Select
    ActiveSheet.Paste
    Application.Run "sample.xlsm!Macro8"
    Sheets("Summary").Select
    Range("E8").Select 'mình muốn tăng lên thành F8, G8... sau khi chạy xong 1 lượt xử lý
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Range("F8").Select
    End Sub

    Mình đang muốn cho marco tự chạy và muốn sau khi chạy xong marco cho 1 dòng thì sẽ tự chạy dòng tiếp theo và paste vào dòng tiếp theo
    Ở đây mình cần 1 vòng loop để số dòng(Q2->Q3->Q4...) tự tăng lên cho đến khi ko có dữ liệu trong ô đuợc chỉ định là blank thì ngừng lại. Nhưng do ko biết và mới làm với excel nên mong đc các bạn giúp đỡ

  2. #2
    quatangdn1 Guest
    Sub process()
    Dim cll as range, rng1 as range, rng2 as range
    rng1 = Range("Q2:Q4")
    For each cll in rng1
    cll.select
    '.....'đoạn code cần chạy lặp lại
    Next
    rng2 = range("E8:G8")
    for each cll in rng2
    cll.select
    '....'đoạn code cần chạy lặp lại
    next
    End sub

  3. #3
    Ngày tham gia
    Aug 2015
    Bài viết
    0
    Trích dẫn Gửi bởi duydhk
    Hiện tại mình có đoạn code marco như sau

    Sub process()
    '
    ' process Macro
    '
    ' Keyboard Shortcut: Ctrl+y
    '
    Windows("search_result 8IS6.csv").Activate
    Range("Q2").Select 'mình muốn tăng lên thành Q3, Q4... sau khi chạy xong 1 lượt xử lý
    Selection.Copy
    Windows("sample.xlsm").Activate
    Range("B2").Select
    ActiveSheet.Paste
    Application.Run "sample.xlsm!Sheet2.Demo1"
    Range("E2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("process").Select
    ActiveWindow.SmallScroll Down:=-12
    Range("G1").Select
    ActiveSheet.Paste
    Application.Run "sample.xlsm!Macro8"
    Sheets("Summary").Select
    Range("E8").Select 'mình muốn tăng lên thành F8, G8... sau khi chạy xong 1 lượt xử lý
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Range("F8").Select
    End Sub

    Mình đang muốn cho marco tự chạy và muốn sau khi chạy xong marco cho 1 dòng thì sẽ tự chạy dòng tiếp theo và paste vào dòng tiếp theo
    Ở đây mình cần 1 vòng loop để số dòng(Q2->Q3->Q4...) tự tăng lên cho đến khi ko có dữ liệu trong ô đuợc chỉ định là blank thì ngừng lại. Nhưng do ko biết và mới làm với excel nên mong đc các bạn giúp đỡ
    Bạn làm gì mà cứ chọn ô, copy và dán liên tục vậy, làm như vậy code chạy rất lâu. Bạn muốn làm vấn đề gì thì cứ nêu câu hỏi và đưa file mẫu lên đây mọi người giúp cho chứ quay macro như vậy thì code chạy chậm mà hiệu quả lại không như ý muốn.

  4. #4
    seluoncocach Guest
    Mình có 1 file excel "sample.xlsm" và 1 file csv. Mình muốn làm như sau


    1. Copy data từ ô Q2 của file CSV
    2. Paste data vào ô B2 của sheet sample, sau đó xử lý đoạn data này
    Xử lý file như sau :
    a. Xuống dòng sau mỗi dấu ">"
    b. Nếu sau dấu ">" mà chưa bị đóng tag("/>") thì dòng phía dưới phải lùi vào 2 space, giống như khi bạn copy 1 đoạn xml vào notepad ++ bạn sẽ nhìn thấy và hiểu ngay
    Phần xử lý này chính là marco trong "sample.xlsm!Sheet2.Demo1" mà mình đã có
    3. Sau khi xử lý data như yêu cần trên xong, data sẽ đc paste vào ô E2( hoặc paste thẳng vào ô G1 bên sheet "process")
    4. Tại ô G1 mình dùng marco để chạy tiếp mấy lệnh replace để có đc data như mình muốn và so sánh đc với cell A1 để biết đc là data đó có những tag nào
    5. Copy và paste data nhận đc ở trên từ ô C1-> C143 rồi paste vào E8 của sheet "summary"
    6. Lặp lại từ đầu với Q3, Q4, Q5.... cho đến khi ô Qn là blank. Xử lý như các buớc trên và paste vào F8, G8.....


    Mình đã làm marco cho hết các công đoạn từ 1 -> 5 nhưng ko biết nên đặt vòng lặp thế nào để xử lý tiếp cho các ô tiếp theo

  5. #5
    annado9x Guest
    Vậy thì toàn bộ code của bạn như sau (Kể cả mình chuyển Sub Demo1 thành hàm Demo)


    Mã:
    Option Explicit
    '---------------------------------
    
    
    Sub ProcessDT()
    Dim ShRou As Worksheet, ShDes As Worksheet, ClRou As Range, ClDes As Range, ClSave As Range
    Dim Tm(), i
    Set ShRou = Workbooks("search_result 8IS6").Worksheets("search_result 8IS6")
    Set ShDes = Workbooks("sample").Worksheets("sample")
    Set ClRou = ShRou.[Q1]
    Set ClDes = ShDes.[B1]
    ShDes.Cells.ClearContents
    Do While ClRou.Value <> ""
    ClDes.Value = ClRou.Value
    Set ClSave = ShDes.Cells(ShDes.Rows.Count, "E").End(xlUp)
    If ClSave.Value <> "" Then ClSave = ClSave.Offset(1)
    Tm = Demo(ClDes.Value)
    ClSave.Resize(UBound(Tm)) = Tm
    Set ClRou = ClRou.Offset(1)
    Set ClDes = ClDes.Offset(1)
    Loop
    Set ShRou = Nothing: Set ShDes = Nothing
    Set ClRou = Nothing: Set ClDes = Nothing: Set ClSave = Nothing
    End Sub
    
    '----------------------------------------
    
    
    Function Demo(Ch As String)
    Dim Spq, U&, R&, N&, S&, ST
            Spq = Split(Replace(Ch, ">", ">?"), "?")
             U = UBound(Spq)
        While R < U
            If Spq(R) Like "<*" Then
                         R = R + 1
            Else
                Spq(R - 1) = Spq(R - 1) & Spq(R)
                         U = U - 1
                For N& = R To U:  Spq(N) = Spq(N + 1):  Next
            End If
        Wend
        For R = 0 To U - 1
            If Spq(R) Like "</*" Then
                    S = Left$(S, Len(S) - 2)
                Spq(R) = S & Spq(R)
            Else
                    ST = Split(Spq(R), "<")
                Spq(R) = S & Spq(R)
                If Not (Spq(R) Like "*/>" Or ST(UBound(ST)) Like "/*") Then S = S & "  "
            End If
        Next
            Demo = Application.Transpose(Spq)
    End Function

  6. #6
    vivi Guest
    Thank all, mình đã làm đc rồi [IMG]images/smilies/a44.gif[/IMG]

  7. #7
    minhthai999 Guest
    <font color="#000099">@sealand
    </font>
    bạn có thể gửi cho mình xem thử file excel thực hiện đoạn code trên được ko. Thank bạn nhiều

  8. #8
    thuongbodo Guest
    Trích dẫn Gửi bởi duydhk
    <font color="#000099">@sealand
    </font>
    bạn có thể gửi cho mình xem thử file excel thực hiện đoạn code trên được ko. Thank bạn nhiều
    Alt+F11 rồi copy code ở tên 4rum vào là dùng được, vận động chút đi.

  9. #9
    mtchattieu Guest
    ppc0312Sorry bạn, chính vì mình paste code vào ko chạy đc và báo lỗi nên mình mới muốn xem thử file để xem có gì sai khác không.

  10. #10
    dinh0012 Guest
    Trích dẫn Gửi bởi duydhk
    Mình có 1 file excel "sample.xlsm" và 1 file csv. Mình muốn làm như sau


    1. Copy data từ ô Q2 của file CSV
    2. Paste data vào ô B2 của sheet sample, sau đó xử lý đoạn data này
    Xử lý file như sau :
    a. Xuống dòng sau mỗi dấu ">"
    b. Nếu sau dấu ">" mà chưa bị đóng tag("/>") thì dòng phía dưới phải lùi vào 2 space, giống như khi bạn copy 1 đoạn xml vào notepad ++ bạn sẽ nhìn thấy và hiểu ngay
    Phần xử lý này chính là marco trong "sample.xlsm!Sheet2.Demo1" mà mình đã có
    3. Sau khi xử lý data như yêu cần trên xong, data sẽ đc paste vào ô E2( hoặc paste thẳng vào ô G1 bên sheet "process")
    4. Tại ô G1 mình dùng marco để chạy tiếp mấy lệnh replace để có đc data như mình muốn và so sánh đc với cell A1 để biết đc là data đó có những tag nào
    5. Copy và paste data nhận đc ở trên từ ô C1-> C143 rồi paste vào E8 của sheet "summary"
    6. Lặp lại từ đầu với Q3, Q4, Q5.... cho đến khi ô Qn là blank. Xử lý như các buớc trên và paste vào F8, G8.....


    Mình đã làm marco cho hết các công đoạn từ 1 -> 5 nhưng ko biết nên đặt vòng lặp thế nào để xử lý tiếp cho các ô tiếp theo
    Ô Q2 của bạn có dữ liệu gì đâu mà copy bạn.

Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •