Excel VBA – 存储值在input单元格时更改格式

我有一张表,我需要根据客户端作业ID填写每个客户端作业的一些信息,然后使用VBA中的vlookup来获取信息。

Dim jobID as double, path as String, creationDate as date For i = 2 to 100 jobID = Sheet11.Cells(i, 1).Value path = Application.WorksheetFunction.VLookup(jobID, Sheet9.Range("A:G"), 7, False) creationDate = Application.WorksheetFunction.VLookup(jobID, Sheet9.Range("A:M"), 13, False) Sheet11.Cells(i, 6).Value = creationDate Sheet11.Cells(i, 8).Value = path Next i 

表9中的path看起来像“180,28,60,91,40,178”或“179,143,141,142,178”,并具有“常规”格式。 表9中的创builddate看起来像“2015-11-12 11:44”,并且具有yyyy-mm-dd h:mm自定义date格式。 然而,如图所示,当存储的值被input到表格11中时,一些path被转换成数字,例如“179,143,141,142,178”变成“179143141142178”,尽pipe有些按照我的意图保持为string,例如“180,28,60,91,40,178” 。 大多数date也丢失了时间信息(h:mm信息),并以yyyy-mm-dd格式input到工作表11中,而一些date信息保留了原始格式。

有人可以帮助我维护从date的所有信息,并防止作为string存储的path成为一个数字?

如果你不想格式化单元格,那么这是最简单的方法

 Sheet11.Cells(i, 8).Value = "'" & path 

Excel正在尽最大努力修复它认为是数据错误的内容。

一个标准的千位分隔符每三位数字就会有一个逗号。 这是表示数字的标准方法。 179,143,141,142,178可以被视为一个实数。

当Excel看到像180,28,60,91,40,178这样的值时,它不知道如何处理它,因为用逗号分隔的两个数字不是expression数字值的标准方法,所以它将它们视为文本。

如果您还没有手动更改单元格alignment方式,请加宽列并查看值。 默认的文本值在单元格中左alignment; 数值和date(被认为是数字)默认情况下在单元格中是正确alignment的。 这将很快告诉你什么Excel“认为”是一个数字,它的“想法”是文本。

将目标path格式设置为文本而不是常规。 格式化目标date以包含时间值。

 Dim jobID as double, path as String, creationDate as date For i = 2 to 100 jobID = Sheet11.Cells(i, 1).Value path = Application.WorksheetFunction.VLookup(jobID, Sheet9.Range("A:G"), 7, False) creationDate = Application.WorksheetFunction.VLookup(jobID, Sheet9.Range("A:M"), 13, False) Sheet11.Cells(i, 6).NUMBERFORMAT = "yyyy-mm-dd h:mm" Sheet11.Cells(i, 6).Value = creationDate Sheet11.Cells(i, 8).NUMBERFORMAT = "@" Sheet11.Cells(i, 8).Value = path Next i 

附录:

我想到你的源码可能是文本和数字的混搭。 find源代码行并使用它来拉取Range.Text属性可能更适合。

 Dim jobID as double, path as String, creationDate as date, rw as variant For i = 2 to 100 jobID = Sheet11.Cells(i, 1).Value rw = Application.Match(jobID, Sheet9.Columns("A"), 0) if not iserror(rw) then path = Sheet9.Cells(rw, "G").TEXT 'this will return whatever is displayed; not the underlying value creationDate = Sheet9.Cells(rw, "M").VALUE2 Sheet11.Cells(i, 6).NUMBERFORMAT = "yyyy-mm-dd h:mm" Sheet11.Cells(i, 6).Value = creationDate Sheet11.Cells(i, 8).NUMBERFORMAT = "@" Sheet11.Cells(i, 8).Value = path end if Next i