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?

查看:24
本文介绍了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 tokenA/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.2916666700

";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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