Excel VBA – 用于分隔工作表的文本文件:对象variables或未设置块variables

此代码(源代码)用于获取多个文本文件,全部位于同一个文件夹中,并在每个文件夹中创build一个单独的工作表。 它适用于一个文件,但是当在第二个文件上执行时,我会在标题中看到错误信息。

我相信所有的variables设置,我已经尝试在循环中设置variables,随着移动增量周围,并更改xTempWb.Sheets(1).Copy xTempWb.Sheets(1).Add 。 我也咨询了一些堆栈溢出问题和MSDN文档。

它跳转到error handling程序的行: xTempWb.Sheets(1).Copy

 Sub CombineTextFiles() 'update by ExtendOffice 20151015 Dim xFilesToOpen As Variant Dim I As Integer Dim xWb As Workbook Dim xTempWb As Workbook Dim xDelimiter As String Dim xScreen As Boolean On Error GoTo ErrHandler xScreen = Application.ScreenUpdating Application.ScreenUpdating = False xDelimiter = "|" xFilesToOpen = Application.GetOpenFilename("Text Files (*.txt), *.txt", , "Kutools for Excel",, True) If TypeName(xFilesToOpen) = "Boolean" Then MsgBox "No files were selected", . "KuTools for Excel" GoTo ExitHandler End If I = 1 Set xTembWb = Workbooks.Open(xFilesToOpen(I)) xTempWb.Sheets(1).Copy Set xWb = Application.ActiveWorkbook xTempWb.Close False xWb.Worksheets(I).Columns("A:A").TextToColumns _ Destination:=Range("A1"), DataType = xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=False, SemiColon:=False, _ Comma:=False, Space:=False, _ Other:=True, OtherChar:="|" Do While I < UBound(xFilesToOpen) I = I + 1 Set xTembWb = Workbooks.Open(xFilestoOpen(I)) With xWb xTempWb.Sheets(1).Move after:=.Sheets(.Sheets.Count) .Worksheets(I).Columns("A:A").TextToColumns _ Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=False, Semicolon:=False, _ Comma:=False, Space:=False, _ Other:=True, OtherChar:=xDelimiter End With Loop ExitHandler: Application.ScreenUpdating = xScreen Set xWb = Nothing Set xTempWb = Nothing Exit Sub ErrHandler MsgBox Err.Description, , "KuTools For Excel" Resume ExitHandler End Sub End Sub enter code here 

上面的代码看起来有几个问题,还有一些不明确的方面。 获取xFilesTopOpen将您的代码调整到下面。

还请注意,有一个地方,你拼xTempWb xTembWB拼写错误。 在代码上方使用Option Explicit将有助于确保所有variables都按需要命名。

 Set xWB = ThisWorkbook Dim wbCounter as Integer For wbCounter = LBound(xFilesToOpen) to UBound(xFilesToOpen) Set xTempWb = Workbooks.Open(xFilesToOpen(I)) xTembWb.Sheets(1).Copy xWB.Worksheets(xWB.Worksheets.Count) Dim ws as Worksheet Set ws = Activesheet ws.Columns("A:A").TextToColumns _ Destination:=Range("A1"), DataType = xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=False, SemiColon:=False, _ Comma:=False, Space:=False, _ Other:=True, OtherChar:="|" xTempWb.Close False Next 

使用

Option Explicit


您已经声明Dim xTempWb As Workbook ,并且将您的文本文件Set xTembWb = Workbooks.Open(xFilesToOpen(I)) ,然后尝试再次使用xTempWb

这是问题。