格式化Excel的代码适用于第一个文件但不适用于第二个文件

时间:2015-10-07 16:29:57

标签: excel access-vba

我有三个内容和结构非常相似的Excel文件。在我可以使用它们之前,我需要对文件应用许多格式化步骤。使用Access VBA,我开发了一些代码来删除某些行并对数据执行TextToColumns函数。

此代码适用于第一个电子表格。但是,我看到第二个错误:

  

运行时错误'91':对象变量或未设置块变量

这发生在代码的Selection.TextToColumns ...行(即上面的操作对第二个电子表格执行正常)。

有关为何发生这种情况的任何想法?

在审核this post之后,我可能需要在With之前添加TextToColumns,或者以不同的方式定义范围。但是我缺乏VBA知识变得非常明显!

Private Sub FormatFile(sPath As String)

    Dim oExcel As Excel.Application
    Dim owb As Workbook
    Dim oWS As Worksheet

    Dim sFile As String
    Dim sDirectory As String
    Dim rng As Range

    Set oExcel = New Excel.Application
    Set owb = oExcel.Workbooks.Open(sPath)
    Set oWS = owb.Sheets(1)
    Debug.Print oWS.Name

    oExcel.Visible = False

    DoCmd.SetWarnings False

    sDirectory = fGetDirectory(sPath)
    sFile = fGetFileName(sPath)

        oWS.Rows(5).Delete
        oWS.Rows(3).Delete
        oWS.Rows(2).Delete
        oWS.Rows(1).Delete
        DeleteLastRow oWS.Columns("A")

          oWS.Columns("A:A").Select
        Selection.TextToColumns Destination:=oWS.Range("A1"), DataType:=xlDelimited, TextQualifier:=-4142, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True                   


    owb.Save
    owb.Close
    oExcel.Quit
    Set owb = Nothing
    Set oWS = Nothing
    Set rng = Nothing

    Debug.Print "created file " & sFile

    DoCmd.SetWarnings True

    Set oExcel = Nothing

End Sub

1 个答案:

答案 0 :(得分:1)

这可能与使用.Select(建议你avoid using)有关。

更改行

oWS.Columns("A:A").Select
        Selection.TextToColumns Destination:=oWS.Range("A1"), DataType:=xlDelimited, TextQualifier:=-4142, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True   

oWS.Columns("A:A").TextToColumns Destination:=oWS.Range("A1"), DataType:=xlDelimited, TextQualifier:=-4142, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="|", FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True   

可能会发生的是,选择会以某种方式取消选择,因此在使用选择时,它不会"那里"。