Lỗi '1004'???

Liên hệ QC

emgaingayngo

Thành viên hoạt động
Tham gia
9/2/07
Bài viết
141
Được thích
5
Mình có đoạn code như sau:
Mã:
Private Sub DemBlank()
Dim a, b As Integer
Dim cot As Integer
a = Range("ChonLan").Value
b = Range("ChonSoCot").Value
Range("21:21").ClearContents
cot = a
Set vung = Application.InputBox("Moi Chon Vung DL", "Chon Range", , 120, 60, , , 8)
For i = a To b
Range("ChonNgayA").Value = Cells(22, i).Value
Cells(21, i).Value = 100 - WorksheetFunction.CountBlank(Range("vung"))
cot = cot + 1
Next i
End Sub

Sau khi chạy bị báo kỗi :

loi1004.jpg


Mong các bạn giúp đỡ. Thanks Much!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Tác phẩm này do bạn làm ra hay thu lượm được vậy?

Như mình, mình luôn dùng khai báo
Mã:
Option Explicit
& để làm gì chắc bạn cũng đã rỏ.
Trong macro đó biến thường tình thì khai báo tương đối đủ; nhưng biến Vung - là biến quan trọng thì không khai đủ;
Khai báo
Mã:
Dim a, b As Integer
Có nghĩa là a thuộc loại Vaỉant, còn b thuộc loại Integer (!)
Tiếp theo, a = Range("ChonLan").Value
Như vậy a có thể là mảng giá trị; còn
b = Range("ChonSoCot").Value
là 1 số trị kiểu Integer mà thôi (?) - Đến đây dễ đau đầu rồi còn gì;
Vì chúng ta tự làm khó chúng ta, một khi ta tùy tiện lúc này, thì lúc khác cái sự tùy tiện đó xử lại chúng ta thôi.
Range("ChonNgayA").Value = Cells(22, i).Value
Câu lệnh này là sao?, range("ChonNgayA") là 1 Cell; Nếu vậy thì nó nhận các giá trị khác nhau liên tục đổi để làm gì vậy?
Cells(21, i).Value = 100 - WorksheetFunction.CountBlank(Range("vung"))
Một khi bạn Set Vung = . . .
Thì viết dòng này không báo lỗi mới là chuyện lạ!
Chí ít biến Vung không thể để trong ngoặt kép thế kia được đâu.
Bạn hãy cho biết VBA nó tô vàng dòng lệnh nào không vậy, khi có lỗi í?;
 
Upvote 0
emgaingayngo đã viết:
Mình có đoạn code như sau:


Sau khi chạy bị báo kỗi :

loi1004.jpg


Mong các bạn giúp đỡ. Thanks Much!
Bạn thân mến!
  1. Lần sau nhớ gửi File lên để mọi người dễ hình dung hơn
  2. Nhớ khai báo biến đầy đủ
  3. Set vung = Application.InputBox("Moi Chon Vung DL", "Chon Range", , 120, 60, , , 8) : Không nên chỉ có thế này, nếu người nhập nhấn Cancel thì sẽ bị báo lỗi ngay.Cái này sẽ liên quan đến kỹ thuật bẫy lỗi.
  4. Dòng : Range("ChonNgayA").Value = Cells(22, i).Value đã bị sai. Bạn muốn gắn 1 giá trị cho 1 name thì không thể làm như thế được. Bạn phải làm như sau : ActiveWorkbook.Names.Add Name:="ChonNgayA", RefersToR1C1:=Cells(22, i).Value
  5. ..................................
Thân!
 
Upvote 0
Trước hết cảm ơn các bạn đã quan tâm.

To SA_DQ :

