VBA写入文件是舍入数值 – 如何防止?

在下面的代码中,我遇到了问题,确保文件编写器不会将我的编号舍入到一定的小数位数。 我需要使用一个变体,因为有时值是string,而在其他时间,它是一个数字。

我如何强制它写什么variables是什么? 例如,下面的代码可能会显示0.00038,我想显示确切的值。

Dim MyFile1 As Variant Dim MyNumber as Variant MyFile0 = "C:/myfile.csv" fnum0 = FreeFile() Open MyFile0 For Output As fnum0 MyNumber = 0.0003759656 Print #fnum0, MyNumber 

你的代码很好。 问题在于excel。 当在Excel中打开一个CSV文件,包括通过VBA时,excel将删除一个单元格。 通常情况下,如果它像一个数字超过5个字符,它会用科学记数法表示或四舍五入。

注意你在CSV文件之前或之后要做的是什么,但是这里有一些选项可以防止excel改变你的数据:

在VBA中,使用Workbook.OpenText命令以下列方式之一打开CSV:

– 所有excel单元格作为文本*

– 列存储的数字有很多小数位(注意最多应用30个小数位)

– 一个特定的列存储为文本。

– 这里的选项语法的完整列表http://msdn.microsoft.com/en-us/library/office/bb22351(v=office.12).aspx

您也可以将您的CSV导入到Excel电子表格中,它将为您提供select每列的数据types的选项。 然后对Excel文件运行VBA。

如果你没有在Excel中进行配方,我会build议将该数字存储为文本string。 VBA在需要时自动将数字string转换为数字值。

这很可能是您遇到浮点错误。 他们是非常小的错误,当数字从/到基地10(人)转换到/从基地2(电脑)时发生。 为了您的目的,您需要确定两个值不相等的含义。 这不仅仅是val1 <> val2因为这不会造成微小的错误。 例如,如果你在处理金钱问题,那么你可能不会在乎一分钱的东西。 所以你可以把不平等确定为ABS(val1 - val2) > .001 。 你只需要确定你对平等的宽容是什么,并比较这个标准。

这可能是因为你的号码不是以vba的数字forms存储的,而且当你编写它时,Excel会转换它。 假设你的编号是1.789,你把它写到格式为“GENERAL”的单元格中。 Excel将写入1.79(并认为这是数字,甚至没有格式问题)。

我发现的是,如果将数字转换为小数第一个CDEC(YOURNUMBER),它将正确写入。 为了好的措施,我也确认这个单元格是'.NUMBERFORMAT =“GENERAL”