2012-06-29 31 views
15

Piszę kod vba, który ma usunąć dane z wybranego arkusza excel, otworzyć okno dialogowe wyboru pliku tekstowego, a następnie zaimportować dane z tego pliku tekstowego do pliku ten sam dokładny arkusz, z którego usunąłem dane. Do tej pory mogę otworzyć plik tekstowy tylko w nowym skoroszycie, ale nie mogę go otworzyć na tym samym arkuszu, z którego usunąłem dane. Oto co mi przyszło z tak daleko, będziemy wdzięczni za pomoc:vba: Importowanie pliku tekstowego do arkusza Excela

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 

Dzięki!

Odpowiedz

33

Istnieje wiele sposobów importowania pliku tekstowego do bieżącego arkusza. Oto trzy (w tym metodę używanego powyżej)

  1. Używanie QueryTable
  2. Otwórz plik tekstowy w pamięci, a następnie napisać do bieżącego arkusza i wreszcie stosowanie Tekst jako kolumny w razie potrzeby.
  3. Jeśli chcesz użyć metody, które są aktualnie używanego następnie po otwarciu pliku tekstowego w nowym skoroszycie, wystarczy skopiować go do bieżącego arkusza z wykorzystaniem Cells.Copy

Korzystanie z QueryTable

Oto proste makro, które nagrałem. Zmodyfikuj go zgodnie ze swoimi potrzebami.

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 

Otwórz plik tekstowy w pamięci

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 

Gdy masz dane w tablicy można wyeksportować go do bieżącego arkusza.

Stosując metodę, która już używasz

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 

nawiązanie

Można użyć Application.GetOpenFilename wybrać odpowiedni plik. Na przykład ...

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

wyglądać metody QueryTable jest najbardziej proste, ale czy jest jakiś sposób, aby dodać okno dialogowe do niego więc będę mieć możliwość wyboru plików tekstowych z różnych źródeł? –

+0

Tak. W jednej chwili ... aktualizacja wpisu –

+0

Zaktualizowano wpis :) Zobacz 'FOLLOWUP' –

0

myślę my answer to my own question tutaj jest najprostszym rozwiązaniem, co chce zrobić:

  1. Wybierz komórkę, w której pierwszy wiersz tekstu z pliku powinno być.

  2. Użyj okna dialogowego Data/Get External Data/From File, aby wybrać plik tekstowy do zaimportowania.

  3. Sformatuj zaimportowany tekst zgodnie z wymaganiami.

  4. W oknie Import Data które zostanie otwarte, kliknij Properties...

  5. odznacz pole Prompt for file name on refresh.

  6. Po każdorazowym zmianie pliku zewnętrznego kliknij przycisk Data//.

Uwaga: w twoim przypadku powinieneś chcieć pominąć krok # 5.

+0

Ale zawsze prosi o ponowne wybranie pliku po naciśnięciu odświeżania – Damian

1

można napisać .WorkbookConnection.Delete po .Refresh BackgroundQuery: = False spowoduje to usunięcie pliku tekstowego połączenia zewnętrznego.

Powiązane problemy