Giúp em chuyển hàm sang giá trị (1 người xem)

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

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
944
Được thích
574
Kính chào các bác

Em có file excel giao cho người khác cập nhật từng sự kiện, mỗi sự kiện là 1 dòng.
Trong file có cột ngày và giờ, tuy nhiên nhân viên toàn “quên” cập nhật ngày giờ, hoặc bổ sung ngày giờ sau đó không đúng thực tế phát sinh sự kiện
Mặc dù đã gợi ý dùng tổ hợp phím Ctrl + ; để nhập ngày và Ctrl + Shift + ; để nhập thời gian nhưng không hiệu quả.

Em muốn đặt hàm Today() trong cột ngày và Now() trong cột giờ, để ngay khi 1 dòng mới được nhập liệu thì cột ngày và giờ được cập nhật. Tuy nhiên khi hết dòng hoặc khi đóng file, ô chứa hàm nói trên được tự chuyển sang giá trị để cố định số liệu. (Em sẽ ẩn cột để đối chiếu)

Mong các bác giúp đỡ
 

File đính kèm

Xin lỗi bác, em chưa up file và trình bày rối rắm. Bác xem lại giúp em nhé...
phải dùng VBA sử dụng tính năng workbook before close

nếu chưa biết bật VBA thì tham khảo

excel 2007 :http://www.giaiphapexcel.com/forum/s...-%C4%91%C3%A2u

excel 2003: Mở file excel lên -> Tools -> Macro -> Security -> Chọn mức low

chuột phải vào sheets
chọn view code
chọn thisworkbook (cửa sổ bên tay trái) thêm đoạn code phía dưới vào

PHP:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = True ' không nháy màn hình
Range("b4:c65000").Copy ' copy phần vùng chứa công thức
Range("b4").Select ' chọn vùng để paste
 Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False ' paste special: chỉ dữ liệu không có công thức
    Application.CutCopyMode = False 
Range("b4").Select
ActiveWorkbook.Save ' save file
Application.CutCopyMode = False
Application.ScreenUpdating = True ' cập nhật màn hình
End Sub

hướng dẫn chi tiết rùi nhé, vùng và sheets có thể thay đổi nhưng về cơ bản là như thế

múa rìu qua mắt các tiền bối +-+-+-+
 

File đính kèm

  • Copy of DSLD 2012.rar
    Copy of DSLD 2012.rar
    22.5 KB · Đọc: 24
  • 2012-11-18_122242.jpg
    2012-11-18_122242.jpg
    37.4 KB · Đọc: 12
  • 2012-11-18_122219.jpg
    2012-11-18_122219.jpg
    66.3 KB · Đọc: 7
Lần chỉnh sửa cuối:
Cảm ơn bác đã giúp đỡ nhiệt tình và chi tiết. Có lẽ bác cũng đã "đọc vị" rằng em mù tịt về VBA. Giải pháp của bác rất trúng ý em, tuy nhiên có 1 vấn đề nhỏ là cái công thức để xuất hiện hàm today() và now() trong cột B và C cũng bị xử trước khi nó hoàn thành nhiệm vụ. Bác cải tiến giúp em tiếp nhé. Cảm ơn bác nhiều
 
Xài thử code này xem:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Then
    If Target.Rows.Count = 1 Then
        If Target <> "" Then
            Target.Offset(, -3).Value = Date
            Target.Offset(, -2).Value = Now
        Else
            Target.Offset(, -3).Resize(, 2).ClearContents
        End If
    End If
End If
End Sub
 
Cảm ơn bác. Em thử copy code của bác vào file như hướng dẫn phía trước đó nhưng không thấy file hoạt động gì cả (Đã enable macro). Bác giúp thêm nhé
 
Cảm ơn bác. Em thử copy code của bác vào file như hướng dẫn phía trước đó nhưng không thấy file hoạt động gì cả (Đã enable macro). Bác giúp thêm nhé
Theo yêu cầu của bạn là khi nhập vào cột E là ghi ngày giờ vào cột B,C.
Đúng ra chỉ cần cột C là có đủ ngày giờ.
 

File đính kèm

Mượn code của anh Batê thêm giúp bạn cái số thứ tự
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 5 Then
    If Target.Rows.Count = 1 Then
        If Target <> "" Then
            Target.Offset(, -4).Value = Target.Row - 3
            Target.Offset(, -3).Value = Date
            Target.Offset(, -2).Value = Now
        Else
            Target.Offset(, -3).Resize(, 2).ClearContents
        End If
    End If
