Chuyên mục xử lý, gỡ rối code VBA (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,958
Xin chỉnh giúp đoạn code bên dưới vì khi đưa câu Option Explicit thì nó bị lỗi.
Cảm ơn các anh chị nhiều.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
For Each Cll In Intersect(Target.EntireRow, [B:B])
If Cll.Row > 7 Then
If Cll.Value = "" Then
Range("A8:A1000").ClearContents
Else
If Range("A" & Cll.Row).Formula = "" Then Range("A" & Cll.Row).FormulaR1C1 = "=IF(RC[1]<>"""",MAX(R7C1:R[-1]C)+1,"""")"
If Range("L" & Cll.Row).Formula = "" Then Range("L" & Cll.Row).FormulaR1C1 = "=IF(RC[-10]="""","""",IF(RC[-5]=""x"",""x"",""/""))"
If Range("M" & Cll.Row).Formula = "" Then Range("M" & Cll.Row).FormulaR1C1 = "=IF(RC[-11]="""","""",IF(RC[-2]=R1C11,""Cdi"",IF(RC[-2]=R2C11,""Cde"",""/"")))"
If Range("N" & Cll.Row).Formula = "" Then Range("N" & Cll.Row).FormulaR1C1 = "=RIGHT(RC[-6],2)"
End If
End If
Next
Application.EnableEvents = True
End Sub
 
Upvote 0
Chào cả nhà. Mình mới học VBA nên gà mờ quá. Đang code đến chỗ này thì nó báo lỗi Application-Defined or Object-defined error 1004 chỗ Do While mà mình k hiểu mình sai ở đâu. Mong các cao nhân chỉ giáo
Mã:
Sub Button1_Click()

Dim id1, id2, id3, id4, id5, id6 As Variant

Dim i, n As Integer

Worksheets("ACC").Activate

id1 = Sheets("ACC").Range("E5").Value
id2 = Sheets("ACC").Range("G5").Value
id3 = Sheets("ACC").Range("I5").Value
id4 = Sheets("ACC").Range("K5").Value
id5 = Sheets("ACC").Range("M5").Value
id6 = Sheets("ACC").Range("O5").Value

Worksheets("TOEICScore").Activate



Do While id1 = Sheets("TOEICScore").Range("A", i).Value Or Sheets("TOEICScore").Range("A", i).Value = Null
      If id1 = Sheets("TOEICScore").Range("A", i).Value Then
         Sheets("ACC").Range("F5").Value = Sheets("TOEICScore").Range("B", i).Value
         Sheets("ACC").Range("E21").Value = Sheets("TOEICScore").Range("F", i).Value
         Sheets("ACC").Range("F21").Value = Sheets("TOEICScore").Range("E", i).Value
      End If
      i = i + 1

Loop

End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chỉnh giúp đoạn code bên dưới vì khi đưa câu Option Explicit thì nó bị lỗi.
Cảm ơn các anh chị nhiều.
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cll As Range
For Each Cll In Intersect(Target.EntireRow, [B:B])
  If Cll.Row > 7 Then
    If Cll.Value = "" Then
      Range("A8:A1000").ClearContents
    Else
      If Range("A" & Cll.Row).Formula = "" Then Range("A" & Cll.Row).FormulaR1C1 = "=IF(RC[1]<>"""",MAX(R7C1:R[-1]C)+1,"""")"
      If Range("L" & Cll.Row).Formula = "" Then Range("L" & Cll.Row).FormulaR1C1 = "=IF(RC[-10]="""","""",IF(RC[-5]=""x"",""x"",""/""))"
      If Range("M" & Cll.Row).Formula = "" Then Range("M" & Cll.Row).FormulaR1C1 = "=IF(RC[-11]="""","""",IF(RC[-2]=R1C11,""Cdi"",IF(RC[-2]=R2C11,""Cde"",""/"")))"
      If Range("N" & Cll.Row).Formula = "" Then Range("N" & Cll.Row).FormulaR1C1 = "=RIGHT(RC[-6],2)"
    End If
  End If
Next
End Sub
 
Upvote 0
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cll As Range
For Each Cll In Intersect(Target.EntireRow, [B:B])
  If Cll.Row > 7 Then
    If Cll.Value = "" Then
      Range("A8:A1000").ClearContents
    Else
      If Range("A" & Cll.Row).Formula = "" Then Range("A" & Cll.Row).FormulaR1C1 = "=IF(RC[1]<>"""",MAX(R7C1:R[-1]C)+1,"""")"
      If Range("L" & Cll.Row).Formula = "" Then Range("L" & Cll.Row).FormulaR1C1 = "=IF(RC[-10]="""","""",IF(RC[-5]=""x"",""x"",""/""))"
      If Range("M" & Cll.Row).Formula = "" Then Range("M" & Cll.Row).FormulaR1C1 = "=IF(RC[-11]="""","""",IF(RC[-2]=R1C11,""Cdi"",IF(RC[-2]=R2C11,""Cde"",""/"")))"
      If Range("N" & Cll.Row).Formula = "" Then Range("N" & Cll.Row).FormulaR1C1 = "=RIGHT(RC[-6],2)"
    End If
  End If
Next
End Sub
Cảm ơn HieuCD đã nhiệt tình giúp đỡ.
Chúc Bạn cùng gia đình nhiều niềm vui ngày cuối tuần
 

File đính kèm

Upvote 0
Híc. Ko ai giúp mình à. @@
 
Upvote 0
Mã:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cll As Range
For Each Cll In Intersect(Target.EntireRow, [B:B])
  If Cll.Row > 7 Then
    If Cll.Value = "" Then
      Range("A8:A1000").ClearContents
    Else
      If Range("A" & Cll.Row).Formula = "" Then Range("A" & Cll.Row).FormulaR1C1 = "=IF(RC[1]<>"""",MAX(R7C1:R[-1]C)+1,"""")"
      If Range("L" & Cll.Row).Formula = "" Then Range("L" & Cll.Row).FormulaR1C1 = "=IF(RC[-10]="""","""",IF(RC[-5]=""x"",""x"",""/""))"
      If Range("M" & Cll.Row).Formula = "" Then Range("M" & Cll.Row).FormulaR1C1 = "=IF(RC[-11]="""","""",IF(RC[-2]=R1C11,""Cdi"",IF(RC[-2]=R2C11,""Cde"",""/"")))"
      If Range("N" & Cll.Row).Formula = "" Then Range("N" & Cll.Row).FormulaR1C1 = "=RIGHT(RC[-6],2)"
    End If
  End If
Next
End Sub
Với đoạn code trên khi thực hiện với dữ liệu khoảng 3000 dòng. code chạy rất lâu.
Xin nhờ các anh chị có thể chỉnh giúp code trên để chạy được nhanh hơn.
Cảm ơn các anh chị nhiều.
 

File đính kèm

Upvote 0
Với đoạn code trên khi thực hiện với dữ liệu khoảng 3000 dòng. code chạy rất lâu.
Xin nhờ các anh chị có thể chỉnh giúp code trên để chạy được nhanh hơn.
Cảm ơn các anh chị nhiều.
Đã dùng VBA mà nạp công thức cho từng dòng là "kỳ cục". Công thức càng IF() nhiều lại càng nặng.
Ráng chịu đi, hoặc xử lý tất cả bằng VBA 1 lần.
 
Upvote 0
Đã dùng VBA mà nạp công thức cho từng dòng là "kỳ cục". Công thức càng IF() nhiều lại càng nặng.
Ráng chịu đi, hoặc xử lý tất cả bằng VBA 1 lần.
Cảm ơn Thầy.
Nhờ Thầy có thể viết giúp đoạn code với ạ. ( Code sẽ xử lý trên các cột tô màu vàng )
Xin cảm ơn Thầy nhiều.
 

File đính kèm

Upvote 0
Cảm ơn Thầy.
Nhờ Thầy có thể viết giúp đoạn code với ạ. ( Code sẽ xử lý trên các cột tô màu vàng )
Xin cảm ơn Thầy nhiều.
Cột B không biết! Cột V (Nam) là thừa (Tốn công thức) trong khi cột U ghi "x" là Nữ, để trống đã biết là Nam.
Tôi có chèn thêm 1 dòng 2, dữ liệu từ dòng 3.
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, R As Long, Txt As String
Txt = "'11-14"
sArr = Range("M3", Range("M3").End(xlDown)).Resize(, 35).Value
R = UBound(sArr): ReDim dArr(1 To R, 1 To 3)
For I = 1 To R
    If sArr(I, 24) <> Empty Then
        If sArr(I, 24) = "HTCHTH" Then
            dArr(I, 1) = "HT" & sArr(I, 25)
        ElseIf sArr(I, 27) <> Empty Or sArr(I, 28) <> Empty Then
            dArr(I, 1) = "CDi-BHo"
        Else
            dArr(I, 1) = Left(sArr(I, 24), 1)
        End If
    End If
    dArr(I, 2) = Txt             '<--------------Cột B?'
    dArr(I, 3) = IIf(sArr(I, 31) <> Empty, sArr(I, 31), "/")
Next I
Range("A3").Resize(R, 3) = dArr
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cột B không biết!
PHP:
Public Sub GPE()
Dim sArr(), dArr(), I As Long, R As Long, Txt As String
Txt = "'11-14"
sArr = Range("M3", Range("M3").End(xlDown)).Resize(, 35).Value
R = UBound(sArr): ReDim dArr(1 To R, 1 To 3)
For I = 1 To R
    If sArr(I, 24) <> Empty Then
        If sArr(I, 24) = "HTCHTH" Then
            dArr(I, 1) = "HT" & sArr(I, 25)
        ElseIf sArr(I, 27) <> Empty Or sArr(I, 28) <> Empty Then
            dArr(I, 1) = "CDi-BHo"
        Else
            dArr(I, 1) = Left(sArr(I, 24), 1)
        End If
    End If
    dArr(I, 2) = Txt             '<--------------Cột B?'
    dArr(I, 3) = IIf(sArr(I, 31) <> Empty, sArr(I, 31), "/")
Next I
Range("A3").Resize(R, 3) = dArr
End Sub
Do vội quá nên nhầm mong thầy thông cảm.
Cột B dùng để tính độ tuổi 11-14 tuổi còn đang học.
Cách tính: lấy năm hiện tại - năm (cột S ). Nếu kết quả bằng hoặc lớn hơn 11 cùng với điều kiện ký tự đầu tiên bên trái cột AJ nhỏ hơn hoặc bằng 5 sẽ ghi ở cột B là 11-14
Cảm ơn thầy nhiều ạ.
 
Lần chỉnh sửa cuối:
Upvote 0
Thử xem file này coi có đúng ý bạn không.
Dạ đúng rồi ạ, e cảm ơn bác nhiều, nhưng e xin phép được nhờ thêm tí nữa ạ!
Hiện giờ dữ liệu ở M6 chỉ có thể được nhập khi có đủ điều kiện ở K6 là "CHUYỂN ĐƠN"
E muốn nó copy và lặp lại ở tất cả các dòng khi Em sử dụng nút thêm dòng để chèn thêm dòng trong bản tính, để tất cả các dòng chèn thêm đều đáp ứng được yêu cầu cầu tương ứng cho cột M khi có dữ liệu "CHUYỂN ĐƠN" ở cột K được ko ạ?
 

File đính kèm

Upvote 0
Cho em hỏi, hiện tại em có 2 sheet, sheet1 là BQ_Mau và sheet2 là BQ_KMau em lấy được dữ liệu vào một sheet thứ 3 rồi, nhưng trong 2 sheet cần lấy dữ liệu có dữ liệu trùng nhau. Em có viết một đoạn code để lọc dữ liệu mà khi chạy thì tất cả tên ở sheet2 đều giống nhau nhưng vẫn chưa lọc được. Mọi người xem và gợi ý giúp em cách sửa code với ạ. Em cảm ơn.
Đây là đoạn code lấy dữ liệu ở sheet2.
PHP:
Dim shBQMau As Worksheet
    Dim shBQKMau As Worksheet
    Dim j As Long
    Dim i As Long
    Dim LastRowBQMau As Long
    Dim LastRowBQKMau As Long
  
    wsKCSKo.Select
    Cells(csHangTieuDe, csCotMaVatTu).End(xlDown).Select
    intSoLuongHang = ActiveCell.Row - csHangTieuDe
    
    Set shBQMau = ActiveWorkbook.Worksheets("BQ_Mau")
    Set shBQKMau = ActiveWorkbook.Worksheets("BQ_KMau")
    LastRowBQMau = shBQMau.Cells(Rows.count, "B").End(xlUp).Row
    LastRowBQKMau = shBQKMau.Cells(Rows.count, "B").End(xlUp).Row
    

    For H = 0 To intSoLuongHang - 1

            Set rgDuLieu = Cells(csHangTieuDe + 1 + H, csCotTonCuoiKCS)

            If (rgDuLieu.Value <> 0) Then
            
                intCount = intCount + 1
            
                rgTieuDe_NgayChot.Offset(intCount, 0).Value = NgayChot

                MaVatTu = Cells(rgDuLieu.Row(), csCotMaVatTu)
                MaKho = csMaKhoPXKCS
                For i = 7 To LastRowBQKMau
                For j = 7 To LastRowBQMau
                If shBQMau.Range("B" & j).Value = shBQKMau.Range("B" & i).Value Then
                MaVatTu = shBQKMau.Range("B" & j).Value
                Else
                MaVatTu = shBQKMau.Range("B" & i).Value
                End If
                Next j
                Next i

                ' Chuyen doi ma Phoi sang ma chi tiet thuong
                Call DieuChinhMa(MaVatTu, "", "", MaVatTuDC, "", MaKhoDC)
                rgTieuDe_MaVatTu.Offset(intCount, 0).Value = MaVatTuDC
                rgTieuDe_MaKho.Offset(intCount, 0).Value = MaKho

                MaBeMat = "_"
                rgTieuDe_MaBeMat.Offset(intCount, 0).Value = MaBeMat

                SoLuong = rgDuLieu.Value
                If SoLuong < 0 Then
                    MsgBox ("Bang KCS, kiem tra lai ma " & MaVatTu & "-" & MaBeMat & " tai kho " & MaKho & " bi am " & SoLuong)
                End If
                rgTieuDe_SoLuong.Offset(intCount, 0).Value = SoLuong

            End If
          
NextH8:
    Next H
 
Lần chỉnh sửa cuối:
Upvote 0
NHờ các anh chị sửa giúp đoạn code trong file.
Khi nhập 1 vào ô K1 sheet AB thì code chạy nhưng nhập 2 code báo lỗi.
Xin cảm ơn
 

File đính kèm

Upvote 0
Lỗi tùm lum, không biết muốn sao.
Cảm ơn Thầy đã giúp đỡ.
NHờ Thầy giúp cho tí nữa ạ:
- Khi nhập 1 ở ô K1 sẽ lọc ra 10 dòng dữ liệu ( theo điều kiện tại vùng L1:Q3) từ sheet Data gán vào sheet AB như hiện tại
- Khi nhập 2 ở ô K1 sẽ lọc ra 10 dòng dữ liệu tiếp theo ( theo điều kiện tại vùng L1:Q3) từ sheet Data gán vào sheet AB và cột STT sẽ tính bắt đầu từ 11 đến 20
( trong file khi sửa dữ liệu cột lớp sheet Data thì sheet AB lọc không đủ 10 dòng dữ liệu )
 

File đính kèm

Upvote 0
Nhờ các anh chị xem giúp edit code để tìm được trong các sub-folder nhé. File này của anh QuangHai mình tìm được nhưng mình không search được trong các sub-folder. Cảm ơn anh chị
 

File đính kèm

Upvote 0
Nhờ các anh chị xem giúp edit code để tìm được trong các sub-folder nhé. File này của anh QuangHai mình tìm được nhưng mình không search được trong các sub-folder. Cảm ơn anh chị
Có sẵn rồi mà sửa gì nữa.
Sửa
PHP:
   Sarr = GetAllFile(path, 0)
thành
PHP:
   Sarr = GetAllFile(path, True)
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT

Bài viết mới nhất

Back
Top Bottom