首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vba powerpoint格式化%和$

vba powerpoint格式化%和$
EN

Stack Overflow用户
提问于 2016-04-27 22:52:14
回答 1查看 174关注 0票数 0

我对MSOffice如何处理数字格式有一个挑战。

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

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

我将数据从dB中提取到CSV文件中,并且正在对PPT模板中的某些文本标记(例如@@ReplaceText@@)执行.Replace。(网站上有一个很好的帖子,关于如何做到这一点,我现在似乎找不到)

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

例如,我可以在CSV文件中看到以下值:“增加市场份额”、"1234“、"$10”、"28%“。

我希望VBA将这一切都当作文本处理,这样%和$字符就是maintained...but...Excel将数据作为数字读取,并保留$或%符号。PowerPoint去掉了$或%符号,并将28%转换为0.28,将$10转换为10。

根据上面的问题,在Excel中将"=""28%"""添加到.csv中,将在PowerPoint中给出确切的文字文本。

在强制space以文本字符串形式读取数据时,添加前面的Excel或'字符是有效的。但是PowerPoint忽略了它,行为与上面一样。例如28%到0.28。

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

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

如果语句因为$或%不存在于VBA看到的内容中而不起作用(例如,$或%字符已经消失)

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

因此,我的问题是,如何强制VBA将CSV文件中的内容作为文本,并忽略将$或%作为特殊字符处理,而只将它们保留在CSV中?

EN

回答 1

Stack Overflow用户

发布于 2016-04-28 01:05:42

您没有具体指定要对CSV文件中的数据执行什么操作,但我假定您正在尝试在VBA中打开该文件。

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

代码语言:javascript
复制
Workbooks.OpenText fileName:="directory", DataType:=xlDelimited, Comma:=True

如果希望VBA仅将数据作为文本处理,则可以使用不同的方法打开CSV文件。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36893436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档