End If
End Sub
 
phải dùng VBA sử dụng tính năng workbook before close
PHP:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = True ' không nháy màn hình
Range("b4:c65000").Copy ' copy phần vùng chứa công thức
Range("b4").Select ' chọn vùng để paste
 Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False ' paste special: chỉ dữ liệu không có công thức
    Application.CutCopyMode = False 
Range("b4").Select
ActiveWorkbook.Save ' save file
Application.CutCopyMode = False
Application.ScreenUpdating = True ' cập nhật màn hình
End Sub

Muốn copy dán value vào chỗ đó thì thế này thôi. Chi mà dài quá vậy nhớ sao nổi.

With Range("A1:C10")
.value=.value
End With

Còn nếu muốn Copy và dán giá trị thì vầy

Range("A1:C10").Copy
Range("A1").PasteSpecial 3
 
Lần chỉnh sửa cuối:
Thật tuyệt vời, cảm ơn các cao thủ. Em sẽ ngâm cứu để dùng những tình huống tương tự.
 
Tự động cập nhật ngày

Bạn tải file nay nhé!
 

File đính kèm

Kính thưa các bác đã giúp em. Em xin tiếp tục nhờ các bác.

Em có file để người khác cập nhật. File có đặt các Validation và Conditional Formatting cho các ô trống. Em dặn đi dặn lại những người cập nhập là luôn phải Paste Value để tránh xóa Validation và CF, những cài đặt này hiện lên những chỉ dẫn hữu ích. Tuy nhiên em đành chịu thua họ vì họ Paste thông thường.
Có cách nào để ép (chuyển) các hành động Paste thành Paste Value không (dù họ dùng Ctr+V hay lệnh Paste trên thanh công cụ)

Mong các cao thủ giúp đỡ.
 
Kính thưa các bác đã giúp em. Em xin tiếp tục nhờ các bác.

Em có file để người khác cập nhật. File có đặt các Validation và Conditional Formatting cho các ô trống. Em dặn đi dặn lại những người cập nhập là luôn phải Paste Value để tránh xóa Validation và CF, những cài đặt này hiện lên những chỉ dẫn hữu ích. Tuy nhiên em đành chịu thua họ vì họ Paste thông thường.
Có cách nào để ép (chuyển) các hành động Paste thành Paste Value không (dù họ dùng Ctr+V hay lệnh Paste trên thanh công cụ)

Mong các cao thủ giúp đỡ.
Thử xem cái này
http://www.giaiphapexcel.com/forum/...iến-mọi-thao-tác-dán-thành-Paste-Values-không
 
Kính thưa các bác đã giúp em. Em xin tiếp tục nhờ các bác.

Em có file để người khác cập nhật. File có đặt các Validation và Conditional Formatting cho các ô trống. Em dặn đi dặn lại những người cập nhập là luôn phải Paste Value để tránh xóa Validation và CF, những cài đặt này hiện lên những chỉ dẫn hữu ích. Tuy nhiên em đành chịu thua họ vì họ Paste thông thường.
Có cách nào để ép (chuyển) các hành động Paste thành Paste Value không (dù họ dùng Ctr+V hay lệnh Paste trên thanh công cụ)

Mong các cao thủ giúp đỡ.
Bạn tham khảo topic của mình tải bài #39 của bác concogia http://www.giaiphapexcel.com/forum/...-ẩn-cột-ẩn-dòng-trong-Sheet-như-thế-nào/page4
Xem OK không???
 
Chào các anh chị hôm nay em tìm được bài này thấy hay quá rất phù hợp với nhu cầu sử dụng của em, nay em xin lấy file GPE.xls củ ở trang #7 sửa đôi chút gởi lên nhờ các anh chị trợ giúp nhé.

Em nhập tên hàng , hạng sử dụng ở cột Tên Hàng và HSD, em muốn khi nhập xong xuống dòng thì cột Mã Hàng tự động hiện tên hàng và hạng sử dụng ghép lại dưới dạng value( giống y như kiểu nhập xong xuất hiện ngày tháng trong file GPE.xls củ đang có).
 

File đính kèm

Lần chỉnh sửa cuối:
Chào các anh chị hôm nay em tìm được bài này thấy hay quá rất phù hợp với nhu cầu sử dụng của em, nay em xin lấy file GPE.xls củ ở trang #7 sửa đôi chút gởi lên nhờ các anh chị trợ giúp nhé.

