Dấu ngày khi chỉnh sửa hàng trong bảng tính


0

Tôi có một bảng tính cần đóng dấu ngày cho mỗi hàng ngay khi có những thay đổi được thực hiện trong các ô trong hàng đó. Ví dụ: tôi thay đổi một cái gì đó trên ô B14 hoặc E14 hoặc G14 và ngày hôm nay xuất hiện trên K14. Rõ ràng, tôi cần có khả năng chọn phạm vi các hàng và cột sẽ bị ảnh hưởng.

Tuy nhiên, điều phức tạp trong trường hợp của tôi là tôi cần ngày hôm nay xuất hiện CHỈ khi tôi thêm hoặc thay đổi thông tin trong ô. Nếu tôi chỉ xóa thông tin khỏi ô, tôi cần ngày giữ nguyên như trước khi xóa thông tin.

PS Tệp là bảng tính excel nhưng nó sẽ được sử dụng trên Google Drive.


1
Bạn có ý nghĩa gì bởi "nó sẽ được sử dụng trên Google Drive"? Bạn sẽ chuyển đổi nó sang định dạng Google Sheets hay bạn sẽ sử dụng Chế độ tương thích Office?
Rubén

Vì đây là một tệp Excel, nên nó không có gì khác biệt khi bạn lưu trữ nó. Microsoft Excel lạc đề ở đây. Điều này nên được hỏi tại Super User .
ale

Câu trả lời:


1

Câu trả lời này là nếu bạn đi thẳng vào Google Sheet.

Tôi nghĩ rằng điều này sẽ giúp bạn đi đúng hướng. Tôi không rõ nếu bạn nói rằng các trường bạn sẽ theo dõi được rắc xung quanh trang tính hoặc nếu các ô không liền kề mà bạn tham chiếu chỉ là ví dụ trong phạm vi. Nếu bạn có các ô được rắc xung quanh, bạn có thể sẽ phải tạo nhiều "phạm vi đồng hồ" như tôi đã lưu ý trong mã và kiểm tra xem ô đang được chỉnh sửa nằm trong ít nhất một phạm vi, nếu không thì sẽ quay trở lại chức năng.

Tôi muốn lưu ý rằng tôi đã không đi thêm chiều dài để thực hiện công việc này vì đã hỗ trợ xóa tất cả các giá trị khỏi phạm vi đa ô.

Ngoài ra, lưu ý rằng bạn sẽ phải truy cập vào Công cụ -> Trình chỉnh sửa tập lệnh bên trong Trang tính Google và sau đó là Tài nguyên -> Trình kích hoạt (menu có thể khác nhau tùy thuộc vào những gì bạn đã làm trong đó trước đó) và thêm trình kích hoạt "onEdit ()" vào tờ.

Sau đó, chức năng của bạn sẽ đi một cái gì đó như thế này

function onEdit(e){
  var DateCol = "K";
  var DeletedColNote = "L";
  var curDate = Utilities.formatDate(new Date(), "GMT-5", "MM/dd/yyyy") 
  var editRange = e.range;
  var rowIndex = editRange.getRowIndex();
  var colIndex = editRange.getColumnIndex();

  // May need to set up multiple ranges like this and check all ranges if
  // checked fields are not in adjacent cells
  var watchRange = { // B2:G20
    top : 2,         // start row
    bottom : 20,     // end row
    left : 2,        // start col
    right : 7        // end col
  };
  // Exit if we're out of range
  if (rowIndex < watchRange.top || rowIndex > watchRange.bottom) return;
  if (colIndex < watchRange.left || colIndex > watchRange.right) return;

  var currentValue = editRange.getValue();
  currentValue = currentValue.replace(/^\s+|\s+$/g,""); //"trim" kludge

  if (currentValue.length == 0)
  {
    // Set a column to show when data was deleted
    SpreadsheetApp.getActiveSheet().getRange(DeletedColNote + rowIndex).setValue("Deleted: " + curDate);
  }
  else
  {
    // Set a column to show last edit date
    SpreadsheetApp.getActiveSheet().getRange(DateCol + rowIndex).setValue("Edited: " + curDate);
    SpreadsheetApp.getActiveSheet().getRange(DeletedColNote + rowIndex).setValue("");
  }
}

1

Thật không may, VBA không chuyển sang Google Sheets, nhưng nếu yêu cầu của Google Sheets bị từ bỏ, việc thực hiện với VBA khá đơn giản.

Đính kèm mã này vào sự kiện WorkSheet_Change cho bảng tính quan tâm ...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim RngToMark As Range
' define the range you want to track changes for
    Set RngToMark = ActiveSheet.Range("A1:G30")
' make sure the change occurred inside the range
    If Intersect(Target, RngToMark) Is Nothing Then Exit Sub
' ignore deleting the contents
    If Target.Value = "" Then Exit Sub
' mark the row as changed
    ActiveSheet.Range("K" & Target.Row).Value = Format(Now(), "MMM-DD-YYYY")

End Sub

Để đến đúng vị trí cần chèn ...

  1. Trong VBEditor, nhấp đúp vào tên trang tính trong "Đối tượng Microsoft Excel"
  2. Sau đó chọn Worksheet từ tay trái thả xuống
  3. Sau đó chọn Thay đổi từ tay phải thả xuống
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.