Excal VBA-Format(&Quot;7A&Quot;,&Quot;00&Quot;)将&Quot;00&Quot;输出&Quot;00;,而Format(&Quot;7B&Quot;,&Quot;00&Quot;)结果输出为&Quot;7A&Quot;所需的输出。它们为什么不同呢? [英] Excal VBA - Format("7A", "00") outputs "00" while Format("7B", "00") results to the desired output of "7A". Why are they different?
本文介绍了Excal VBA-Format(&Quot;7A&Quot;,&Quot;00&Quot;)将&Quot;00&Quot;输出&Quot;00;,而Format(&Quot;7B&Quot;,&Quot;00&Quot;)结果输出为&Quot;7A&Quot;所需的输出。它们为什么不同呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试列出每个Excel行从7F到00的十六进制值。我是通过执行以下代码实现的:
Sub ListDownHex()
Dim StartValue, i As Integer
Dim nRow As Long
Dim sh As Worksheet
Set sh = ActiveSheet
StartValue = 127 'memory location of 8051 RAM
nRow = 4
For i = StartValue To 0 Step -1
sh.Range("A" & nRow) = Format(Right$("00" & Hex(i), 2), "00")
nRow = nRow + 1
Next i
End Sub
除祸不单行值具有&Q;A&Q;LIKE、&Q;7A&Q;、&Q;6A&Q;、&Q;5A&Q;等之外,结果为&Q;00&Q;。 进一步检查中间窗口确认Format()函数执行此操作。
? Format("7B","00") 'desired output
7B
? Format("7A","00") 'not expected output
00
这是错误还是我遗漏了什么?为什么他们的行为有所不同? (注意:我的问题焦点是";奇异";format()行为,而不是我的整个代码。)
推荐答案
Format()
是一个复杂的函数,可设置包括的所有内容、日期和数字的格式。
"7A"
和"7B"
是)时,它会尝试查看它们是否可以转换为数字(IsNumeric()
返回True)或日期(IsDate()
返回True)。如果可以,它会转换它们,然后才会应用格式设置。
IsDate()
返回"7A"
的True,这是因为";7A";是早上(上午7am)时间值";7的有效文本表示形式。
这又是因为AM/PM
formatting token、A/P
的简短版本将";am/pm";指示符返回为";a/p";:
? Format$(#07:00:00#, "hA/P") ' => 7A
? Format$(#17:00:00#, "hA/P") ' => 5P
因此,字符串&qot;7A";首先转换为Date
值#12/30/1899 07:00:00#
(零日期,上午7点)。值数字表示为0.29166667
,当根据0.29166667
格式设置格式时,将舍入为0.29166667
00
";7B";则不是IsDate()
,因此格式输出它时不会像对没有其他含义的字符串那样进行更改。
In reality不过,您根本不需要Format()
函数,您只需要
= Right$("00" & Hex$(i), 2)
这篇关于Excal VBA-Format(&Quot;7A&Quot;,&Quot;00&Quot;)将&Quot;00&Quot;输出&Quot;00;,而Format(&Quot;7B&Quot;,&Quot;00&Quot;)结果输出为&Quot;7A&Quot;所需的输出。它们为什么不同呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文