Sửa lỗi khi Record macro có nội dung 1 hàm dài xuống dòng bị lỗi

Liên hệ QC

tranhthurac

Thành viên mới
Tham gia
6/10/16
Bài viết
35
Được thích
3
Mã code từ record
Mã:
Sub record()
    Sheet17.Range("x10").Formula = _
        "=IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[-1]),4),""1"","""")&ROW())="""",""""," & Chr(10) & "IF(OR(INDEX(solieu,RC[-3]+3,(R6C[2]-1)*R3C2+R4C7)="""",RC[12]=R2C2),""""," & Chr(10) & "IF(AND(INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)="""",RC[2]>0),RC[2]," & Chr(10) & "IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[5]),4),""1"","""")&7)/100>442,((RC[4]*100)-TRUNC(RC[4]*100))/150,0)+IF(RC[12]=R1C2,RC[2]-RC[-9]/1000" & _
        "olieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)))))"
End Sub
Mã code phải sửa lại
Mã:
Sub sualai()
    Sheet17.Range("x10").Formula = _
        "=IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[-1]),4),""1"","""")&ROW())="""",""""," & Chr(10) & "IF(OR(INDEX(solieu,RC[-3]+3,(R6C[2]-1)*R3C2+R4C7)="""",RC[12]=R2C2),""""," & Chr(10) & "IF(AND(INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)="""",RC[2]>0),RC[2]," & Chr(10) & "IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[5]),4),""1"","""")&7)/100>442,((RC[4]*100)-TRUNC(RC[4]*100))/150,0)+IF(RC[12]=R1C2,RC[2]-RC[-9]/1000,INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)))))"
End Sub
Chỗ xuống dòng bị thiếu ,INDEX(s
Bác nào biết chỉ giúp.
Tks
 
Mã code từ record
Mã:
Sub record()
    Sheet17.Range("x10").Formula = _
        "=IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[-1]),4),""1"","""")&ROW())="""",""""," & Chr(10) & "IF(OR(INDEX(solieu,RC[-3]+3,(R6C[2]-1)*R3C2+R4C7)="""",RC[12]=R2C2),""""," & Chr(10) & "IF(AND(INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)="""",RC[2]>0),RC[2]," & Chr(10) & "IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[5]),4),""1"","""")&7)/100>442,((RC[4]*100)-TRUNC(RC[4]*100))/150,0)+IF(RC[12]=R1C2,RC[2]-RC[-9]/1000" & _
        "olieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)))))"
End Sub
Mã code phải sửa lại
Mã:
Sub sualai()
    Sheet17.Range("x10").Formula = _
        "=IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[-1]),4),""1"","""")&ROW())="""",""""," & Chr(10) & "IF(OR(INDEX(solieu,RC[-3]+3,(R6C[2]-1)*R3C2+R4C7)="""",RC[12]=R2C2),""""," & Chr(10) & "IF(AND(INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)="""",RC[2]>0),RC[2]," & Chr(10) & "IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[5]),4),""1"","""")&7)/100>442,((RC[4]*100)-TRUNC(RC[4]*100))/150,0)+IF(RC[12]=R1C2,RC[2]-RC[-9]/1000,INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)))))"
End Sub
Chỗ xuống dòng bị thiếu ,INDEX(s
Bác nào biết chỉ giúp.
Tks
Là sao vậy bạn? Ý bạn muốn là gì?
 
Upvote 0
Là sao vậy bạn? Ý bạn muốn là gì?
Không hiểu tại sao khi record macro, nó cho ra đoạn mã code như cái đầu, không có chạy được, do việc gắt xuống dòng bị lỗi.
Như đoạn code trên vừa thừa vừa thiếu: Dòng trên thì thứa ký tự " &, còn dòng dưới thì thiếu ,INDEX(s
Bạn hướng dẫn giúp cách record macro mà không bị lỗi khi đoạn code có xuống dòng.
Cách mình đang làm thủ công hiện tại là ngắt biểu thức làm 2, rồi record 2 lần, sau đó ghép nối code lại, cách này mất nhiều thời gian và hay bị lỗi do nhầm lẫn.
 
Upvote 0
Không hiểu tại sao khi record macro, nó cho ra đoạn mã code như cái đầu, không có chạy được, do việc gắt xuống dòng bị lỗi.
Như đoạn code trên vừa thừa vừa thiếu: Dòng trên thì thứa ký tự " &, còn dòng dưới thì thiếu ,INDEX(s
Bạn hướng dẫn giúp cách record macro mà không bị lỗi khi đoạn code có xuống dòng.
Cách mình đang làm thủ công hiện tại là ngắt biểu thức làm 2, rồi record 2 lần, sau đó ghép nối code lại, cách này mất nhiều thời gian và hay bị lỗi do nhầm lẫn.
Bạn nói thế nào chứ tôi record vẫn bình thường mà, có cắt thiếu miếng gì đâu.
 
Upvote 0
Có thể bạn đưa file giả lập lên không (?)
}}}}} :D }}}}}
 
