当前月/年而不是1900年1月

时间:2017-08-30 09:05:22

标签: excel libreoffice-calc

我获得了设置格式的单元格范围> “日期”,默认情况下,当我输入任何数字时,它会在我输入的日期和1900年1月转换为日期。

如何改变它,以便在输入一天的数字后,我会在当前的月份和年份得到它?

如何在LibreOffice Calc中执行此操作?

2 个答案:

答案 0 :(得分:1)

这是Excel。此示例使用 A1 A10 的范围将以下事件宏放在工作表代码区域中:

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窗口
  4. 如果您有任何疑虑,请先在试用工作表上试用。

    如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除宏:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 要了解有关宏的更多信息,请参阅:

      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 :(得分: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将单元格格式化为日期,否则它们将显示为普通数字。