如何在 VBA 中检索工作表中格式化的 Excel 单元格值?

Posted

技术标签:

【中文标题】如何在 VBA 中检索工作表中格式化的 Excel 单元格值?【英文标题】:How do I retrieve an Excel cell value in VBA as formatted in the WorkSheet? 【发布时间】:2011-08-03 20:31:15 【问题描述】:

我需要在数字列表中保留前导零。数字是这样添加的(在循环中,但这只是使用 (1, 1) 的示例:

Set cel = Sheet.worksh.Cells(1, 1)
cel.ColumnWidth = 10
cel.Value = e.Name
cel.NumberFormat = "0000"

e.Name 是数字,类似于“0720”。这在工作表上显示得很好,但如果我这样做:

Msgbox Sheet.worksh.Cells(1, 1).Value

我得到“720”。我需要它是“0720”,我知道我可以使用Len() 检查并以这种方式添加零,但我想知道是否有更直接的 Range 对象方法可以为我做到这一点。

【问题讨论】:

【参考方案1】:

您将数字与其文本表示混淆了。

您想要.Text 属性,而不是.Value,而是you might have problems with it。

【讨论】:

小心使用 text 属性。如果单元格看起来像这样“####”,那就是它会向你回击的内容。使用 Lance Roberts 的方法更安全。只是经验的警告。 如果情况允许,您可以在单元格上调用.Text 方法之前添加Columns("A:A").EntireColumn.AutoFit【参考方案2】:

使用这个:

Msgbox Format(Sheet.worksh.Cells(1,1).Value, "0000")

【讨论】:

【参考方案3】:

如果您不确定格式是什么,那就更好了:

消息框格式(Sheet.worksh.Cells(1,1).Value, Sheet.worksh.Cells(1,1).NumberFormat)

【讨论】:

如果 NumberFormat 为 General,这将无法按预期工作 - 调用 Format("397","General") 时,您会得到“Ge0eral”作为结果。 问题是397作为文本提供给Format(),而不是数字?【参考方案4】:

聚会有点晚了,但您总是可以尝试分别调用值和数字格式,如下所示:

Msgbox Application.WorksheetFunction.Text(Sheet.worksh.Cells(1, 1).Value, Sheet.worksh.Cells(1, 1).NumberFormat)

【讨论】:

以上是关于如何在 VBA 中检索工作表中格式化的 Excel 单元格值?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Excel VBA 从 aspx 页面表中检索数据

在excel VBA中单击listbox_click()后如何检索复选框的复选框

VBA 如何批量将单元格复制到另一个工作表中

Excel VBA:如何将代码执行限制在工作表中

如何用EXCEL VBA编写模糊查询程序,并将结果显示在工作表中

Excel VBA如何填充不同工作表中的值