我看到excel中发生了很多奇怪的事情,但这可能是最奇怪的。
我想做什么?
我正在从SAP获取数据并希望通过vba将其粘贴到我的Excel工作表中。 (还有其他导出数据的方法,但这是我限制使用的方法。)数据通过SAP放入Windows-Clipboard。然后将它放入最新的excel-Worksheet中(参见Sub importStuff
然后格式化(参见Sub divData
)数据用管道|
分隔,粘贴后看起来像这样(包括空白) ):
| FOO: BAR | 360.000 |
我致电divData
后,它会分成两个单独的列。 (这就是我希望它被格式化的方式)
[SOME_ID: SOME_NAME][360.000]
但是(!)有时数字的格式会搞砸,格式360.000
优于360,000
= 360
。这仅适用于以0
结尾的值。因此360.000
格式为360
,312.312.001.800
格式为312.312.001,80
。
我使用的是德语版的Excel 14.0.7166.5000(32位)。因此.
用于数字分组,,
是小数点。
这是我的代码
Sub importStuff()
dBegin = wsUeb.Range("BeginPlan")
dEnd = wsUeb.Range("EndPlan")
'lots
'of
'other
'SAP-Stuff
SAP_Session.findById("wnd[0]/usr/tabsTABSTRIP_MYTAB/tabpPUSH4/ssub%_SUBSCREEN_MYTAB:ZCO_SUSAETZE_NEW:0400/ctxtP_LAYOUT").Text = "/ZL_UMSPIEXP"
SAP_Session.findById("wnd[0]/tbar[1]/btn[8]").press
SAP_Session.findById("wnd[0]/tbar[1]/btn[45]").press
SAP_Session.findById("wnd[1]/usr/subSUBSCREEN_STEPLOOP:SAPLSPO5:0150/sub:SAPLSPO5:0150/radSPOPLI-SELFLAG[4,0]").Select
SAP_Session.findById("wnd[1]/tbar[0]/btn[0]").press
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Paste
Worksheets(Worksheets.Count).Name = "Plan-Umsaetze " & dBegin & " - " & dEnd
Call divData
End Sub
Sub divData()
ActiveSheet.Columns("A:A").TextToColumns _
DataType:=xlDelimited, _
TextQualifier:=xlTextQualifierNone, _
ConsecutiveDelimiter:=False, _
Other:=True, _
OtherChar:="|"
End Sub
现在发生了什么。
importStuff
divData
,无论是否在importStuff
内调用importStuff
divData
(如果我这样做,那就没关系)但是,如果我只按Ctrl+v
,则插入的值就好了(参见4。))。
我无法通过Windows shell调用Ctrl+v
,因为新工作表对于实际用户是不可见的。
Plase help!
答案 0 :(得分:1)
这只是Jochen的,我的评论作为答案发布。我今天也遇到了同样的问题,这就是为什么我要发布这篇帖子。
我将列格式化为文本,导入数据,将格式更改回数字,然后将每个值乘以1.这就是诀窍。
答案 1 :(得分:0)
您可以设置derive
或使用Range.numberFormat
,doc here,特别是Range.PasteSpecial( [xlPasteTypes], [xlPasteOperation])
或xlPasteValuesAndNumberFormats
答案 2 :(得分:0)
我有同样的问题,但是我可以通过以下方法解决它:
range("A1").PasteSpecial(-4142)
似乎excel将“ ---------”视为计算。