Lỗi bắt nhập macro name khi chạy code vba

  • Thread starter Thread starter AnhDy
  • Ngày gửi Ngày gửi
Liên hệ QC

AnhDy

Thành viên mới
Tham gia
15/2/16
Bài viết
12
Được thích
0
Các bạn cho mình hỏi, mình muốn chạy code vba để tự động thêm số thứ tự ở cột A khi thêm hoạc xóa dòng nhưng khi mình chạy code VBA thì nó cứ yêu cầu mình phải nhập lại Macro name mà không chạy code được, các bạn giúp mình nhé, thank các bạn nhiều!
 

File đính kèm

Code của bạn là sự kiện mà, muốn nó chạy thì bạn phải thao tác trên cột A, mà code sai béc hết.
 
Bạn thử code này xem sao
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)    Dim i As Long
    If Intersect(Target, Range("C:C")) Is Nothing Then Exit Sub
    For i = 8 To Range("C" & Rows.Count).End(xlUp).Row
        If Range("C" & i) = "" Then Range("A" & i) = ""
        Else
        Range("A" & i) = Application.WorksheetFunction.CountA(Range("C8:C" & i))
        End If
    Next i
End Sub
 
Bạn thử code này xem sao
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)    Dim i As Long
    If Intersect(Target, Range("C:C")) Is Nothing Then Exit Sub
    For i = 8 To Range("C" & Rows.Count).End(xlUp).Row
        If Range("C" & i) = "" Then Range("A" & i) = ""
        Else
        Range("A" & i) = Application.WorksheetFunction.CountA(Range("C8:C" & i))
        End If
    Next i
End Sub
Code này không chạy được hhoang_56 ơi.
 
Dùng code này. Thao tác thay đổi giá trị tại cột C thì code làm việc... Chắc bạn muốn vậy đúng không?

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sArr, dArr, I As Long, TT
sArr = Range("C7", Range("C65000").End(3)).Value
ReDim dArr(1 To UBound(sArr), 1 To 1)
If Not Intersect(Range("C7", Range("C65000").End(3)), Target) Is Nothing Then
For I = 1 To UBound(sArr)
    If sArr(I, 1) <> Empty Then
        TT = TT + 1
        dArr(I, 1) = TT
    End If
Next I
    Range("A7").Resize(1000).ClearContents
    Range("A7").Resize(I - 1).Value = dArr
End If
End Sub
Cũng hok chạy được bác ơi! :(
 
Bạn thử đặt con trỏ chuột vào C7 và Enter 1 phát xem nó ra cái gì nhé.
 
Code này không chạy được hhoang_56 ơi.
Xin lỗi mọi người, do bị lỗi copy - paste khi post bài nên code bị sai lệch
nay sửa lại
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Long
    If Intersect(Target, Range("C:C")) Is Nothing Then Exit Sub
    For i = 8 To Range("C" & Rows.Count).End(xlUp).Row
        If Range("C" & i) = "" Then
        Range("A" & i) = ""
        Else
        Range("A" & i) = Application.WorksheetFunction.CountA(Range("C8:C" & i))
        End If
    Next i
End Sub
 
Dùng code này. Thao tác thay đổi giá trị tại cột C thì code làm việc... Chắc bạn muốn vậy đúng không?

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sArr, dArr, I As Long, TT
sArr = Range("C7", Range("C65000").End(3)).Value
ReDim dArr(1 To UBound(sArr), 1 To 1)
If Not Intersect(Range("C7", Range("C65000").End(3)), Target) Is Nothing Then
For I = 1 To UBound(sArr)
    If sArr(I, 1) <> Empty Then
        TT = TT + 1
        dArr(I, 1) = TT
    End If
Next I
    Range("A7").Resize(1000).ClearContents
    Range("A7").Resize(I - 1).Value = dArr
End If
End Sub
Code này bị lỗi, chưa hoàn chỉnh
 
Code này bị lỗi, chưa hoàn chỉnh
Lỗi thì lỗi gì, phải nói rõ ra. Đừng chỉ phán suông như vậy làm hoang man dư luận //////
Tôi thì tôi phát hiện một lỗi mà cả 2 bạn đều mắc phải. Nhưng để xem lỗi mà bạn nói là cái gì cái đã.
 
Lỗi thì lỗi gì, phải nói rõ ra. Đừng chỉ phán suông như vậy làm hoang man dư luận //////
Tôi thì tôi phát hiện một lỗi mà cả 2 bạn đều mắc phải. Nhưng để xem lỗi mà bạn nói là cái gì cái đã.
Code của hpkhuong mình test thử thì thấy có lỗi như sau:
- Nếu các ô từ ô C8 trở xuống của cột C mà chưa có số liệu, khi thay đổi nội dung ô C7 thì sẽ báo lỗi tại dòng sau:
Mã:
ReDim dArr(1 To UBound(sArr), 1 To 1)
- Còn nếu các ô từ ô C8 trở xuống của cột C mà đã có số liệu, khi thay đổi nội dung ô C7 thì sẽ không báo lỗi.
Không biết bạn có phát hiện ra giống mình không ???
 
Cả hai bạn đều chưa tính đến trường hợp khi xóa các dòng cuối của cột C
 
Theo bạn, với code của mình post lên thì bạn sửa lại ra sao
Tôi sửa code bài 4. Code của bạn lấy và gán giá trị trực tiếp vào từng ô, không phù hợp để áp dụng thực tế.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sArr, i As Long, TT
If Not Intersect(Columns(3), Target) Is Nothing Then
    sArr = Range("C1", Range("C65000").End(3).Offset(1)).Value
    For i = 1 To UBound(sArr)
        If sArr(i, 1) <> Empty Then
            TT = TT + 1
            sArr(i, 1) = TT
        End If
    Next i
    Columns(1).ClearContents
    Range("A1").Resize(UBound(sArr)).Value = sArr
End If
End Sub
 
Web KT

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

Back
Top Bottom