Upvote 0
Có thể trong công thức Excel có các khoảng trắng, xóa hết các khoảng trắng rồi thu macro lại
Tôi nghĩ là cái phiên bản macro kia nó cũ, không chép được công thức dài trên 255 ký tự.
Cách đi vòng là dùng name để rút ngắn công thức.
 
Upvote 0
Tôi nghĩ là cái phiên bản macro kia nó cũ, không chép được công thức dài trên 255 ký tự.
Cách đi vòng là dùng name để rút ngắn công thức.
Sử dụng Excel 2013 bạn à.
Bài đã được tự động gộp:

Xem lại video, sub Test không phải macro gốc mà đã qua chỉnh sửa :cool:
Video là làm lại để ghi lại các bước làm để nhờ các bác kiểm tra giúp có bị sai gì hay không. Kết quả làm ở video là đoạn code
Mã:
Sub record() Sheet17.Range("x10").Formula = _ "=IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[-1]),4),""1"","""")&ROW())="""",""""," & Chr(10) & "IF(OR(INDEX(solieu,RC[-3]+3,(R6C[2]-1)*R3C2+R4C7)="""",RC[12]=R2C2),""""," & Chr(10) & "IF(AND(INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)="""",RC[2]>0),RC[2]," & Chr(10) & "IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[5]),4),""1"","""")&7)/100>442,((RC[4]*100)-TRUNC(RC[4]*100))/150,0)+IF(RC[12]=R1C2,RC[2]-RC[-9]/1000" & _ "olieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)))))" End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Sử dụng Excel 2013 bạn à.
Bài đã được tự động gộp:


Video là làm lại để ghi lại các bước làm để nhờ các bác kiểm tra giúp có bị sai gì hay không. Kết quả làm ở video là đoạn code
Mã:
Sub record() Sheet17.Range("x10").Formula = _ "=IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[-1]),4),""1"","""")&ROW())="""",""""," & Chr(10) & "IF(OR(INDEX(solieu,RC[-3]+3,(R6C[2]-1)*R3C2+R4C7)="""",RC[12]=R2C2),""""," & Chr(10) & "IF(AND(INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)="""",RC[2]>0),RC[2]," & Chr(10) & "IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[5]),4),""1"","""")&7)/100>442,((RC[4]*100)-TRUNC(RC[4]*100))/150,0)+IF(RC[12]=R1C2,RC[2]-RC[-9]/1000" & _ "olieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)))))" End Sub
Bạn gởi sub gốc không chỉnh sửa mới biết bị gì
 
