Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel Excal VBA-格式(“7A”和“00”)输出;00“;而格式(“7B”和“00”)的结果是;7A";。为什么它们不同?_Excel_Vba_Excel Formula - Fatal编程技术网

Excel Excal VBA-格式(“7A”和“00”)输出;00“;而格式(“7B”和“00”)的结果是;7A";。为什么它们不同?

Excel Excal VBA-格式(“7A”和“00”)输出;00“;而格式(“7B”和“00”)的结果是;7A";。为什么它们不同?,excel,vba,excel-formula,Excel,Vba,Excel Formula,我试图列出每个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(&q

我试图列出每个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
除具有“A”的十六进制值外,如“7A”、“6A”、“5A”等。结果为“00”。 对中间窗口的进一步检查确认Format()函数会执行此操作

? Format("7B","00") 'desired output
7B
? Format("7A","00") 'not expected output
00
这是一个错误还是我遗漏了什么?为什么他们的行为有所不同? (注意:我的问题的重点是Format()的“奇怪”行为,而不是我的整个代码。)

是一个复杂的函数,它可以格式化各种内容,包括日期和数字

当您向其传递字符串时(其中
“7A”
“7B”
是),它会尝试查看它们是否可以转换为数字(返回True)或日期(返回True)。如果可以,它将转换它们,然后应用格式

IsDate()
“7A”
返回True,这是因为“7A”是时间值“早上7点”(7am)的有效文本表示形式。
这又是因为,
A/P
的短版本将“am/pm”指示符返回为“A/P”:

?格式$(#07:00:00#,“hA/P”)'=>7A
? 格式$(#17:00:00,#,“hA/P”)'=>5P
因此字符串“7A”首先被转换成一个值
#12/30/1899 07:00:00#
(零日期,早上7点)。该值的数字表示形式为
0.29166667
,当按照“00”格式进行格式化时,会舍入为“00”


另一方面,“7B”不是一个
IsDate()
,因此格式输出它时不做任何更改,就像输出没有其他含义的字符串一样


尽管您根本不需要
Format()
函数,但只需要

=右$(“00”和十六进制$(i),2)

“7B”
是一个字符串,所以Format按原样输出它<代码>“7A”也是一个字符串,但在格式化之前,Format会将其转换为
0.29166667
,我不知道为什么。在任何情况下,如果你想格式化一个数字,那么就传递一个数字,而不是一个字符串。出于某种原因,它假设
7A
7am
,即
0.291667
,因此它返回
00
格式。啊,是的,“7A”是。对于
“P”
/
“PM”
也一样。如果将单元格格式化为文本,则使用
应用程序。文本
而不是
格式
,则不会发生错误。@ScottCraner既不需要
格式
也不需要
应用程序。首先需要文本
<代码>右$(“00”和十六进制(i),2)
就足够了。