2017-08-30 119 views
1

我得到了設置格式>「日期」的單元格區域,並且默認情況下,當我輸入任何數字時,它將轉換爲日期,我輸入的日期和1900年1月。當前月/年而不是1900年1月

如何更改它,以便在輸入一天中的數字之後始終保持當前的月份和年份?

如何在LibreOffice Calc中做到這一點?

+0

您可以在計算此工作簿時選擇「選項 - >高級 - >」,並選中*使用1904年日期系統* ....旁邊的框,將其更改爲1904年1月。但是,就我而言。 2013年的類似問題,也沒有真正的解決方案:https://stackoverflow.com/questions/14993664/change-default-date-value-while-entering-time – RealCheeseLord

+0

這基本上是不可能實現的一般。日期表示法只是應用於單元格值的數字格式。您可以通過添加僅包含公式的附加列來部分解決問題。讓我們假設包含您輸入的列是列A,並且單元格C1包含官方零日期的偏移量。然後在B列中使用公式= A1 + $ C $ 1並在整個B列中填入公式。 – moggi

回答

1

這是用於Excel。本實施例中通過A10地方使用來自A1範圍在工作表中的代碼區域以下事件宏:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim rng As Range, rint As Range, r As Range 
    Set rng = Range("A1:A10") 
    Set rint = Intersect(rng, Target) 

    For Each r In rint 
     Application.EnableEvents = False 
      r.Value = DateSerial(Year(Date), Month(Date), r.Value) 
     Application.EnableEvents = True 
    Next r 
End Sub 

因爲它是工作表的代碼,這是非常容易安裝和自動使用:

  1. 右擊近Excel窗口
  2. 選擇查看代碼底部的標籤名稱 - 這帶來了一個VBE窗口
  3. 粘貼東西在並關閉VBE窗口

如果您有任何疑慮,請先在試用工作表上嘗試。

如果保存工作簿,宏將與其一起保存。 如果您正在使用一個版本的Excel更高然後2003,你必須保存 該文件作爲.XLSM而非的.xlsx

要刪除宏:

  1. 彈出窗口VBE如上
  2. 清晰的代碼進行
  3. 關閉VBE窗口

要了解更多關於一般的宏,請參閱:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解更多有關事件宏(工作表的代碼),請參閱:

http://www.mvps.org/dmcritchie/excel/event.htm

宏必須爲此工作啓用!

該代碼將獲取您輸入的值並將其替換爲正確構建的日期。您可以更改範圍以滿足您的需求。

1

@ Gary's Student的解決方案可以按如下方式適用於LibreOffice。

Sub ContentChangedHandler(oChangedRange As Object) 
    Dim oSheet As Object 
    Dim oCheckingRange As Object 
    Dim oIntersectRanges As Object 
    Dim oIntersectRange As Object 
    Dim oData() 
    Dim oRow() 
    Dim i%, j%, k% 
    oSheet = ThisComponent.getSheets().getByIndex(0) 
    oCheckingRange = oSheet.getCellRangeByName("A1:A10").getRangeAddress() 
    oIntersectRanges = oChangedRange.queryIntersection(oCheckingRange) 
    For i = 0 to oIntersectRanges.getCount() - 1 
     oIntersectRange = oIntersectRanges.getByIndex(i) 
     oData() = oIntersectRange.getDataArray() 
     For j = LBound(oData()) To UBound(oData()) 
      oRow() = oData(j) 
      For k = LBound(oRow()) To UBound(oRow()) 
       oRow(k) = CLng(DateSerial(Year(Date), Month(Date), oRow(k))) 
      Next 
     Next 
     oIntersectRange.setDataArray(oData()) 
    Next 
End Sub 

要設置事件,請右鍵單擊工作表選項卡並選擇Sheet Events。將Content changed事件分配給上面的宏。

請確保將格式設置爲日期格式,轉到Format -> Cells,否則它們將顯示爲普通數字。