Chỉ cách xóa công thức từ VBA

Liên hệ QC

thanhtam348

Thành viên thường trực
Tham gia
9/3/07
Bài viết
288
Được thích
62
Khi VBA đã thực thi xong một công thức và cho kết quả, nếu muốn xóa công thức đó đi chỉ còn lại giá trị của kết quả thôi thì phải điền thêm vào code như thế nào? nhờ các bạn cho xin. Cám ơn trước nhé!
 
thanhtam348 mến!
Vì chưa thấy file, nên mình chưa hiểu hết ý đồ của bạn. Nhưng mình cũng có mấy ý này :
If Target.Column = 9 Then Range("U" & Target.Row) = "=IF(RC[-14]=0,"""",(IF(WEEKDAY(RC[-17])=1,VLOOKUP(RC[-14],DSLuong,RC[-16]+29,0)*(RC[-12]+RC[-11])*0.5))+VLOOKUP(RC[-14],DSLuong,RC[-16]+29,0)*(RC[-12]+RC[-11]))"
If Target.Column = 10 Then Range("U" & Target.Row) = "=IF(RC[-14]=0,"""",(IF(WEEKDAY(RC[-17])=1,VLOOKUP(RC[-14],DSLuong,RC[-16]+29,0)*(RC[-12]+RC[-11])*0.5))+VLOOKUP(RC[-14],DSLuong,RC[-16]+29,0)*(RC[-12]+RC[-11]))"
-Hai dòng lệnh trên cho kết quả hoàn toàn giống nhau thế nên có thể chỉ sử dụng 1 dòng thôi cũng được.
-Sự kiện Worksheet_SelectionChange rơi vào cột I và J. Hai cột này là cột tham chiếu của công thức, nên cần nhập dữ liệu. Vì thế xảy ra tình trạng, khi ta click vào các ô bất kỳ trong cột I và J để nhập dữ liệu thì chương trình chạy và xoá hết công thức. Điều này có thể được giải quyết một cách đơn giản như sau: Ta gán sự kiện Worksheet_SelectionChange vào một cột không nhập dữ liệu như cột 1 chẳng hạn để ta có thể nhập dữ liệu vào các cột khác bình thường.
-Vậy đoạn code có thể chỉnh lại:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Column = 1 Then
Range("U" & Target.Row) = "=IF(RC[-14]=0,"""",(IF(WEEKDAY(RC[-17])=1,VLOOKUP(RC[-14],DSLuong,RC[-16]+29,0)*(RC[-12]+RC[-11])*0.5))+VLOOKUP(RC[-14],DSLuong,RC[-16]+29,0)*(RC[-12]+RC[-11]))"
Columns("U:Y").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Cells(1, 1).Select
Application.ScreenUpdating = True
End If
End Sub
Có gì bạn trao đổi lại nhé!
 
Upvote 0
Cám ơn bạn, bạn đã tận tình nhiều. Nếu không có câu "có gì trao đổi nhé!" chắc là không dám hỏi thêm.
Đúng là 2 công thức trên đã bị trùng nhau.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Column = 1 Then
Range("U" & Target.Row) = "=IF(RC[-14]=0,"""",(IF(WEEKDAY(RC[-17])=1,VLOOKUP(RC[-14],DSLuong,RC[-16]+29,0)*(RC[-12]+RC[-11])*0.5))+VLOOKUP(RC[-14],DSLuong,RC[-16]+29,0)*(RC[-12]+RC[-11]))"
Columns("U:Y").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Cells(1, 1).Select
Application.ScreenUpdating = True
End If
End Sub
Đoạn code nầy không lổi nhưng nó lại xóa công thức không được, nếu là không còn cách thôi đành để tìm cách khác. hi vọng nếu gặp rắc rối sẽ có những người như bạn.
 
Upvote 0
Sau khi nhập dữ liệu, bạn click vào cột A.
-click vào A8 thì công thức ở ô U8 bị xoá.
-click vào A10 thì công thức ở ô U10 bị xoá...
Bạn kiểm tra lại có đúng không?
 
Upvote 0
Nhìn công thức dài mà phát hoảng.
Đã lỡ dùng VBA rồi, sao không phân TH ra để tính trong VBA sau đó chỉ việc hiển thị giá trị cuối cùng không hay hơn sao ???

Thân!
 
Upvote 0
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Column = 1 Then
Range("U" & Target.Row) = "=IF(RC[-14]=0,"""",(IF(WEEKDAY(RC[-17])=1,VLOOKUP(RC[-14],DSLuong,RC[-16]+29,0)*(RC[-12]+RC[-11])*0.5))+VLOOKUP(RC[-14],DSLuong,RC[-16]+29,0)*(RC[-12]+RC[-11]))"
Columns("U:Y").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Cells(1, 1).Select
Application.ScreenUpdating = True
End If
End Sub

Thay bằng
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
If Target.Column = 1 Then
Range("U" & Target.Row) = "=1+2"
Range("U" & Target.Row).Value = Range("U" & Target.Row).Value
'Columns("U:Y").Select
'Selection.Copy
'Selection.PasteSpecial Paste:=xlValues
'Application.CutCopyMode = False
'Cells(1, 1).Select
Application.ScreenUpdating = True
End If
End Sub
Voda xem thử nha. Không nên dùng copy và past
 
Upvote 0
Web KT

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

Back
Top Bottom