0

我创造了,

SpinButton1用于SpinButton2用于来自SpinButton1的
TextBox1和来自SpinButton2TextBox2

SpinButton1中的“ E2 ”和SpinButton2中的“ F2 ” 。

当我将“E2”更改为 yyyy 格式时,它会将值从2022 “F2”更改为mmmmm格式的1905,它不会改变任何内容。

如何将“ G2 ”创建为yyyy-mmyyyy-mmm格式?

它看起来像这样

Private Sub SpinButton1_Change()

SpinButton1.Max = 2030
SpinButton1.Min = 2021
SpinButton1.SmallChange = 1
TextBox1.Value = SpinButton1.Value

End Sub

Private Sub SpinButton2_Change()

Dim Mths As Variant
  SpinButton2.Max = 11
  SpinButton2.Min = 0
  Mths = Array("Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec")

  TextBox2.Text = Mths(SpinButton2.Value)

End Sub

Private Sub TextBox1_Change()

ActiveSheet.Range("E2") = SpinButton1.Value

End Sub

Private Sub TextBox2_Change()

ActiveSheet.Range("F2") = TextBox2.Text

End Sub
4

1 回答 1

2

当我将“E2”更改为 yyyy 格式时,它会将值从 2022 更改为 1905

数值“1”传递给具有“短日期”格式的单元格,将返回01.01.1900。就是这样,因为 Excel 将其解释为从约定的开始时间 01.01.1900 开始经过的天数。

在您的情况下,您传递的值为 2022,因此 Excel 计数:01.01.1900 + 2022 天= 14.07.1905。

"F2" 作为 mmm 或 mm 格式,它不会改变任何内容。

类似的事情 - 你传递一个字符串值,所以 Excel 不知道这是否应该是一年中的一个月。

解决方案是以“yyyy-mm-dd”格式构建日期,并将输出单元格的格式设置为类似日期的格式。

最后,解决您的问题:

  1. 我会使用额外的程序来构建日期:

     Private Sub MakeDate(sp1Val as String, sp2Val As String)
     Dim tempDate As Date
    
     tempDate = DateValue(sp1Val & "-" & sp2Val + 1 & "-" & 1)
    
     With Range("G2")
         .NumberFormat = "yyyy-mmm"
         .Value = tempDate
     End With
    
     End Sub
    
  2. 然后在两个 SpinButtonX_Change() 触发器中调用此过程,如下所示:

     Private Sub SpinButton2_Change()
     Dim Mths As Variant
     SpinButton2.Max = 11
     SpinButton2.Min = 0
     Mths = Array("Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec")
    
     Call MakeDate(SpinButton1.Value, SpinButton2.Value)
    
     End Sub
    

请注意,您将 SpinButton2 的值作为整数而不是字符串传递。您从 0 开始索引,因此您必须在构建日期时放入sp2Val + 1(正如我在代码中所做的那样)。

希望我帮助你:)

于 2021-08-28T10:03:40.680 回答