2012-06-29 17 views
15

Escribo un código vba que supone eliminar los datos en una hoja de Excel seleccionada, abrir un cuadro de diálogo para la selección de archivos de texto y luego importar los datos de ese archivo de texto a la la misma hoja exacta de la que he eliminado los datos. Hasta ahora, solo puedo abrir el archivo de texto en un nuevo libro de trabajo, pero no puedo abrirlo en la misma hoja de la que he eliminado los datos. Aquí es lo que vine con hasta ahora, apreciarán su ayuda:vba: Importación de archivo de texto en la hoja de 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 

Gracias!

Respuesta

33

Hay muchas formas de importar archivos de texto a la hoja actual. Aquí están tres (incluido el método que está utilizando anterior)

  1. El uso de un
  2. Abrir el archivo de texto QueryTable en la memoria y luego escribir en la hoja actual y, finalmente, la aplicación de Texto en columnas si es necesario.
  3. Si desea utilizar el método que está utilizando actualmente a continuación, después de abrir el archivo de texto en un nuevo libro, simplemente copiarlo en la hoja actual usando Cells.Copy

El uso de un QueryTable

Aquí hay una macro simple que grabé. Por favor modifíquelo para satisfacer sus necesidades.

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 

Abrir el archivo de texto en la memoria

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 

Una vez que tenga los datos de la matriz puede exportarlo a la hoja actual.

Usando el método que ya está utilizando

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

Puede utilizar el Application.GetOpenFilename para elegir el archivo correspondiente. Por ejemplo ...

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

Parece que el método QueryTable es el más simple pero ¿hay alguna forma de agregarle un cuadro de diálogo, así que tendré la opción de elegir archivos de texto de diferentes fuentes? –

+0

Sí. Un momento ... actualizando la publicación –

+0

Actualizada la publicación :) Ver 'SEGUIMIENTO ' –

0

creo my answer to my own question aquí es la solución más sencilla de lo que está tratando de hacer:

  1. Seleccione la celda en la primera línea de texto del archivo debe ser.

  2. Utilice el cuadro de diálogo Data/Get External Data/From File para seleccionar el archivo de texto que desea importar.

  3. Formatee el texto importado según sea necesario.

  4. En los Import Data de diálogo que se abre, haga clic en Properties...

  5. Desactive la casilla Prompt for file name on refresh.

  6. Siempre que el archivo externo cambie, haga clic en el botón Data/Get External Data/Refresh All.

Nota: en su caso, es probable que desee omitir el paso 5.

+0

Pero siempre le pide que seleccione el archivo nuevamente cuando presione actualizar – Damian

1

puede escribir .WorkbookConnection.Delete después .Refresh BackgroundQuery: = False esta conexión externa va a borrar el archivo de texto.

Cuestiones relacionadas