Biến tự thay đổi khi chạy vòng lặp

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

sicu.nguyen

Thành viên mới
Tham gia
22/7/20
Bài viết
8
Được thích
0
Em chào mọi người - em đang làm 1 đoạn code VBA mục đích để gộp dữ liệu 2 ô có chứa kí tự xuống dòng (gộp dòng nào theo dòng ấy). Nhưng khi chạy các biến bị tự đổi giá trị (em ấn F8 để dò thấy như vậy). Nhờ mọi người chỉ ra vấn đê hộ em với ạ. Em cảm ơn mọi người rất nhiều.
Bài đã được tự động gộp:

em đang test với Sub Combine2 nhé ạ
 

File đính kèm

  • combine text enter.xlsm
    18.1 KB · Đọc: 14
(1) Các biến nào tự đổi giá trị vậy?
(2) Tạm thời vô hiệu hóa các dòng lệnh On error resume Next xem có lỗi gì chưa cái đã?
. . . . .
 
Upvote 0
Em chào mọi người - em đang làm 1 đoạn code VBA mục đích để gộp dữ liệu 2 ô có chứa kí tự xuống dòng (gộp dòng nào theo dòng ấy). Nhưng khi chạy các biến bị tự đổi giá trị (em ấn F8 để dò thấy như vậy). Nhờ mọi người chỉ ra vấn đê hộ em với ạ. Em cảm ơn mọi người rất nhiều.
Bài đã được tự động gộp:

em đang test với Sub Combine2 nhé ạ
Code bạn mình chưa đọc nên không góp ý, thử dùng code này thay thế:
Mã:
Option Explicit

Sub NT()
Dim a(), b(), s1$, s2$
Dim i&, j&, tmp1, tmp2, iMax&
a = Sheets("Sheet1").Range("B2:C5").Value
ReDim b(1 To UBound(a), 1 To 1)
For i = 1 To UBound(a)
    tmp1 = Split(a(i, 1), Chr(10))
    tmp2 = Split(a(i, 2), Chr(10))
    iMax = Application.Max(UBound(tmp1), UBound(tmp2))
    For j = 0 To iMax
        If j > UBound(tmp1) Then s1 = " : " Else s1 = tmp1(j) & " : "
        If j > UBound(tmp2) Then s2 = "" Else s2 = tmp2(j)
        b(i, 1) = b(i, 1) & Chr(10) & s1 & Space(1) & s2
    Next
    b(i, 1) = Mid(b(i, 1), 2)
Next
Sheets("Sheet1").Range("D2").Resize(UBound(b)).Value = b
End Sub
 
Upvote 0
Code bạn mình chưa đọc nên không góp ý, thử dùng code này thay thế:
Mã:
Option Explicit

Sub NT()
Dim a(), b(), s1$, s2$
Dim i&, j&, tmp1, tmp2, iMax&
a = Sheets("Sheet1").Range("B2:C5").Value
ReDim b(1 To UBound(a), 1 To 1)
For i = 1 To UBound(a)
    tmp1 = Split(a(i, 1), Chr(10))
    tmp2 = Split(a(i, 2), Chr(10))
    iMax = Application.Max(UBound(tmp1), UBound(tmp2))
    For j = 0 To iMax
        If j > UBound(tmp1) Then s1 = " : " Else s1 = tmp1(j) & " : "
        If j > UBound(tmp2) Then s2 = "" Else s2 = tmp2(j)
        b(i, 1) = b(i, 1) & Chr(10) & s1 & Space(1) & s2
    Next
    b(i, 1) = Mid(b(i, 1), 2)
Next
Sheets("Sheet1").Range("D2").Resize(UBound(b)).Value = b
End Sub
vâng em cảm ơn nhé ạ
 
Upvote 0
(1) Các biến nào tự đổi giá trị vậy?
(2) Tạm thời vô hiệu hóa các dòng lệnh On error resume Next xem có lỗi gì chưa cái đã?
. . . . .
Thớt nói chuyện mù mờ bỏ bố:
1. Vòng lặp loại gì? For biến =; For Each Biến; Do..Loop?
2. Biến là kiểu đơn giản (số, chuỗi,...) hay phức tạp (mảng, object,...)?
3. Biến khai báo là toàn cục hay biến nội?
4. Có code sự kiện?
 
Upvote 0
Web KT

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

Back
Top Bottom