Upvote 0
Bạn gửi file đang làm lên nhé.
Gửi bạn file đính kèm, nhờ bạn kiểm tra giúp. Cái mình đang record là ô X10, sheet 2. XLSL 1-14
Bạn gởi sub gốc không chỉnh sửa mới biết bị gì
Sub gốc không chỉnh sửa gì ở đây bạn
Mã:
Sub record()
    Sheet17.Range("x10").Formula = _
        "=IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[-1]),4),""1"","""")&ROW())="""",""""," & Chr(10) & "IF(OR(INDEX(solieu,RC[-3]+3,(R6C[2]-1)*R3C2+R4C7)="""",RC[12]=R2C2),""""," & Chr(10) & "IF(AND(INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)="""",RC[2]>0),RC[2]," & Chr(10) & "IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[5]),4),""1"","""")&7)/100>442,((RC[4]*100)-TRUNC(RC[4]*100))/150,0)+IF(RC[12]=R1C2,RC[2]-RC[-9]/1000" & _
        "olieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)))))"
End Sub
Để đoạn sub gốc này không có chạy, muốn chạy thì mình phải sửa lại như sau
Mã:
Sub sualai()
    Sheet17.Range("x10").Formula = _
        "=IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[-1]),4),""1"","""")&ROW())="""",""""," & Chr(10) & "IF(OR(INDEX(solieu,RC[-3]+3,(R6C[2]-1)*R3C2+R4C7)="""",RC[12]=R2C2),""""," & Chr(10) & "IF(AND(INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)="""",RC[2]>0),RC[2]," & Chr(10) & "IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[5]),4),""1"","""")&7)/100>442,((RC[4]*100)-TRUNC(RC[4]*100))/150,0)+IF(RC[12]=R1C2,RC[2]-RC[-9]/1000,INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)))))"
