Nhờ sửa lỗi code

Liên hệ QC

tuan_anhbm

Thành viên thường trực
Tham gia
16/7/09
Bài viết
253
Được thích
1,605
Chào các bạn.
Tôi có 1 code đơn giản nhưng không hiểu bị lỗi gì, báo lỗi tại câu lệnh tô đậm:
Mã:
[FONT=Tahoma][SIZE=2]i = Sheets(2).Range("B2").Value[/SIZE][/FONT]
[SIZE=2][B][FONT=Tahoma]Range("A3").Value = "=(A1+A2)*" & i[/FONT][/B][/SIZE]
(gán công thức trong ô A3 của sheets(1): "=(A1+A2)*5%", trong đó 5% = Sheets(2).Range("B2"), sheets(1) đang hiện hành).
Nhờ các bạn chỉ giúp!
 
Chào các bạn.
Tôi có 1 code đơn giản nhưng không hiểu bị lỗi gì, báo lỗi tại câu lệnh tô đậm:
Mã:
[FONT=Tahoma][SIZE=2]i = Sheets(2).Range("B2").Value[/SIZE][/FONT]
[SIZE=2][B][FONT=Tahoma]Range("A3").Value = "=(A1+A2)*" & i[/FONT][/B][/SIZE]
(gán công thức trong ô A3 của sheets(1): "=(A1+A2)*5%", trong đó 5% = Sheets(2).Range("B2"), sheets(1) đang hiện hành).
Nhờ các bạn chỉ giúp!
A1, A2 là gì vậy bạn?
 
Upvote 0
Chào các bạn.
Tôi có 1 code đơn giản nhưng không hiểu bị lỗi gì, báo lỗi tại câu lệnh tô đậm:
Mã:
[FONT=Tahoma][SIZE=2]i = Sheets(2).Range("B2").Value[/SIZE][/FONT]
[SIZE=2][B][FONT=Tahoma]Range("A3").Value = "=(A1+A2)*" & i[/FONT][/B][/SIZE]
(gán công thức trong ô A3 của sheets(1): "=(A1+A2)*5%", trong đó 5% = Sheets(2).Range("B2"), sheets(1) đang hiện hành).
Nhờ các bạn chỉ giúp!
Nếu có file sẽ dễ kiểm tra hơn. Còn không thì chỉ có thể đoán thôi.
Tôi nghĩ có thể lỗi ở chỗ 5%. Bạn kiểm tra thử bằng lệnh này:
PHP:
MsgBox Sheets(2).Range("B2").Value
Xem xem nó có phải là 5% hay không.
Hoặc là bỏ dấu "=" trong code của bạn và chạy lại xem công thức như thế nào.
 
Upvote 0
Là cell A1 và cell A2.
Msgbox của Hữu Thắng cho kết quả 0,05.
Thắng ơi, nếu bỏ dấu "=" thì cho kết quả "(A1+A2)*0,05", thêm 1 dấu "=" phía trước lại không được, thế mới lạ.
Mình gửi file bên dưới, các bạn coi giúp mình xem sao.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Là cell A1 và cell A2.
Msgbox của Hữu Thắng cho kết quả 0,05.
Thắng ơi, nếu bỏ dấu "=" thì cho kết quả "(A1+A2)*0,05", thêm 1 dấu "=" phía trước lại không được, thế mới lạ.
Mình gửi file bên dưới, các bạn coi giúp mình xem sao.
Nếu chấp nhận Sheets(2).Range("B2").value=5 (không phải 5%)
thì Range("A3").Value = "=(A1+A2)*" & i & "%" được không?
Hoặc bạn dùng: Range("A3").Value = "=(A1+A2)*" & Format(i, "0%") thử xem sao
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu chấp nhận Sheets(2).Range("B2").value=5 (không phải 5%)
thì Range("A3").Value = "=(A1+A2)*" & i & "%" được không?
Hoặc bạn dùng: Range("A3").Value = "=(A1+A2)*" & Format(i, "0%") thử xem sao
Mình đã thử theo gợi ý của viethoai, (chỉ sửa giá trị trong ô B2 của sheet2, không sửa định dạng %), phát hiện 1 vấn đề thế này:
- Nếu giá trị trong ô B2 là số nguyên --> Không bị lỗi.
- Nếu giá trị trong ô B2 là số lẻ --> Bị lỗi.
Không hiểu vì sao...
 
Lần chỉnh sửa cuối:
Upvote 0
Là cell A1 và cell A2.
Msgbox của Hữu Thắng cho kết quả 0,05.
Thắng ơi, nếu bỏ dấu "=" thì cho kết quả "(A1+A2)*0,05", thêm 1 dấu "=" phía trước lại không được, thế mới lạ.
Mình gửi file bên dưới, các bạn coi giúp mình xem sao.
Do bạn cài đặt dấu phân cách hàng ngàn là ".", dấu phân cách thập phân là "," và dấu phân cách giữa các thành phần trong hàm là ";" nhưng khi nhập công thức bằng macro thì nó chỉ chấp nhận dấu phân cách thập phân là "." và dấu phân cách giữa các thành phần trong hàm là ",".

