本月/年,而不是1900年1月

我得到了设置格式>“date”的单元格范围,默认情况下,当我input任何数字时,它将被转换为date,我input的date和1900年1月。

如何改变它,所以我只会input一天中的数字后,总会得到当前的月份和年份?

如何在LibreOffice Calc中做到这一点?

这是Excel的。 本示例使用从A1A10的范围在工作表代码区域中放置以下事件macros:

 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. select查看代码 – 这会popup一个VBE窗口
  3. 粘贴东西,closuresVBE窗口

如果您有任何疑问,请先在试用工作表上尝试。

如果您保存该工作簿,该macros将与它一起保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除macros:

  1. 调出上面的VBE窗口
  2. 清除代码
  3. closuresVBE窗口

要了解有关macros的更多信息,请参阅:

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

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

要了解有关事件macros(工作表代码)的更多信息,请参阅:

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

macros必须启用这个工作!

代码将获取您input的值并将其replace为正确构build的date。 您可以更改范围以满足您的需求。

@ Gary's Student的解决scheme可以按如下方式适用于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 

要设置事件,请右键单击工作表选项卡并select工作Sheet EventsContent changed事件分配给上面的macros。

一定要格式化单元格作为date,转到Format -> Cells ,否则它们将显示为普通数字。