【问题标题】:Formatting to display time to millisecond value in combobox and linked cell output格式化以在组合框和链接单元格输出中显示时间到毫秒值
【发布时间】:2016-04-29 04:42:56
【问题描述】:

我正在制作一个工作表,该工作表允许用户在预先记录的数据的两个时间值之间过滤数据。 The time format on this data goes down to the tenth of a second (HH:MM:SS.0) and while the combobox list will display all of these values, when one is selected, it is truncated to just the second value.我做了一些查找,发现了很多关于当前时间调用时间到毫秒的信息,但不仅仅是格式化显示。以下是我的组合框代码当前的读取方式:

Private Sub ComboBox21_Change()

With ComboBox21
    .Value = Format(.Value, "hh:mm:ss")
End With

End Sub

我尝试了几个不同的选项,包括在末尾添加“.0”,但没有成功。另外,我注意到进行选择时链接单元格中的值似乎反映了选择本身的内容。我的印象是链接单元格会显示选择的相对数量与可用选择的总数,这就是我真正需要的。有谁知道如何解决这一问题?

【问题讨论】:

  • 看起来不错的答案是here - Display Milliseconds In Excel
  • @ScottHoltzman 将其放在即时窗口中:? format (timeserial(11,24,45.5642),"hh:mm:ss.000") 它仍将数字四舍五入并将.000 放在末尾。

标签: vba excel combobox


【解决方案1】:

Format 函数似乎无法处理毫秒。

我会改用Application.Text 函数。但是这个函数需要第一个参数是数字。所以我们必须对此进行测试:

Private Sub ComboBox21_Change()

 With ComboBox21
  If IsNumeric(.Value) Then
   .Value = Application.Text(CDbl(.Value), "hh:mm:ss.000")
  End If
 End With

End Sub

编辑:

由于我们在此ComboBox_Change 事件中更改ComboBox.Value,因此这将始终运行两次。更好的是:

Dim stopCBEvents As Boolean

Private Sub ComboBox21_Change()

 If Not stopCBEvents Then
  With ComboBox21
   'MsgBox .Value
   If IsNumeric(.Value) Then
    stopCBEvents = True
    .Value = Application.Text(--.Value, "hh:mm:ss.000")
    stopCBEvents = False
   End If
  End With
 End If

End Sub

【讨论】:

  • 像魅力一样工作!谢谢!您知道为什么链接的单元格可能显示所选值而不是该值的索引吗?我发现的一切似乎都暗示不应该是这样。
  • 对于 ActiveX ComboBox 控件,LinkedCell 是“链接到控件值的范围”。根据定义。 support.office.com/en-us/article/…
  • 您可以在Private Sub ComboBox21_Change() ... With ComboBox21... 中使用Me.Range("B2").Value = .ListIndex 以将.ListIndex 放在包含ComboBox 的工作表(Me) 中的某个位置。
【解决方案2】:

你可以这样做:

.Value = Format(.Value, "hh:mm:ss") & Right(Format(.Value * 24 * 60 * 60, "0.0"), 2)

将零的数量和 2 更改为所需的长度。这将是一个字符串,您需要将其转换回数字。您可以通过引用链接的单元格在 excel 中执行此操作:

=--A1

【讨论】:

  • 感谢@Scott Craner,这可以显示十分之一秒的值,但它似乎无限重复它(即 20:10:31.8.8.8.8.8.8..etc)我是不是错过什么了吗?
  • 您是否将公式修改为仅小数点后一位?我将编辑答案。
  • @Scott Craner:这会将.Value 的第一个小数点设为 1/10 秒。这不是真的,因为.Value 只是一天的一小部分。应该是:.Value = Format(.Value, "hh:mm:ss") & Right(Format(.Value * 24 * 60 * 60, "0.0"), 2)
  • @Axel 你是正确的。我正在开会,我回来后会解决它。我错过了。
猜你喜欢
  • 1970-01-01
  • 2021-10-11
  • 2020-09-02
  • 2020-03-15
  • 2018-02-20
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多