vba powerpoint格式化%和$

时间:2016-04-27 14:52:14

标签: excel excel-vba csv powerpoint powerpoint-vba vba

我对MSOffice如何处理数字格式提出了挑战。

虽然我认为这是类似的根本原因:Stop Excel from automatically converting certain text values to dates

它不同,因为这不是日期格式,这涉及Excel和带VBA的PowerPoint。

我有数据表明我将dB从CSV文件中删除,而我正在对PPT模板中的某些文本标记(例如@@ ReplaceText @@)进行.Replace。 (网站上有关于如何做到这一点的好帖子,我现在似乎无法找到)

我需要处理一个跟踪指标的字段,此字段是我的dB中的文本,但它可以包含特殊字符 - 特别是$和%。

e.g。我可以在CSV文件中看到以下值: "增加市场份额",#34; 1234"," $ 10"," 28%"

我希望VBA将此全部视为文本,因此保留%和$字符...但是...... Excel将数据作为数字读取并保留$或%符号。 PowerPoint删除$或%符号并将28%转换为0.28和10到10。

根据上述问题,将"=""28%"""添加到Excel中的.csv,将在PowerPoint中为我提供准确的文字文本。

添加前面的space'字符可以强制Excel将数据作为文本字符串读取。但PowerPoint忽略它并且行为与上面相同。例如28%至0.28。

我尝试使用FORMAT如下,但由于数据是可变的,我不知道应用哪种情况。

sCurrentText = Format(sCurrentText, "$#") 要么 sCurrentText = Format(sCurrentText, "0.0%")

如果声明不起作用,因为VBA看到的$或%不存在(例如$或%字符已经消失)

If sCurrentText Like "*$*" ThenIf sCurrentText Like "*%" Then

所以我的问题是如何强制VBA将CSV文件中的内容作为文本并忽略处理$或%作为特殊字符并将其保留在CSV中?

1 个答案:

答案 0 :(得分:0)

您没有指定要对CSV文件中的数据做什么,但我假设您正在尝试在VBA中打开该文件。

如果您使用OpenText打开CSV文件(如下所示),Excel将自动以其认为合适的格式解析数据。例如:

Workbooks.OpenText fileName:="directory", DataType:=xlDelimited, Comma:=True

如果您希望VBA将数据处理为您可以根据需要使用的文本,则可以使用其他方法打开CSV文件。

Sub OpenCSVFile()
Dim ff As Long, iRow As Long, iCol As Long
Dim FilePath As String
Dim FileBuffer As String            'Entire CSV file as one string
Dim LineSeparatedFile() As String   'Array of data separated into lines
Dim LineData() As String            'Array of comma separated values for that line

ff = FreeFile
Open FilePath For Binary Access Read As #ff
FileBuffer = Space$(LOF(ff))
Get #ff, , FileBuffer
Close #ff
LineSeparatedFile = Split(txtBuffer, vbCrLf)

For iRow = 0 To UBound(LineSeparatedFile)
    LineData = Split(LineSeparatedFile(i), ",")
    For iCol = 0 To UBound(LineData)
        'Code to do something with each entry.
        'Eg. print to cell as text
        ThisWorkbook.Sheets(1).Cells(iRow + 1, iCol + 1).NumberFormat = "@"
        ThisWorkbook.Sheets(1).Cells(iRow + 1, iCol + 1).Value = LineData(iCol)
    Next iCol
Next iRow
End Sub