Trường hợp của bạn có thể chỉnh lại Regional and Language Options hoặc thay thế các dấu phân cách khi nhập công thức bằng macro.
PHP:
Sub MacroBiLoiGi()
i = Sheets(2).Range("B2").Value
Range("A3").Formula = "=(A1+A2)*" & Replace(i, ",", ".")
End Sub
 
Upvote 0
Mình đã thử theo gợi ý của viethoai, (chỉ sửa giá trị trong ô B2 của sheet2, không sửa định dạng %), phát hiện 1 vấn đề thế này:
- Nếu giá trị trong ô B2 >= 1 : Không bị lỗi.
- Nếu giá trị trong ô B2 < 1 : Bị lỗi.
Đã tìm ra nguyên nhân. Tuy vẫn chưa hiểu vì sao...
Mình thử không bị lỗi ---> có khả năng xảy ra trường hợp anh Huuthang_db
Trường hợp: Range("A3").Value = "=(A1+A2)*" & Format(i, "0%") thì sao?
 
Upvote 0
Mình thử không bị lỗi ---> có khả năng xảy ra trường hợp anh Huuthang_db
Trường hợp: Range("A3").Value = "=(A1+A2)*" & Format(i, "0%") thì sao?
Trường hợp này kết quả lại sai nếu i là số phần trăm lẻ. Ví dụ 1.5% thì kết quả sẽ là 2%
 
Upvote 0
Đúng như Hữu Thắng giải thích ở bài #7, mình thay code của Thắng & chạy thử thấy hết lỗi rồi.
Rất cảm ơn bạn.
 
Upvote 0
File mình chạy vẫn không bị lỗi?
Như tôi đã nói ở bài #7, nguyên nhân gây ra lỗi ở đây là do cách cài đặt các dấu phân cách. Vì vậy, bạn phải kiểm tra code của bạn trong trường hợp các thiết lập dấu phân cách của bạn giống như của bạn tuan_anhbm thì mới biết có lỗi hay không.
Nếu như bạn test code của bạn không bị lỗi thì ngay từ đầu, code đầu tiên của bạn tuan_anhbm đưa lên bạn chạy cũng sẽ không bị lỗi. Vậy thì lấy code đó luôn cho rồi.
 
Upvote 0
Mình có đoạn code này ,nó bị lỗi ở dòng đỏ không biết bị lỗi gì , nhờ các cao thủ sửa giúp , cảm ơn

Sub test()
Dim i, arr(1 To 1, 1 To 9), src
src = [a2:a10]
For i = 1 To 9
arr(i, 1) = src(i, 1)
Next
[c2:c10] = arr
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn viết như thế này cơ


Mã:
Sub test()
Dim i, arr(1 To 2, 1 To 9), src
src = Sheet1.[a2:a10]
For i = 1 To 9
arr(1, i) = src(i, 1)
Next
[c2:c10] = arr
End Sub
 
Upvote 0
Đúng ra, phải viết Sheet1.[a2:a10] . Đây là tham chiếu chặt. Nếu không ghi sheet1 thì VBA hiểu vùng A2:A10 của sheet đang Active.

Bạn thử như thế này nhé. Chọn sheet3 chẳng hạn rồi nhấn Alt+F8 chọn Test để chạy Macro này. Trở lại bạn xem nó chép vào đâu nhé.
Tiếp theo bạn xoá hết cột C các sheet rồi chọn sheet2. Tieeps theo làm như trên xem nó chép vào đâu nhé.

Vậy là bạn hiểu vai trò của tham chiếu Sheet1 rồi chứ, đồng thời sự nguy hiểm cho dữ liệu nếu viết không chặt chẽ.
 
Upvote 0
Bạn viết như thế này cơ


Mã:
Sub test()
Dim i, arr(1 To 2, 1 To 9), src
src = Sheet1.[a2:a10]
For i = 1 To 9
arr(1, i) = src(i, 1)
Next
[c2:c10] = arr
End Sub
Ủa! Đâu có đúng đâu anh!
Em đoán thế này:
- Quăng dữ liệu A2:A10 vào mảng
- Quét mảng này và nạp giá trị vào 1 mảng khác (Arr)
- Gán Arr vào cột C
Thế thì nó phải vầy chứ:
PHP:
Sub test()
  Dim i As Long, arr(1 To 9, 1 To 1), src
  src = [a2:a10]
  For i = 1 To 9
    arr(i, 1) = src(i, 1)
  Next
  [c2:c10] = arr
End Sub
bạn letin khai báo mảng arr bị... ngược thôi
arr(1 To 1, 1 To 9) gần giống với vùng dữ liệu có 1 dòng và 9 cột
còn
arr(1 To 9, 1 To 1) thì ngược lại, gần giống với vùng dữ liệu có 9 dòng và 1 cột
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom