Replace không chạy

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

bjboyn00b

Thành viên chính thức
Tham gia
17/12/10
Bài viết
84
Được thích
5
Chào mọi người, mọi người xem giúp mình cấu trúc code sau:
Dim OrigStr As String, ReplaceStr As String

Set Rng = ThisWorkbook.Sheets("Sample").Range("D1:D3000")
OrigStr = ThisWorkbook.Sheets("Sample").Range("M4").Value2
ReplaceStr = ThisWorkbook.Sheets("Sample").Range("M2").Value2


Rng.Replace What:=OrigStr, Replacement:=ReplaceStr, LookAt:=xlPart
Trong vùng D1:D3000 mình có đặt công thức có liên quan đến đường dẫn, đường dẫn có định dạng : //dc...../a/b/x/ , mình có code để đổi giá trị x ở trong ô M2 như phía trên, nhưng sao đôi lúc nó không hoạt động và không báo lỗi gì nhỉ.
Xin cảm ơn.
 
Có nghĩa là nó đã hoạt động, và nó đã replace giá trị Null (giá trị không có gì)
Cụ thể bạn share file lên nhé
 
Upvote 0
Không rõ lắm, nhưng có vẻ bạn muốn thay thế string trong formula, không phải trong value?
Nếu vậy bạn không dùng Range.Replace nhé
Bạn làm theo hướng này: Bóc formula từng ô ra mà thay.
Mã:
For each cel in range(...)
    If cel.hasformula then
       str = cel.formula
       str = Replace(str,"chuỗi cũ","chuỗi mới")
       cel.fomular = str
     End if
Next
 
Upvote 0
Không rõ lắm, nhưng có vẻ bạn muốn thay thế string trong formula, không phải trong value?
Nếu vậy bạn không dùng Range.Replace nhé
Bạn làm theo hướng này: Bóc formula từng ô ra mà thay.
Mã:
For each cel in range(...)
    If cel.hasformula then
       str = cel.formula
       str = Replace(str,"chuỗi cũ","chuỗi mới")
       cel.fomular = str
     End if
Next
Cảm ơn bạn, đúng là mình thay thế string trong Formula, mình có viết sang như này nhưng không đươc, bạn xem giúp mình lỗi ở đâu với
Mã:
Sub changelink()
Dim chuoicu As String
Dim chuoimoi As String
Dim str As String
Dim lastrow As Long
Dim Cel As Range
    lastrow = Sheet24.Cells(.Rows.Count, "D").End(xlUp).Row
    chuoicu = ThisWorkbook.Sheets("Sample").Range("M4").Value
    chuoimoi = ThisWorkbook.Sheets("Sample").Range("M2").Value
  
For Each Cel In Sheets24.Range("D6:" & lastrow)
    If Cel.HasFormula Then
       str = Cel.Formula
       str = Replace(str, "chuoicu", "chuoimoi")
       Cel.fomular = str
     End If
Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn có thể tìm hiểu cách kiểm tra xem sai ở đâu. Mình hay làm thế này.
Giới hạn số dòng lại, ví dụ đến dòng 10, sau đó debug.print xem thử kết quả từng dòng
Mã:
lr=10
...
str = Cel.Formula
debug.print str
...
Còn vì sao không chạy thì có thể chỗ này sai chính tả:
Mã:
  Cel.fomular = str
 
Upvote 0
Bạn có thể tìm hiểu cách kiểm tra xem sai ở đâu. Mình hay làm thế này.
Giới hạn số dòng lại, ví dụ đến dòng 10, sau đó debug.print xem thử kết quả từng dòng
Mã:
lr=10
...
str = Cel.Formula
debug.print str
...
Còn vì sao không chạy thì có thể chỗ này sai chính tả:
Mã:
  Cel.fomular = str
Cảm ơn bạn nhiều, mình quên không bỏ chuoicu và chuỗi mới ra khỏi ngoặc kép :)) . Nhiều lúc ngáo thật.
 
Upvote 0
Bạn có thể tìm hiểu cách kiểm tra xem sai ở đâu. Mình hay làm thế này.
Giới hạn số dòng lại, ví dụ đến dòng 10, sau đó debug.print xem thử kết quả từng dòng
Mã:
lr=10
...
str = Cel.Formula
debug.print str
...
Còn vì sao không chạy thì có thể chỗ này sai chính tả:
Mã:
  Cel.fomular = str
Bạn ơi lại phiền bạn chút. Máy mình thì dùng không vấn đề gì , nhưng máy khác dùng thì lại báo error ở dòng đặt lại công thức cho cel :(
 

File đính kèm

  • 1234.png
    1234.png
    279.7 KB · Đọc: 5
Upvote 0
Bạn ơi lại phiền bạn chút. Máy mình thì dùng không vấn đề gì , nhưng máy khác dùng thì lại báo error ở dòng đặt lại công thức cho cel :(
Có thể do version của Excel máy đang dùng đời thấp hơn, nên công thức bị lỗi?
ví dụ: SUMIFS chuyển qua máy đang dùng là Ex 2003 nên báo lỗi.
hay XLOOKUP từ máy ex365 chuyển qua Ex2016 cũng báo lỗi
 
Upvote 0
Không khai báo biến thì phăng teo là đúng rồi.

Cái này chỉ cần record macro cho Range.Replace_All là được.
Thay đổi đường dẫn thì sẽ báo cập nhật Link -> Cần tắt sự kiện đi rồi bật lại sau khi thay thế đường dẫn xong.
 
Upvote 0
Web KT

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

Back
Top Bottom