Code nhập liệu từ sheet bị lỗi, cần các bác sửa giúp ạ (2 người xem)

Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

Hiếu Nguyễn AAA

Thành viên mới
Tham gia
31/5/17
Bài viết
5
Được thích
1
Mã:
Sub NhapDuLieuTheoThangBIEU03()
    Dim wsBIEU03 As Worksheet
    Dim wsThang As Worksheet
    Dim thang As String
    Dim row As Range
    Dim timThay As Range
    Dim timKiem As String
    Dim colIndex As Integer
    
    ' Ð?t bi?n cho sheet BIEU03
    Set wsBIEU03 = ThisWorkbook.Sheets("BIEU03")
    
    ' L?y giá tr? tháng t? ô O3
    thang = wsBIEU03.Range("O3").Value
    
    ' Ki?m tra n?u tháng không du?c nh?p
    If thang = "" Then
        MsgBox "Vui lòng nh?p tháng vào ô O3", vbExclamation
        Exit Sub
    End If
    
    ' Ð?t bi?n cho sheet tuong ?ng v?i tháng
    On Error Resume Next
    Set wsThang = ThisWorkbook.Sheets(thang)
    On Error GoTo 0
    
    ' Ki?m tra n?u sheet tháng không t?n t?i
    If wsThang Is Nothing Then
        MsgBox "Không tìm th?y sheet cho tháng " & thang, vbExclamation
        Exit Sub
    End If
    
    ' Xác d?nh c?t c?n tìm ki?m trong sheet tháng
    colIndex = 2 ' C?t th? 2 trong ph?m vi tìm ki?m
    
    ' Vòng l?p qua các ô t? B7 d?n B87 trên sheet BIEU03
    For Each row In wsBIEU03.Range("B7:B87").Cells
        timKiem = row.Value
        
        ' Tìm d? li?u tuong ?ng ? sheet tháng
        Set timThay = Application.WorksheetFunction.VLookup(timKiem, wsThang.Range("C:O"), colIndex, False)
        
        ' N?u tìm th?y d? li?u
        If Not IsError(timThay) Then
            ' Nh?p d? li?u vào sheet BIEU03 theo v? trí tuong ?ng
            wsBIEU03.Cells(row.row, 3).Value = timThay ' C?t C tuong ?ng v?i c?t 3
        End If
    Next row
    
    MsgBox "Hoàn thành nh?p d? li?u", vbInformation
End Sub
em viết 1 đoạn code để nhập số tháng vào sheet Bieu03 thì sẽ tự lấy số liệu ở các sheet tương ứng, nhưng bị lỗi, nhờ các thầy sửa dùm em với ạ. em xin chân thành cảm ơn.

Sub NhapDuLieuTheoThangBIEU03()
Dim wsBIEU03 As Worksheet
Dim wsThang As Worksheet
Dim thang As String
Dim row As Range
Dim timThay As Range
Dim timKiem As String
Dim colIndex As Integer

' Ð?t bi?n cho sheet BIEU03
Set wsBIEU03 = ThisWorkbook.Sheets("BIEU03")

' L?y giá tr? tháng t? ô O3
thang = wsBIEU03.Range("O3").Value

' Ki?m tra n?u tháng không du?c nh?p
If thang = "" Then
MsgBox "Vui lòng nh?p tháng vào ô O3", vbExclamation
Exit Sub
End If

' Ð?t bi?n cho sheet tuong ?ng v?i tháng
On Error Resume Next
Set wsThang = ThisWorkbook.Sheets(thang)
On Error GoTo 0

' Ki?m tra n?u sheet tháng không t?n t?i
If wsThang Is Nothing Then
MsgBox "Không tìm th?y sheet cho tháng " & thang, vbExclamation
Exit Sub
End If

' Xác d?nh c?t c?n tìm ki?m trong sheet tháng
colIndex = 2 ' C?t th? 2 trong ph?m vi tìm ki?m

' Vòng l?p qua các ô t? B7 d?n B87 trên sheet BIEU03
For Each row In wsBIEU03.Range("B7:B87").Cells
timKiem = row.Value

' Tìm d? li?u tuong ?ng ? sheet tháng
Set timThay = Application.WorksheetFunction.VLookup(timKiem, wsThang.Range("C:O"), colIndex, False)