Em nhập tên hàng , hạng sử dụng ở cột Tên Hàng và HSD, em muốn khi nhập xong xuống dòng thì cột Mã Hàng tự động hiện tên hàng và hạng sử dụng ghép lại dưới dạng value( giống y như kiểu nhập xong xuất hiện ngày tháng trong file GPE.xls củ đang có).
Khi Nhập, sửa, xoá 1 ô trong cột F (HSD) thì code chạy
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 6 And Target.Row >= 4 Then
If Target.Rows.Count = 1 Then
If Target <> vbNullString Then
Target.Offset(, -4).Value = Date
Target.Offset(, -3).Value = Now
Target.Offset(, -2).Value = Target.Offset(, -1) & " " & Format(Target, "mm/yyyy")
Else
Target.Offset(, -4).Resize(, 3).ClearContents
End If
End If
End If
End Sub[/GPECODE]
 
Khi Nhập, sửa, xoá 1 ô trong cột F (HSD) thì code chạy
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 6 And Target.Row >= 4 Then
If Target.Rows.Count = 1 Then
If Target <> vbNullString Then
Target.Offset(, -4).Value = Date
Target.Offset(, -3).Value = Now
Target.Offset(, -2).Value = Target.Offset(, -1) & " " & Format(Target, "mm/yyyy")
Else
Target.Offset(, -4).Resize(, 3).ClearContents
End If
End If
End If
End Sub[/GPECODE]

Bấy lâu nay em chỉ biết dùng công thức ghép rồi past value rất lâu lắc thậm chí bị sai lệch, em thử dùng record macro vẫn không làm được gì, bây giờ khỏe quá .Em cám ơn anh Ba Tê nhiều nhe!
 
Chào anh Ba Tê em nhờ anh xem giúp file em gửi, không hiểu vì sao khi xóa ô ở cột Mã Hàng là file báo lỗ code.
 

File đính kèm

Chào anh Ba Tê em nhờ anh xem giúp file em gửi, không hiểu vì sao khi xóa ô ở cột Mã Hàng là file báo lỗ code.
Code này của người nào viết thì bạn hỏi người đó chứ, tôi sao biết code này làm cái gì.
Tôi chỉ viết code bài #18 thôi mà.
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)If Target.Column = 1 Then
If Target.Rows.Count = 1 Then
If Target <> "" Then
Target.Offset(, 4).Value = Now
Target.Offset(, 3).FillDown
Target.Offset(, 2).Activate
Else
Target.Offset(, 1).Resize(, 4).ClearContents
End If
End If
ElseIf Target.Column = 3 Then
If Target.Rows.Count = 1 Then
If Target <> "" Then
Target.Offset(1, -2).Activate
End If
End If
ElseIf Target.Column = 2 Then
If Target.Rows.Count = 1 Then
If Target <> "" Then
Target.Offset(1, -1).Activate
End If
End If
End If
End Sub[/GPECODE]
 
Code này của người nào viết thì bạn hỏi người đó chứ, tôi sao biết code này làm cái gì.
Tôi chỉ viết code bài #18 thôi mà.
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)If Target.Column = 1 Then
If Target.Rows.Count = 1 Then
If Target <> "" Then
Target.Offset(, 4).Value = Now
Target.Offset(, 3).FillDown
Target.Offset(, 2).Activate
Else
Target.Offset(, 1).Resize(, 4).ClearContents
End If
End If
ElseIf Target.Column = 3 Then
If Target.Rows.Count = 1 Then
If Target <> "" Then
Target.Offset(1, -2).Activate
End If
End If
ElseIf Target.Column = 2 Then
If Target.Rows.Count = 1 Then
If Target <> "" Then
Target.Offset(1, -1).Activate
End If
End If
End If
End Sub[/GPECODE]


Dạ em mượng code bài #18 sửa chửa lại cho phù hợp với nhu cầu nhập dử liệu của em.

Ý em là:
-Nếu nhập dử liệu ở cột A --> enter khung chọn ô tự dời ngang qua cột C
- Nếu nhập dử liệu ở cột C hoặc cột B --> enter khung chọn tự động xuống hàng ở cột A.

Về 2 ý trên code chạy được , khi áp dụng xóa dử liệu cột A mới bị báo lổi, do em không biết VBA chỉ lượm lặt code đó đây lắp ghép lại nên không biết sai thế nào ,sửa chửa thế nào xin các anh giúp em nhé.
 

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

Back
Top Bottom