使用VBA宏将数据导出到Excel时格式化问题

时间:2017-11-14 17:20:07

标签: excel vba excel-vba qlikview

我使用下面的VBS代码将一个图表(从QlikView)导出到excel。 原因我正在使用数字格式='@'并粘贴特殊,因为如果我不使用它,那么图表中的值如'22001E-07'将被转换为2.20E-03

sub GPOTest1
set oXL=CreateObject("Excel.Application") 
oXL.visible=True 
oXL.Workbooks.Add
aSheetObj=Array("CH01")
for i=0 to UBound(aSheetObj)
oXL.Sheets.Add   
Set oSH = oXL.ActiveSheet
oSH.Range("A1").Select   
Set obj = ActiveDocument.GetSheetObject(aSheetObj(i))

obj.CopyTableToClipboard True
oSH.Columns("B").NumberFormat = "@" ‘In “B” column I get values like 22001E-07
oSH.PasteSpecial -4163

sCaption=obj.GetCaption.Name.v
set obj=Nothing     
oSH.Rows("1:1").Select
oXL.Selection.Font.Bold = True       
oSH.Cells.Select
oXL.Selection.Columns.AutoFit 
oSH.Range("A1").Select     
oSH.Name=left(sCaption,30)   
set oSH=Nothing  
next
set oXL=Nothing
end sub 

第一次运行后,第二次收到消息

  

Worksheet类的PasteSpecial方法失败

参考以下链接,问题仍然存在: use macro to convert number format to text in Excel

1 个答案:

答案 0 :(得分:0)

您不应系统地创建Excel实例。您的代码保持Excel打开状态。 Excel打开后,下一次,您可以使用GetObject获取对它的引用。请参阅下面代码中采用的方法,其中我还简化了几个方面:

Sub GPOTest1()
    On Error Resume Next
    Set oXL = CreateObject("Excel.Application")
    If oXL Is Nothing Then
        Set oXL = GetObject(Class:="Excel.Application")
    End If
    On Error GoTo 0

    oXL.Visible = True

    Set oWB = oXL.Workbooks.Add
    aSheetObj = Array("CH01")

    For i = 0 To UBound(aSheetObj)
        Set oSH = oWB.Sheets.Add

        Set obj = ActiveDocument.GetSheetObject(aSheetObj(i))
        obj.CopyTableToClipboard True

        oSH.Columns("B").NumberFormat = "@" 'In “B” column I get values like 22001E-07
        oSH.PasteSpecial -4163

        oSH.Rows("1:1").Font.Bold = True
        oSH.Columns.AutoFit
        oSH.Range("A1").Select
        oSH.Name = Left(obj.GetCaption.Name.v, 30)

        Set oSH = Nothing
        Set obj = Nothing
    Next

    Set oXL = Nothing
End Sub