.Paste方法无法正常工作/行为与“Ctrl + v”不同

时间:2016-06-15 08:44:02

标签: excel vba excel-vba

我看到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格式为360312.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

现在发生了什么。

  1. 我打开工作簿
  2. 我致电importStuff
  3. 之后我致电divData,无论是否在importStuff内调用
  4. 都无关紧要
  5. 一切都很好
  6. 我再次致电importStuff
  7. 我根本不打电话给divData(如果我这样做,那就没关系)
  8. 我得到了错误的值
  9. 但是,如果我只按Ctrl+v,则插入的值就好了(参见4。))。

    我无法通过Windows shell调用Ctrl+v,因为新工作表对于实际用户是不可见的。

    Plase help!

3 个答案:

答案 0 :(得分:1)

这只是Jochen的,我的评论作为答案发布。我今天也遇到了同样的问题,这就是为什么我要发布这篇帖子。

我将列格式化为文本,导入数据,将格式更改回数字,然后将每个值乘以1.这就是诀窍。

答案 1 :(得分:0)

您可以设置derive

或使用Range.numberFormat,doc here,特别是Range.PasteSpecial( [xlPasteTypes], [xlPasteOperation])xlPasteValuesAndNumberFormats

答案 2 :(得分:0)

我有同样的问题,但是我可以通过以下方法解决它:

range("A1").PasteSpecial(-4142)

似乎excel将“ ---------”视为计算。