Range("ChonNgayA").Value = Cells(22, i).Value
Câu lệnh này là sao?, range("ChonNgayA") là 1 Cell; Nếu vậy thì nó nhận các giá trị khác nhau liên tục đổi để làm gì vậy?
Vì khi range("ChonNgayA") thay đổi thì giá trị trong vung sẽ thay đổi theo,
và câu lệnh :
Cells(21, i).Value = 100 - WorksheetFunction.CountBlank(Range("vung"))
sẽ giúp mình biết kết quả (100-countblank) trong vung tùy theo giá trị thay đổi của từng range("ChonNgayA")
Mình biết rằng biến vùng không để trong dấu "" được, nhưng không biết để như thế nào cho phù hợp???

Cells(21, i).Value = 100 - WorksheetFunction.CountBlank(Range("vung"))
Một khi bạn Set Vung = . . .
Thì viết dòng này không báo lỗi mới là chuyện lạ!
Chí ít biến Vung không thể để trong ngoặt kép thế kia được đâu.
Bạn hãy cho biết VBA nó tô vàng dòng lệnh nào không vậy, khi có lỗi í?;

Dòng đó gây lỗi, nhưng mình không biết cách giải quyết, mong SA_DQ giúp.
VBA chỉ thông báo lỗi, không tô vàng dòng nào. Thanks Much!

To Mr Okebab :
Dòng : Range("ChonNgayA").Value = Cells(22, i).Value đã bị sai. Bạn muốn gắn 1 giá trị cho 1 name thì không thể làm như thế được. Bạn phải làm như sau : ActiveWorkbook.Names.Add Name:="ChonNgayA", RefersToR1C1:=Cells(22, i).V

Hai cái này hình như là như nhau mà phải không Mr Okebab ?, một cái đặt tên trong Define Name, còn một cái là đặt tên trong macro. Thanks Much!
 
Upvote 0
Trong đoạn code trên mình chạy đến hình sau:

loi10041.jpg


đến đây mình chọn vung, nhấn OK và bị báo lỗi.

Mình nghĩ lỗi là do câu lệnh :
Cells(21, i).Value = 100 - WorksheetFunction.CountBlank(Range("vung"))

nhưng không biết viết lại : ... WorksheetFunction.CountBlank(Range("vung")) sao cho chính xác??? Mong các bạn giúp đỡ. Cảm ơn nhiều!
 
Upvote 0
Mình biết rằng biến vùng không để trong dấu "" được, nhưng không biết để như thế nào cho phù hợp???
Dòng đó gây lỗi, nhưng mình không biết cách giải quyết, mong giúp.
. . . .Thanks Much!
Bạn tham khảo macro này của mình nha; Chú í cách xài biến thuộc loại Range, như sau:
PHP:
Public Sub Sort1Col(Rng As Range, Clls As Range) 
  Rng.Sort Key1:=Clls, Order1:=xlAscending, Header:=xlGuess, _ 
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ 
    DataOption1:=xlSortNormal 
End Sub
Nếu còn phân vân, bạn thử record Macro động tác xếp 1 vài cột dữ liệu sẽ hiểu rõ hơn sau khi đối chiếu với macro trên;

HaiDuong1.jpg
 
Upvote 0
Private Sub DemBlank()
Dim a As Integer
Dim b As Integer
Dim cot As Integer
Dim vung As Range
a = Range("ChonLan").Value
b = Range("ChonSoCot").Value
Range("21:21").ClearContents
cot = a
'Set vung = Application.InputBox("Moi Chon Vung DL", "Chon Range", , 120, 60, , , 8)
For i = a To b
Range("ChonNgayA").Value = Cells(22, i).Value
Cells(21, i).Value = 100 - WorksheetFunction.CountBlank(Range("Vung2"))
cot = cot + 1
Next i
End Sub

Ở đoạn mã này nếu mình cố định vung = Vung2 thì không bị báo lỗi. Các bạn nghĩ như thế nào?
 
Upvote 0
Đành nói trực tiếp vậy

PHP:
Cells(21, i).Value = 100 - WorksheetFunction.CountBlank(Range("vung"))
PHP:
Cells(21, i).Value = 100 - WorksheetFunction.CountBlank(vung)
 
Upvote 0
Web KT

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

Back
Top Bottom