[英]VBA: Leading zeros missing in double variables
我编写了一个 VBA 脚本,以将数据从表导出到特定结构的 CSV 文件,作为其他软件的输入。 该脚本有效,但如果 < 1,十进制值会丢失其前导零,例如 1.234 按预期写入,但 0.123 写入为.123。
我不想把它写成字符串,因为我尝试过的每种方法,例如Format(Day(myDate), "00")
都会在 CSV 文件中的值周围创建引号,这与需要此文件的软件不兼容为了。 有没有办法强制变量保留前导零,或者写成不包括引号的字符串?
代码摘录如下,其中 cellValue1 是保存值的变量。
Sub test_export()
Dim txtFile As String, rng1 As Range, rng2 As Range, cellValue1 As Double, i As Integer
Dim myDate As Date, yyyy As Integer, mm As Integer, dd As Integer, hh As Integer, min As Integer, ss As Integer
txtFile = Application.DefaultFilePath & "\test.csv"
Set rng1 = Worksheets("OUTPUT").Range("B8:B103")
Set rng2 = Worksheets("OUTPUT").Range("G8:G103")
Open txtFile For Output As #1
For i = 1 To rng1.Rows.Count
myDate = rng1.Cells(i, 1).Value
yyyy = year(myDate)
mm = month(myDate)
dd = day(myDate)
hh = hour(myDate)
min = minute(myDate)
ss = Second(myDate)
cellValue1 = rng2.Cells(i, 1).Value
Write #1, yyyy, mm, dd, hh, min, ss, cellValue1
Next i
Close #1
End Sub
Write#
语句正在为您插入逗号。 虽然这很方便,但它还插入了您不想要的"
字符串分隔符。
请改用Print#
语句,并自己构建逗号分隔的字符串行:它将完全按照您的需要写入文件。
Dim rowValues(0 To 6)
rowValues(0) = DateTime.Year(myDate)
rowValues(1) = DateTime.Month(myDate)
rowValues(2) = DateTime.Day(myDate)
rowValues(3) = DateTime.Hour(myDate)
rowValues(4) = DateTime.Minute(myDate)
rowValues(5) = DateTime.Second(myDate)
rowValues(6) = rng2.Cells(i, 1).Value2 'Range.Value2 reads a Date value into a Double
Print #1, Join(rowValues, ",")
Format()
可用于简化 output:
Open txtFile For Output As #1
For i = 1 To rng1.Rows.Count
Print #1, Format(rng2.Value, "yyyy,mm,dd,hh,n,ss,") & rng2.Value2
Next i
Close #1
尝试
Write #1, yyyy, mm, dd, hh, min, ss, Format(cellValue1,"#0.000#")
编辑回复
要在没有“的情况下将其安装到 output 试试这个
Print #1, yyyy, mm, dd, hh, min, ss, Format(cellValue1,"#0.000#")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.