2012-06-29 4 views
15

Я пишу код vba, который должен удалить данные на выбранном листе excel, открыть диалоговое окно для выбора текстового файла, а затем импортировать данные из этого текстового файла в тот же самый точный лист, с которого я удалил данные. Пока я могу только открыть текстовый файл в новую книгу, но не могу открыть его на том же листе, с которого я удалил данные. Вот что я пришел с до сих пор, по достоинству оценят вашу помощь:vba: Импорт текстового файла в лист excel

Dim Filt As String 
Dim FilterIndex As Integer 
Dim Title As String 
Dim FileName As Variant 

Filt = "Cst Files (*.prn),*.prn" 
Title = "Select a cst File to Import" 
FileName = Application.GetOpenFilename(FileFilter:=Filt, Title:=Title) 

If FileName = False Then 
MsgBox "No File Was Selected" 
Exit Sub 
End If 

With Application.ActiveSheet 
    Cells.Select 
Selection.QueryTable.Delete 
Selection.ClearContents 
End With 

Workbooks.Open FileName 

Спасибо!

ответ

33

Есть много способов импортировать текстовый файл на текущий лист. Вот три (включая метод, который вы используете выше)

  1. Используя QueryTable
  2. Откройте текстовый файл в памяти, а затем записать текущий лист и, наконец, применяя текст на столбцы, если требуется.
  3. Если вы хотите использовать метод, который вы сейчас используете, то после открытия текстового файла в новой книге, просто скопируйте его к текущему листу с помощью Cells.Copy

Используя QueryTable

Вот простой макрос, который я записал. Пожалуйста, внесите изменения в соответствии с вашими потребностями.

Sub Sample() 
    With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;C:\Sample.txt", Destination:=Range("$A$1") _ 
     ) 
     .Name = "Sample" 
     .FieldNames = True 
     .RowNumbers = False 
     .FillAdjacentFormulas = False 
     .PreserveFormatting = True 
     .RefreshOnFileOpen = False 
     .RefreshStyle = xlInsertDeleteCells 
     .SavePassword = False 
     .SaveData = True 
     .AdjustColumnWidth = True 
     .RefreshPeriod = 0 
     .TextFilePromptOnRefresh = False 
     .TextFilePlatform = 437 
     .TextFileStartRow = 1 
     .TextFileParseType = xlDelimited 
     .TextFileTextQualifier = xlTextQualifierDoubleQuote 
     .TextFileConsecutiveDelimiter = False 
     .TextFileTabDelimiter = True 
     .TextFileSemicolonDelimiter = False 
     .TextFileCommaDelimiter = True 
     .TextFileSpaceDelimiter = False 
     .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1) 
     .TextFileTrailingMinusNumbers = True 
     .Refresh BackgroundQuery:=False 
    End With 
End Sub 

Откройте текстовый файл в памяти

Sub Sample() 
    Dim MyData As String, strData() As String 

    Open "C:\Sample.txt" For Binary As #1 
    MyData = Space$(LOF(1)) 
    Get #1, , MyData 
    Close #1 
    strData() = Split(MyData, vbCrLf) 
End Sub 

После того, как у вас есть данные в массиве вы можете экспортировать его в текущем листе.

Используя метод, который вы уже используете

Sub Sample() 
    Dim wbI As Workbook, wbO As Workbook 
    Dim wsI As Worksheet 

    Set wbI = ThisWorkbook 
    Set wsI = wbI.Sheets("Sheet1") '<~~ Sheet where you want to import 

    Set wbO = Workbooks.Open("C:\Sample.txt") 

    wbO.Sheets(1).Cells.Copy wsI.Cells 

    wbO.Close SaveChanges:=False 
End Sub 

Followup

Вы можете использовать Application.GetOpenFilename выбрать соответствующий файл. Например ...

Sub Sample() 
    Dim Ret 

    Ret = Application.GetOpenFilename("Prn Files (*.prn), *.prn") 

    If Ret <> False Then 
     With ActiveSheet.QueryTables.Add(Connection:= _ 
     "TEXT;" & Ret, Destination:=Range("$A$1")) 

      '~~> Rest of the code 

     End With 
    End If 
End Sub 
+0

Посмотрите, как метод QueryTable является самым прямым, но есть ли способ добавить к нему диалоговое окно, поэтому у меня будет возможность выбирать текстовые файлы из разных источников? –

+0

Да. Один момент ... обновление сообщения –

+0

Обновлено сообщение :) Смотрите 'FOLLOWUP' –

0

Я думаю my answer to my own question здесь самое простое решение, что вы пытаетесь сделать:

  1. Выберите ячейку, в которой первая строка текста из файла должен быть.

  2. Используйте диалоговое окно Data/Get External Data/From File, чтобы выбрать текстовый файл для импорта.

  3. Формат импортируемого текста по мере необходимости.

  4. Import Data В открывшемся диалоговом окне нажмите на Properties...

  5. снимите флажок Prompt for file name on refresh коробки.

  6. При изменении внешнего файла нажмите кнопку Data/Get External Data//Refresh All.

Примечание: в вашем случае вам, вероятно, необходимо пропустить шаг №5.

+0

Но он всегда просит вас снова выбрать файл, когда вы нажимаете обновление – Damian

1

вы можете написать .WorkbookConnection.Delete после .refresh BackgroundQuery: = False это будет удалить текстовый файл внешнего соединения.

Смежные вопросы