我获得了设置格式的单元格范围> “日期”,默认情况下,当我输入任何数字时,它会在我输入的日期和1900年1月转换为日期。
如何改变它,以便在输入一天的数字后,我会在当前的月份和年份得到它?
如何在LibreOffice Calc中执行此操作?
答案 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
因为它是工作表代码,所以很容易安装和自动使用:
如果您有任何疑虑,请先在试用工作表上试用。
如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx
删除宏:
要了解有关宏的更多信息,请参阅:
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
将单元格格式化为日期,否则它们将显示为普通数字。