' N?u tìm th?y d? li?u
If Not IsError(timThay) Then
' Nh?p d? li?u vào sheet BIEU03 theo v? trí tuong ?ng
wsBIEU03.Cells(row.row, 3).Value = timThay ' C?t C tuong ?ng v?i c?t 3
End If
Next row

MsgBox "Hoàn thành nh?p d? li?u", vbInformation
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn đưa code vào thẻ code cho nó gọn và dễ nhìn.
Còn lỗi thì cũng nên nói lỗi để biết mà giúp chứ. Quang lên thế kia là làm khó người hỗ trợ rồi
 
Upvote 0
Lỗi chắc ở đâu đó trong câu lệnh này nè:
Mã:
For Each row In wsBIEU03.Range("B7:B87").Cells
Các bác giúp với, 1 khi chủ bài đăng nêu mã lỗi!

:D :D :D
 
Upvote 0
Lỗi chắc ở đâu đó trong câu lệnh này nè:
Mã:
For Each row In wsBIEU03.Range("B7:B87").Cells
Các bác giúp với, 1 khi chủ bài đăng nêu mã lỗi!

:D :D :D
Cháu thì thấy đang lỗi chỗ này sao mà
Mã:
Set timThay = Application.WorksheetFunction.VLookup(timKiem, wsThang.Range("C:O"), colIndex, False)
Cái này tưởng trả về kết quả chứ nhỉ nhưng lại set
 
Upvote 0
Bạn đưa code vào thẻ code cho nó gọn và dễ nhìn.
Còn lỗi thì cũng nên nói lỗi để biết mà giúp chứ. Quang lên thế kia là làm khó người hỗ trợ rồi
...
Mã:
Set timThay = Application.WorksheetFunction.VLookup(timKiem, wsThang.Range("C:O"), colIndex, False)
Cái này tưởng trả về kết quả chứ nhỉ nhưng lại set
Bạn phải bảo thớt diễn tả thật rõ rệt "lỗi" ở đây là thớt muốn nói cái gì.
Theo như code thì có tới 2 giai đoạn để lỗi:
1. Bị ngay tại chỗ:
Do hàm Vlookup chỉ trả về giá trị (scalar) chứ không thể dịch Object (non-scalar). Mà lệnh Set thì chỉ gán địa chỉ object. Cho nên lỗi.
2. Hàm của WorksheetFunction không tự bẫy lỗi. Nếu Vlooup không tìm được thì nó sẽ trả về lỗi. Nếu code có câu On Error Resume Next để không dừng thì lại càng lỗi như tổ đỉa.
 
Upvote 0
Dạ lỗi là Code thì chạy, nhưng data bên sheet Bieu03 thì không nhập ạ :D
Bài đã được tự động gộp:

Mã:
Sub NhapDuLieuTheoThangBIEU03()
    Dim wsBIEU03 As Worksheet
    Dim wsThang As Worksheet
    Dim thang As String
    Dim row As Range
    Dim timThay As Range
    Dim timKiem As String
    Dim colIndex As Integer
   
    ' Ð?t bi?n cho sheet BIEU03
    Set wsBIEU03 = ThisWorkbook.Sheets("BIEU03")
   
    ' L?y giá tr? tháng t? ô O3
    thang = wsBIEU03.Range("O3").Value
   
    ' Ki?m tra n?u tháng không du?c nh?p
    If thang = "" Then
        MsgBox "Vui lòng nh?p tháng vào ô O3", vbExclamation
        Exit Sub
    End If
   
    ' Ð?t bi?n cho sheet tuong ?ng v?i tháng
    On Error Resume Next
    Set wsThang = ThisWorkbook.Sheets(thang)
    On Error GoTo 0
   
    ' Ki?m tra n?u sheet tháng không t?n t?i
    If wsThang Is Nothing Then
        MsgBox "Không tìm th?y sheet cho tháng " & thang, vbExclamation
        Exit Sub
    End If
   
    ' Xác d?nh c?t c?n tìm ki?m trong sheet tháng
    colIndex = 2 ' C?t th? 2 trong ph?m vi tìm ki?m
   
    ' Vòng l?p qua các ô t? B7 d?n B87 trên sheet BIEU03
    For Each row In wsBIEU03.Range("B7:B87").Cells
        timKiem = row.Value
       
        ' Tìm d? li?u tuong ?ng ? sheet tháng
        Set timThay = Application.WorksheetFunction.VLookup(timKiem, wsThang.Range("C:O"), colIndex, False)
       
        ' N?u tìm th?y d? li?u
        If Not IsError(timThay) Then
            ' Nh?p d? li?u vào sheet BIEU03 theo v? trí tuong ?ng
            wsBIEU03.Cells(row.row, 3).Value = timThay ' C?t C tuong ?ng v?i c?t 3
        End If
    Next row
   
    MsgBox "Hoàn thành nh?p d? li?u", vbInformation
