2017-08-30 124 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,否则它们将显示为普通数字。