Chỉ cách xóa công thức từ VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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é!
 
Bạn thể viết thêm code để Copy và Pastespecial Paste:=xlPasteValues vào chính ô đó.
 
Upvote 0
Bạn có thể chỉ cho mình chi tiết hơn đi! nói thật là mình mới nhấp nhem về VBA
 
Upvote 0
thanhtam348 đã viết:
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é!

- Vùng data có công thức chọn Copy bình trường.
- Nơi cần in Paste Special -> Value, không cần dùng đến VBA.
 
Upvote 0
thanhtam348 đã viết:
Bạn có thể chỉ cho mình chi tiết hơn đi! nói thật là mình mới nhấp nhem về VBA
Ví dụ với ô B5
Mã:
Range("B5").Copy
Range("B5").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
 
Upvote 0
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 đó thì

Chao ban,
Sau khi VBA truy xuat du lieu ra, neu van con cong thuc gia su o cot D va E ban them doan ma sau la het ngay, chuc ban thanh cong.

Columns("D:E").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
 
Upvote 0
Không biết tôi còn gặp lổi do đâu mà những chỉ dẩn trên tôi làm mãi không được, code vẩn lổi chạy không được.
Đoạn công thức sau đây nhờ các bạn kiểm tra dùm:
Private Sub Worksheet_Change(ByVal Target As Range)
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]))"
End Sub
 
Upvote 0
Ah tại bạn không kết thúc lệnh thực hiện của hàm if. Bạn phải dùng End if.
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]))"
End if
End if
End Sub
 
Upvote 0
Công thức hàm tôi vẩn sử dụng bình thường, nhưng khi tôi kết hợp để xóa công thức như dưới đây thì nó bị lổi:
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]))"


Columns("U:Y").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False


End if
End Sub
Các bạn giùm xem lổi do đâu sửa dùm . Cám ơn!
 
Upvote 0
Bạn viết lại như sau xem thử có kết quả không:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
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]))"
Columns("U:Y").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Cells(1, 1).Select
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Vẩn không được kết quả, bạn còn cách nào không?
 
Upvote 0
Cụ thể là sao? Còn báo lỗi không? Bạn gởi file mới dễ thấy hơn.
 
Upvote 0
File tôi làm dùng thường thì nặng kinh khủng, không biết phải gởi sao, vì vậy mới cần VBA cho nhẹ bớt.
Cụ thể là code công thức vẩn hoạt động bình thường nếu không có các đoạn sau vào, như:
Columns("U:Y").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Cells(1, 1).Select
Application.ScreenUpdating = True
End Sub
Nếu thêm vào các phần nầy thì nó lổi code, trong khi đó tôi cũng đang cần các đoạn này cho nhẹ file bớt!
 
Upvote 0
Nếu có file thì dễ hơn
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]))"
Thêm câu sau thử xem
Range("U" & Target.Row).value=Range("U" & Target.Row).value
 
Upvote 0
Nếu có file thì dễ hơn
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]))"
Thêm câu sau thử xem
Range("U" & Target.Row).value=Range("U" & Target.Row).value
 
Upvote 0
Có đoạn nầy thì có lẻ ổn hơn nhưng nó không kết thúc lệnh được:
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]))"
Columns("U:Y").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End Sub
Vậy các bạn thấy có thể thêm gì được không?
 
Upvote 0
Columns("U:Y").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Cells(1, 1).Select
Application.ScreenUpdating = True
End Sub
Chào bạn!
Tui cũng mới nhấm nháp VBA thôi, nên cũng ko biết gì nhiều. Chỉ xin góp chút ý nhỏ như trên thôi. K biết có phải nguyên nhân đó ko?
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn hãy thử thêm một lần nữa:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
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]))"
If Target.Column = 9 Or Target.Column = 10 Then
Columns("U:Y").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
Cells(1, 1).Select
Application.ScreenUpdating = True
End If
End Sub
 
Upvote 0
funnyzui đã viết:
Chào bạn!
Tui cũng mới nhấm nháp VBA thôi, nên cũng ko biết gì nhiều. Chỉ xin góp chút ý nhỏ như trên thôi. K biết có phải nguyên nhân đó ko?
Cám ơn, nhưng đoạn code của bạn cũng không hiệu quả rồi.
voda đã viết:
Bạn hãy thử thêm một lần nữa:
Đoạn code của bạn giờ thì dứt lệnh được , nhưng vừa kích vào dãy cột bất kỳ thì code hoạt động trong lúc chưa nhập được số liệu. Nếu có cách bạn chỉnh thêm dùm tí nửa cho.!$@!!
 
Upvote 0
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

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

Back
Top Bottom