End Sub
Việc sửa thủ công bằng cách ngắt biểu thức ra làm các đoạn nhỏ, rồi chép từng đoạn code ghép lại, vừa mất thời gian và hay bị sai sót làm lại nhiều lần mới dc :(
Biểu thức tính toán có thể rút giảm dc, nhưng do tính chất công việc không rút ngắn dc.
 

File đính kèm

  • Trao đỏi GPX.xlsm
    223.9 KB · Đọc: 4
Upvote 0
Quả thực là nếu đã dùng VBA thì không ai lại dùng nó để đi điền công thức cả.
mất thời gian và hay bị sai sót
Nhìn Rờ với Cờ chóng mặt, viết thế này cho dễ.

PHP:
Sub vidu()
    Dim congthuc As String
    congthuc = _
        "=IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(W10),4),""1"","""")&ROW())="""","""", " & _
        "IF(OR(INDEX(solieu,U10+3,(Z$6-1)*$B$3+$G$4)="""",AJ10=$B$2),""""," & _
        "IF(AND(INDEX(solieu,U10+3,(X$6-1)*$B$3+$G$4)="""",Z10>0),Z10," & _
        "IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(AC10),4),""1"","""")&7)/100>442," & _
        "((AB10*100)-TRUNC(AB10*100))/150,0)+IF(AJ10=$B$1,Z10-O10/1000,INDEX(solieu,U10+3,(X$6-1)*$B$3+$G$4)))))"
       
    Sheet17.Range("X10").Value = congthuc
End Sub
 
Upvote 0
Quả thực là nếu đã dùng VBA thì không ai lại dùng nó để đi điền công thức cả.

Nhìn Rờ với Cờ chóng mặt, viết thế này cho dễ.

PHP:
Sub vidu()
    Dim congthuc As String
    congthuc = _
        "=IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(W10),4),""1"","""")&ROW())="""","""", " & _
        "IF(OR(INDEX(solieu,U10+3,(Z$6-1)*$B$3+$G$4)="""",AJ10=$B$2),""""," & _
        "IF(AND(INDEX(solieu,U10+3,(X$6-1)*$B$3+$G$4)="""",Z10>0),Z10," & _
        "IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(AC10),4),""1"","""")&7)/100>442," & _
        "((AB10*100)-TRUNC(AB10*100))/150,0)+IF(AJ10=$B$1,Z10-O10/1000,INDEX(solieu,U10+3,(X$6-1)*$B$3+$G$4)))))"
     
    Sheet17.Range("X10").Value = congthuc
End Sub
Cảm ơn bạn, mình đã hiểu cách làm, vì không có kiến thức nhiều, nên sử dụng chức năng record lại để chỉnh sửa trên đó :(
Tại mới tìm hiểu và đang chờ sách VBA cơ bản GPE chuyển về để đọc.
 
Upvote 0
Gửi bạn file đính kèm, nhờ bạn kiểm tra giúp. Cái mình đang record là ô X10, sheet 2. XLSL 1-14

Sub gốc không chỉnh sửa gì ở đây bạn
Mã:
Sub record()
    Sheet17.Range("x10").Formula = _
        "=IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[-1]),4),""1"","""")&ROW())="""",""""," & Chr(10) & "IF(OR(INDEX(solieu,RC[-3]+3,(R6C[2]-1)*R3C2+R4C7)="""",RC[12]=R2C2),""""," & Chr(10) & "IF(AND(INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)="""",RC[2]>0),RC[2]," & Chr(10) & "IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[5]),4),""1"","""")&7)/100>442,((RC[4]*100)-TRUNC(RC[4]*100))/150,0)+IF(RC[12]=R1C2,RC[2]-RC[-9]/1000" & _
        "olieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)))))"
End Sub
Để đoạn sub gốc này không có chạy, muốn chạy thì mình phải sửa lại như sau
Mã:
Sub sualai()
    Sheet17.Range("x10").Formula = _
        "=IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[-1]),4),""1"","""")&ROW())="""",""""," & Chr(10) & "IF(OR(INDEX(solieu,RC[-3]+3,(R6C[2]-1)*R3C2+R4C7)="""",RC[12]=R2C2),""""," & Chr(10) & "IF(AND(INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)="""",RC[2]>0),RC[2]," & Chr(10) & "IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(RC[5]),4),""1"","""")&7)/100>442,((RC[4]*100)-TRUNC(RC[4]*100))/150,0)+IF(RC[12]=R1C2,RC[2]-RC[-9]/1000,INDEX(solieu,RC[-3]+3,(R6C-1)*R3C2+R4C7)))))"
End Sub
Việc sửa thủ công bằng cách ngắt biểu thức ra làm các đoạn nhỏ, rồi chép từng đoạn code ghép lại, vừa mất thời gian và hay bị sai sót làm lại nhiều lần mới dc :(
Biểu thức tính toán có thể rút giảm dc, nhưng do tính chất công việc không rút ngắn dc.
Bị cắt đúng 255 ký tự như bài #10
 
Upvote 0
Quả thực là nếu đã dùng VBA thì không ai lại dùng nó để đi điền công thức cả.

Nhìn Rờ với Cờ chóng mặt, viết thế này cho dễ.

PHP:
Sub vidu()
    Dim congthuc As String
    congthuc = _
        "=IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(W10),4),""1"","""")&ROW())="""","""", " & _
        "IF(OR(INDEX(solieu,U10+3,(Z$6-1)*$B$3+$G$4)="""",AJ10=$B$2),""""," & _
        "IF(AND(INDEX(solieu,U10+3,(X$6-1)*$B$3+$G$4)="""",Z10>0),Z10," & _
        "IF(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(AC10),4),""1"","""")&7)/100>442," & _
        "((AB10*100)-TRUNC(AB10*100))/150,0)+IF(AJ10=$B$1,Z10-O10/1000,INDEX(solieu,U10+3,(X$6-1)*$B$3+$G$4)))))"
      
    Sheet17.Range("X10").Value = congthuc
End Sub
Bạn cho hỏi cách để không hiển thị địa chỉ tương đối Rờ Cờ, mà cho nó hiển thị địa chỉ tuyệt đối A2, hay X6....
Có làm theo hướng dẫn, tùy chọn (bật hay tắt) nút Use Relative Refrences thì nó vẫn cứ Rờ và Cờ như thường :(hoi 3.jpg
 
Upvote 0
Web KT
Back
Top Bottom