Nhờ mọi người giúp em bài VBA Excel này!

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

hungvo0102

Thành viên mới
Tham gia
3/11/24
Bài viết
2
Được thích
0
Problem of statement

A set of data has 3 columns of:
- Column A contains the Batch ID
- Column B contains the production date
- Column C contains the ship date

The Batch ID has a two-digit code to the left of the hyphen and a 3- or 4-digit code to the right of the hyphen. The first letter of the Batch ID is known as the Identifier and the leading number of the 3- or 4-digit code to the right of the hyphen is known as the Key. For example, in the Batch ID "N9-363B", the Identifier is "N" and the Key is 3.

Batch ID Prod. Date Ship date

T3-238L 12.10.2017 19.10.2017

N8-462Z 10.12.2017 12.12.2017

A9-488N 22.01.2018 29.01.2018

H3-107R 27.01.2018 05.02.2018

E6-104Q 13.02.2018 21.02.2018

C1-465A 01.03.2018 06.03.2018

Identifier: E

Key: 2

Your goal is to create a subroutine that allows the user to select the Identifier from a drop-down menu in cell F2 and the Key from a drop-down menu in cell F3 (these drop-down/data validation menus are already available in the starter file) and any rows of the data (columns A, B, and C) whose Batch ID meets those criteria will be highlighted GREEN.

- Đây là những sub đã có sẵn

Sub Example()
' This is just to show how the Identifier and Key functions below can be utilized in VBA code
Dim ID As String
ID = "Y4-824X"
MsgBox "The identifier is " & Identifier(ID) & " and the key is " & Key(ID)
End Sub

Function Identifier(ID As String) As String
Identifier = Left(ID, 1)
End Function

Function Key(ID As String) As Integer
Key = Left(Mid(ID, 4, 4), 1)
End Function

Sub Reset()
' Obtained through a macro recording:
With Cells.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub

- Phần bài làm của em:
Sub HighlightRows()
Dim nr As Integer, i As Integer, filterID As String, filterKey As Integer
Call Reset
nr = WorksheetFunction.CountA(Columns("A:A")) - 1
filterID = WorksheetFunction.Identifier(Range("A2:A" & nr + 1))
filterKey = WorksheetFunction.Key(Range("A2:A" & nr + 1))
For i = 1 To nr
If filterKey = Range("key") And filterID = Range("identifier") Then
Range("A" & i + 1).Color.Index = 4
Range("B" & i + 1).Color.Index = 4
Range("C" & i + 1).Color.Index = 4
End If
Next i
End Sub

Nhưng mà ghi chạy bài làm cứ hiện lỗi Error Run time 438. Mong các giáo sư giúp đỡ ạ.
 

File đính kèm

  • Assignment 4 - STARTER.xlsm
    24.4 KB · Đọc: 2
Xin lỗi, nhưng mình xin hỏi khí không phải: Bạn đang học tiếng Việt ư?

$$$$@
 
Upvote 0
Bạn cần sắp xếp lại việc trình bày câu hỏi của mình. Trình bày bao gồm hình chụp và lỗi, tại dòng nào, sub nào.
Mình đã xem và giải giúp, nhưng bạn cần lưu ý những lần sau.
Cần tập trung vào hiểu các khai báo, định nghĩa.
Mã:
' NOTE: For highlighting, use .ColorIndex = 4
' For example, Range("A1").Interior.ColorIndex = 4 would color cell A1 green

Sub HighlightRows()
    Dim nr As Integer, i As Integer, filterID As String, filterKey As Integer
    Dim idxID As String
    Dim wb As Workbook
    Dim ws As Worksheet
    Set wb = ActiveWorkbook
    Set ws = Sheets("Data")
    
    Call Reset
    'nr = WorksheetFunction.CountA(Columns("A:A")) - 1
    nr = ws.Range("B" & Rows.Count).End(xlUp).Row
    
    'filterID = WorksheetFunction.Identifier(Range("A2:A" & nr + 1))
    filterID = ws.Range("F2").Value
    
    'filterKey = WorksheetFunction.Key(Range("A2:A" & nr + 1))
    filterKey = ws.Range("F3").Value
  
    For i = 2 To nr
        'i = 2 from A2
        idxID = ws.Range("A" & i).Value
        If Identifier(idxID) = filterID And Key(idxID) = filterKey Then
        ' For example, Range("A1").Interior.ColorIndex = 4 would color cell A1 green
            ws.Range("A" & i).Interior.ColorIndex = 4
            ws.Range("B" & i).Interior.ColorIndex = 4
            ws.Range("C" & i).Interior.ColorIndex = 4
        End If
    Next i
End Sub
 

File đính kèm

  • Assignment 4 - STARTER - GPE.xlsm
    24.6 KB · Đọc: 4
Upvote 0
Xin lỗi, nhưng mình xin hỏi khí không phải: Bạn đang học tiếng Việt ư?

$$$$@
Dạ do lần đầu đăng bài nên em có hơi sai sót. Em xin lỗi mn nhiều ạ! Em sẽ rút kinh nghiệm cho lần sau.
Bài đã được tự động gộp:

Bạn cần sắp xếp lại việc trình bày câu hỏi của mình. Trình bày bao gồm hình chụp và lỗi, tại dòng nào, sub nào.
Mình đã xem và giải giúp, nhưng bạn cần lưu ý những lần sau.
Cần tập trung vào hiểu các khai báo, định nghĩa.
Mã:
' NOTE: For highlighting, use .ColorIndex = 4
' For example, Range("A1").Interior.ColorIndex = 4 would color cell A1 green

Sub HighlightRows()
    Dim nr As Integer, i As Integer, filterID As String, filterKey As Integer
    Dim idxID As String
    Dim wb As Workbook
    Dim ws As Worksheet
    Set wb = ActiveWorkbook
    Set ws = Sheets("Data")
  
    Call Reset
    'nr = WorksheetFunction.CountA(Columns("A:A")) - 1
    nr = ws.Range("B" & Rows.Count).End(xlUp).Row
  
    'filterID = WorksheetFunction.Identifier(Range("A2:A" & nr + 1))
    filterID = ws.Range("F2").Value
  
    'filterKey = WorksheetFunction.Key(Range("A2:A" & nr + 1))
    filterKey = ws.Range("F3").Value
 
    For i = 2 To nr
        'i = 2 from A2
        idxID = ws.Range("A" & i).Value
        If Identifier(idxID) = filterID And Key(idxID) = filterKey Then
        ' For example, Range("A1").Interior.ColorIndex = 4 would color cell A1 green
            ws.Range("A" & i).Interior.ColorIndex = 4
            ws.Range("B" & i).Interior.ColorIndex = 4
            ws.Range("C" & i).Interior.ColorIndex = 4
        End If
    Next i
End Sub
Dạ em xin cảm ơn anh ạ. Do em mới đăng bài lần đầu nên cũng không biết phải trình bày ra sao nên bài trình bày chưa hợp lý ạ. Em xin rút kinh nghiệm cho lần sau.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom