2010-04-05 2 views
0

Я пытаюсь создать что-то для чтения данных из TXT-файла, а затем заполнить данные в .xls, но после открытия .txt-файла, как мне получить данные? В основном я пытаюсь получить третий столбец строк от '04/06/2010 '. После того, как я открываю файл .txt, когда я использую , ActiveSheet не указывает на .txt-файл.Как заполнять данные из TXT-файла в Excel в VBA?

Мой .txt файл, как это (через пробел):

04/05/10 23 29226 
04/05/10 24 26942 
04/06/10 1 23166 
04/06/10 2 22072 
04/06/10 3 21583 
04/06/10 4 21390 

Вот код у меня есть:

Dim BidDate As Date 

BidDate = '4/6/2010' 

Workbooks.OpenText Filename:=ForecastFile, StartRow:=1, DataType:=xlDelimited, Space:=True 

If Err.Number = 1004 Then 
    MsgBox ("The forecast file " & ForecastFile & " was not found.") 
    Exit Sub 
End If 

On Error GoTo 0 


Dim row As Integer, col As Integer 


row = 1 
col = 1 

cell_value = activeSheet.Cells(row, col) 
MsgBox ("the cell_value=" & cell_value) 

Do While (cell_value <> BidDate) And (cell_value <> "") 
    row = row + 1 
    cell_value = activeSheet.Cells(row, col) 
    ' MsgBox ("the value is " & cell_value) 
Loop 

If cell_value = "" Then 
    MsgBox ("A load forecast for " & BidDate & " was not found in your current load forecast file titled '" + ForecastFile + ". " + "Make sure you have a load forecast for the current bid date and then open this spreadsheet again.") 
    ActiveWindow.Close 
    Exit Sub 
End If 

Можно ли указать, куда он идет здесь не так?

ответ

0

В приведенном ниже примере я устанавливаю переменную ws равную листу, который я хочу, и я могу использовать эту переменную для ссылки на лист позже. Ключевое слово ActiveWorkbook должно указывать на вновь открытый текстовый файл. Я мог бы сказать, что вы хотели сделать с информацией, поэтому я только что сделал кое-что.

Sub GetBidData() 

    Dim dtBid As Date 
    Dim ws As Worksheet 
    Dim rFound As Range 
    Dim sFile As String 

    dtBid = #4/6/2010# 
    sFile = Environ("USERPROFILE") & "\My Documents\ForecastFile.txt" 

    Workbooks.OpenText Filename:=sFile, _ 
     StartRow:=1, _ 
     DataType:=xlDelimited, _ 
     Space:=True 
    Set ws = ActiveWorkbook.Sheets(1) 

    Set rFound = ws.Columns(1).Find(_ 
     Format(dtBid, ws.Range("A1").NumberFormat), , xlValues, xlWhole) 

    If Not rFound Is Nothing Then 
     MsgBox rFound.Value & vbCrLf & _ 
      rFound.Offset(0, 1).Value & vbCrLf & _ 
      rFound.Offset(0, 2).Value 
    End If 

End Sub 
+0

Я должен добавить, что я не сталкивался с какой-либо ошибкой с вашим кодом, он просто ничего не делал. –

0

Вы должны вообще избегать использования объекта ActiveWorkbook, если вы не уверены, что учебное пособие вы хотите сослаться будет всегда быть активным, когда ваш код выполняется. Вместо этого вы должны установить рабочую книгу, с которой вы работаете, с переменной. Теоретически, вы должны использовать метод OpenText для этого, но VBA это не нравится. (. Я уверен, что это ошибка) Так сразу после открыть текстовый файл, я хотел бы сделать это:

Workbooks.OpenText Filename:=Forecastfile, StartRow:=1, 
    DataType:=xlDelimited, Space:=True 

Dim ForecastWorkbook As Workbook, book As Workbook 
Dim ForecastFileName As String 

ForecastFileName = "YourFileNameHere.txt" 

For Each book In Application.Workbooks 

    If book.Name = ForecastFileName Then 

     Set ForecastWorkbook = book 
     Exit For 

    End If 

Next book 

Тогда вместо этого ...

cell_value = activeSheet.Cells(row, col) 

... сделайте это ...

cell_value = ForecastWorkbook.Sheets(1).Cells(row, col).Value 
0

Ниже код прочитает текстовый файл и вставляет значения в ячейку Sheet2. Однако, если вы поставите форматирование в столбце Date, который будет делать трюк

Public Sub Read_text() 
Sheet2.Activate 
Set fso = New FileSystemObject 
Fname = Application.GetOpenFilename 
x = 1 
y = 1 
Set Stream = fso.OpenTextFile(Fname, ForReading, True) 
Do While Not Stream.AtEndOfStream 
      Str_text = Stream.ReadLine 'Perform your actions 
      rdtext = Split(Str_text, " ") 
      Sheet2.Cells(x, y) = rdtext(0) 
      Sheet2.Cells(x, y + 1) = rdtext(1) 
      Sheet2.Cells(x, y + 2) = rdtext(2) 
      x = x + 1 
      y = 1 
Loop 
Stream.Close 
End Sub 

Например: Ниже код изменит формат в '05/04/2010'

Sheet2.Cells(x, y) = Format(rdtext(0), "mm/dd/yyyy;@") 
+0

Это всегда объясняет ваш ответ, а не просто код дампа. –

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