End Sub
em viết 1 đoạn code để nhập số tháng vào sheet Bieu03 thì sẽ tự lấy số liệu ở các sheet tương ứng, nhưng bị lỗi, nhờ các thầy sửa dùm em với ạ. em xin chân thành cảm ơn.

Sub NhapDuLieuTheoThangBIEU03()
Dim wsBIEU03 As Worksheet
Dim wsThang As Worksheet
Dim thang As String
Dim row As Range
Dim timThay As Range
Dim timKiem As String
Dim colIndex As Integer

' Ð?t bi?n cho sheet BIEU03
Set wsBIEU03 = ThisWorkbook.Sheets("BIEU03")

' L?y giá tr? tháng t? ô O3
thang = wsBIEU03.Range("O3").Value

' Ki?m tra n?u tháng không du?c nh?p
If thang = "" Then
MsgBox "Vui lòng nh?p tháng vào ô O3", vbExclamation
Exit Sub
End If

' Ð?t bi?n cho sheet tuong ?ng v?i tháng
On Error Resume Next
Set wsThang = ThisWorkbook.Sheets(thang)
On Error GoTo 0

' Ki?m tra n?u sheet tháng không t?n t?i
If wsThang Is Nothing Then
MsgBox "Không tìm th?y sheet cho tháng " & thang, vbExclamation
Exit Sub
End If

' Xác d?nh c?t c?n tìm ki?m trong sheet tháng
colIndex = 2 ' C?t th? 2 trong ph?m vi tìm ki?m

' Vòng l?p qua các ô t? B7 d?n B87 trên sheet BIEU03
For Each row In wsBIEU03.Range("B7:B87").Cells
timKiem = row.Value

' Tìm d? li?u tuong ?ng ? sheet tháng
Set timThay = Application.WorksheetFunction.VLookup(timKiem, wsThang.Range("C:O"), colIndex, False)

' N?u tìm th?y d? li?u
If Not IsError(timThay) Then
' Nh?p d? li?u vào sheet BIEU03 theo v? trí tuong ?ng
wsBIEU03.Cells(row.row, 3).Value = timThay ' C?t C tuong ?ng v?i c?t 3
End If
Next row

MsgBox "Hoàn thành nh?p d? li?u", vbInformation
End Sub
Lỗi ở đây là code thì chạy, nhưng data thì không nhảy qua sheet bieu03 ạ
 
Upvote 0
Mã:
Sub NhapDuLieuTheoThangBIEU03()
    Dim wsBIEU03 As Worksheet
    Dim wsThang As Worksheet
    Dim thang As String
    Dim row As Range
    Dim col As Range
    Dim timThay As Range
    Dim timKiem As String
    Dim searchRange As Range

    ' Đặt biến cho sheet BIEU03
    Set wsBIEU03 = ThisWorkbook.Sheets("BIEU03")

    ' Lấy giá trị tháng từ ô O3
    thang = wsBIEU03.Range("O3").Value

    ' Kiểm tra nếu tháng không được nhập
    If thang = "" Then
        MsgBox "Vui lòng nhập tháng vào ô O3", vbExclamation
        Exit Sub
    End If

    ' Đặt biến cho sheet tương ứng với tháng
    On Error Resume Next
    Set wsThang = ThisWorkbook.Sheets(thang)
    On Error GoTo 0

    ' Kiểm tra nếu sheet tháng không tồn tại
    If wsThang Is Nothing Then
        MsgBox "Không tìm thấy sheet cho tháng " & thang, vbExclamation
        Exit Sub
    End If

    ' Vùng tìm kiếm từ C5 đến O88 trong sheet tháng
    Set searchRange = wsThang.Range("C5:O88")

    ' Vòng lặp qua các ô từ B7 đến B87 trên sheet BIEU03
    For Each row In wsBIEU03.Range("B7:B87").Cells
        ' Lặp qua các ô từ C5 đến K5
        For Each col In wsBIEU03.Range("C5:K5").Cells
            timKiem = row.Value & col.Value

            ' Tìm dữ liệu tương ứng trong sheet tháng
            Set timThay = searchRange.Find(What:=timKiem, LookIn:=xlValues, LookAt:=xlWhole)

            ' Nếu tìm thấy dữ liệu
            If Not timThay Is Nothing Then
                ' Nhập dữ liệu vào sheet BIEU03 theo vị trí tương ứng
                wsBIEU03.Cells(row.Row, col.Column).Value = timThay.Value
            End If
        Next col
    Next row

    MsgBox "Hoàn thành nhập dữ liệu", vbInformation
End Sub
Em có sửa lại như vậy. không hiểu code sai chỗ nào mà biểu 03 vẫn chưa hiện dữ liệu, nhờ các thầy sửa giúp em ạ
 
Upvote 0
Mã:
Sub NhapDuLieuTheoThangBIEU03()
    Dim wsBIEU03 As Worksheet
    Dim wsThang As Worksheet
    Dim thang As String
    Dim row As Range
    Dim col As Range
    Dim timThay As Range
    Dim timKiem As String
    Dim searchRange As Range

    ' Đặt biến cho sheet BIEU03
    Set wsBIEU03 = ThisWorkbook.Sheets("BIEU03")

    ' Lấy giá trị tháng từ ô O3
    thang = wsBIEU03.Range("O3").Value

    ' Kiểm tra nếu tháng không được nhập
    If thang = "" Then
        MsgBox "Vui lòng nhập tháng vào ô O3", vbExclamation
        Exit Sub
    End If

    ' Đặt biến cho sheet tương ứng với tháng
    On Error Resume Next
    Set wsThang = ThisWorkbook.Sheets(thang)
    On Error GoTo 0

    ' Kiểm tra nếu sheet tháng không tồn tại
    If wsThang Is Nothing Then
        MsgBox "Không tìm thấy sheet cho tháng " & thang, vbExclamation
        Exit Sub
    End If

    ' Vùng tìm kiếm từ C5 đến O88 trong sheet tháng
    Set searchRange = wsThang.Range("C5:O88")

    ' Vòng lặp qua các ô từ B7 đến B87 trên sheet BIEU03
    For Each row In wsBIEU03.Range("B7:B87").Cells
        ' Lặp qua các ô từ C5 đến K5
        For Each col In wsBIEU03.Range("C5:K5").Cells
            timKiem = row.Value & col.Value

            ' Tìm dữ liệu tương ứng trong sheet tháng
            Set timThay = searchRange.Find(What:=timKiem, LookIn:=xlValues, LookAt:=xlWhole)

            ' Nếu tìm thấy dữ liệu
            If Not timThay Is Nothing Then
                ' Nhập dữ liệu vào sheet BIEU03 theo vị trí tương ứng
                wsBIEU03.Cells(row.Row, col.Column).Value = timThay.Value
            End If
        Next col
    Next row

    MsgBox "Hoàn thành nhập dữ liệu", vbInformation
End Sub
Em có sửa lại như vậy. không hiểu code sai chỗ nào mà biểu 03 vẫn chưa hiện dữ liệu, nhờ các thầy sửa giúp em ạ
Vấn đề là các biểu tháng không đồng nhất với nhau và không đồng nhất với sheet Bieu03. Do vậy để code tìm đúng dòng và cột của sheet Bieu03 đối chiếu với sheet tháng; Giải quyết vấn đề này bằng cách đưa giá trị các dòng vào 1 dic, giá trị các cột (tiêu đề) vào 1 dic; Khi chạy code duyệt từng cột (đối chiếu với Dict cột để lấy giá trị cột tương ứng của biểu 03 = C) và từng dòng (đối chiếu với Dict cột để lấy giá trị cộtdòng tương ứng của biểu 03 +R) và tiến hành Bieu03.cells(R,C)=Wsthang.cells(i,j).
xem file và Tham khảo code.
 

File đính kèm

Upvote 0
Vấn đề là các biểu tháng không đồng nhất với nhau và không đồng nhất với sheet Bieu03. Do vậy để code tìm đúng dòng và cột của sheet Bieu03 đối chiếu với sheet tháng; Giải quyết vấn đề này bằng cách
Goạt chân theo giầy! . . . . . . . . . . ? ? ? . . . .

:D :D :D :D :D
 
Upvote 0
Web KT

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

Back
Top Bottom