テキストファイルの閉じ方について

このQ&Aのポイント
  • VBAでセルに設定してあるハイパーリンクを開くとテキストファイルが開くが、閉じられない問題についての質問。
  • テキストファイルを閉じるためには、VBAのClose文を使用するが、なぜうまくいかないのか不明。
  • 初めてテキストファイルを操作する際には、Close文の使い方について理解が不足しているため、解決策を求めている。
回答を見る
  • ベストアンサー

テキストファイルの閉じ方について

いつもお世話になります。 環境はXPを使用しています。 VBAでセルに設定してあるハイパーリンクを開くと テキストファイルが開くようにしてあります。 このテキストファイルを閉じようとするのですが、 閉じません。 ちなみにソースは以下の通りです。 intFileNum = FreeFile Open strFileName For Input As intFileNum i = 1 Do While Not EOF(intFileNum) Input #intFileNum, TextLine Cells(i, 1) = TextLine i = i + 1 Loop Close #intFileNum 最後のCloseで閉じないのはなぜですか? 初めてテキストファイルを操作するのでよくわかりません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ここでの「Close」は「Open」メソッドに対する終了処理です。 したがって、テキストファイルが閉じる訳でありません。 要するに、ファイルの制御を終了するという意味です。

関連するQ&A

  • VBA-読み込んだテキストファイルを並び替えて書き出したい

    VBA-読み込んだテキストファイルを並び替えて書き出したい ch1=FreeFile Open A for Input as ch1 ch2=FreeFile Open B for Input as ch2 DO while Not EOF(ch1) Line Input #ch1,buf Print #ch2,buf Loop Close #ch1,#ch2 で読み込み、書き出すことはできました。 やりたいことは、書き出す時に、項目を並べ替えたいのです。 例 にんじん りんご ねこ だいこん バナナ いぬ ↓ りんご ねこ にんじん バナナ いぬ だいこん よろしくお願いいたします。 区切りはタブです。

  • エクセルVBAにてテキスト出力がうまくいきません

    エクセルシートの1列に以下のような文字列を打ち込みました。 - a aa aaa aaaa aaaaa - b bb bbb bbbb bbbbb - c cc ccc cccc ccccc - 「-」の2行後をテキストを出力した際のファイル名とし、ファイル名を含んだ次の「-」までの文字列をそのテキストの中に出力したいです。なお、全体の行数は分かっています。 例えば上の文字列に対して実行すると、 a.txt b.txt c.txt というファイルができ、それぞれの中には a aa aaa aaaa aaaaa などがそれぞれ出力されるようにしたいです。 Sub tepa() Dim strFilename As String Dim FileNumber As Integer Dim strREC As String j = 1 For i = 1 To 70 If Cells(i, 1) = "-" Then strFilename = Cells(i + 2, 1) & ".txt" Do While Cells(i + j, 1) <> "-" If i > 70 Then Exit Sub End If FileNumber = FreeFile strREC = Cells(i + j, 1) Open strFilename For Append As FileNumber Print #FileNumber, strREC Close j = j + 1 Loop End If i = i + j Next End Sub さきほど初めてVBAなるものを知り、見よう見まねで書いてみましたが・・・ループに陥ったりテキストファイルが1つめしか出力されなかったりとうまくいきません。 改善点など教えていただけたら嬉しいです。 よろしくお願いします。

  • VBA エラーハンドラーについて

    VBAについてお教えください。テキストファイルを開いて、データ処理を行おうと思っています。 下記のような処理をおこなっています。 On Error GoTo ErrorHandler 'ファイル番号を取得 FNo = FreeFile Do While Not EOF(FNo) ~~処理 ~~処理 Loop 'ファイルを閉じる Close #FNo ErrorHandler: ~~処理 end sub ループが無事に終わって、ファイルを閉じるところまで行くのは良いのですが、Close #FNoの後に処理がErrorHandler:に移ってしまいます。 特に問題が無ければ、ErrorHanderを飛び越えてend subに行くと思っていたのですが、認識が違うのでしょうか? それとも何らかのエラーが起こっているのでしょうか?

  • VBAでCSVファイルを読み込もうとしていますが、

    VBAでCSVファイルを読み込もうとしていますが、 「ファイルが見つかりません」とエラーが表示されます。 どのように対処していいのかわかりません。 教えてくください。 Sub readCsv() Dim csvFile As String Dim ch As Integer Dim csvStr As String Dim str() As String Dim i As Integer Set ShellApp = CreateObject("Shell.Application") Set oFolder = ShellApp.BrowseForFolder(0, "フォルダ選択", 1) targetFolder = oFolder.Items.Item.Path Set fso = CreateObject("Scripting.FileSystemObject") Set fileList = fso.GetFolder(targetFolder).Files For Each file In fileList csvFile = file.Name ch = FreeFile Open csvFile For Input As #ch i = 1 Do While Not EOF(1) Line Input #ch, csvStr Close #ch str = Split(csvStr, ",") Range(Cells(i, 1), Cells(i, UBound(str) + 1)) = str i = i + 1 Loop Next End Sub

  • 新しいファイルの作成について

    タイピングのプログラムを作っています。 今、基になるファイル(Syokyuu1)があり ローマ字設定をしなおして 新しいファイル(Syokyuu2)を作りたいと考えています。 FINum = FreeFile Open "Syokyuu1.txt" For Input As #FINum i = 0 Do While Not EOF(1) Input #FINum, wk1(i) i = i + 1 Loop Close #FINum という具合にSyokyuu1を読み込んで wk1(100)に保存するところまでできました。 ※ wk(n)の構造:wk(0)=inu,wk(1)=ennpitu,wk(2)=honn・・・ ここでwk(0)からwk(99)までローマ字の設定をしなおして 新しいファイルSyokyuu2を同じ構造で作成したいのです。 その場合どのように記述すればよろしいですか? よろしくお願いします。 Syokyuu1の中は "inu" "ennpitu" "honn" という構造です。

  • ブックをひらかずにテキストファイルを取り込む

    エクセルのブックを開かずにテキストファイルを取り込みたいのですが、対象のテキストファイルは タブで分かれています。 本を見て 下記のプロシージャを使用したいのですが、 テキストが取り込まれるブックに郵便番号と言うシートを作成してもうまく取り込めません。 テキストはタブで区切られたテキストで 7列のデータです。 下記のものを開こうとすると、7列でデータが入るのですが、タブでデータが区切られてこないのです。 データが続いて一つのセルに入ってしまい、 うまく設定できません。 何がいけないのでしょうか? 宜しくお願いします。 Sub ReadTxt() Dim myTxtFile As String Dim myBuf(7) As String Dim i As Integer, j As Integer Application.ScreenUpdating = False myTxtFile = ActiveWorkbook.Path & "\Fuji.txt" Worksheets("郵便番号").Activate Open myTxtFile For Input As #1 Do Until EOF(1) Input #1, myBuf(1), myBuf(2), myBuf(3), myBuf(4), _ myBuf(5), myBuf(6), myBuf(7) 'データをセルに展開する i = i + 1 For j = 1 To 7 Cells(i, j) = myBuf(j) Next j Loop Close #1 End Sub

  • ExcelVBAで、隠しフォルダにあるファイルに書き込みする方法

    お世話になります。 ExcelVBAで、ネットワーク上の隠しフォルダ(....$で開く ことができる場所のことです)に、テキストファイルの書き 込みをしたいのですが、outputのところで『パス名が無効です』と 表示され、書き込みを行うことができません。 inputで読み込みを行う際には問題なくできるのですが、どうして 書き込みはできないのでしょうか。 原因と対処法を教えてください。 下記が、その例です。 Public Function readText(ByVal stFileName) As String Dim ch1 As Long Dim textline As String Dim stAllText As String readText = "" '空いているファイル番号を取得します ch1 = FreeFile Close #ch1 'FileNamePath のファイルをオープンします Open stFileName For Input As #ch1 'エラーが発生したらファイルを閉じます On Error GoTo Err_readText stAllText = "" '最初に1行だけ読み込む Line Input #ch1, textline stAllText = textline Do While Not EOF(ch1) 'ファイルの終端かどうかを確認します。 '1行読み込みます Line Input #ch1, textline ' 文字列を連結する。 stAllText = stAllText & vbCrLf & textline Loop Close #ch1 readText = stAllText Exit Function Err_readText: Close #ch1 MsgBox Err.Description, vbExclamation, sysName End Function ↑↑↑readは成功します。 Public Function writeText(ByVal stFileName, ByVal stBuff) As Boolean On Error GoTo ErrMsg ' ファイルポインタ Dim n As Long n = FreeFile Open stFileName For Output As #n  ← ここでエラーになる。 Print #n, stBuff Close #n writeText = True Exit Function ErrMsg: ' エラー時処理 MsgBox Err.Description, vbCritical, sysName writeText = False End Function ↑↑↑書き込みではエラーになります。 以上、よろしくお願いいたします。

  • エクセルにてテキストファイル読み込みでエラー  

    いつもお世話になっております。 テキストファイル (test.txt)をエクセルマクロにてセルへの読み込みを したいのですが、なぜか エラーになります。 Cells(n, 1) = buf  でエラーのようです。 理由がわかりません。 教えてもらえないでしょうか 普通の文章なら読み込みできるのですが =  を使っているとエラーがでるようです。 test.txtの画像を添付します。 エクセルのマクロの内容は次の通り Sub テキストファイルをセルに転記() Dim buf As String, n As Long Open "C:\Users\a\Desktop\test.txt" For Input As #1 Do Until EOF(1) Line Input #1, buf n = n + 1 Cells(n, 1) = buf Loop Close #1 End Sub

  • CSVの読み込み処理について

    こんばんわです。 エクセルのVBAをつかってCSV形式のファイルデーターを読み込みように某サイトを参考に作成しました。 確かに読み込む事が出来たのですが、数値も文字列扱いになってしまいます。 数値処理する方法があるのでしょうか? Sub CSV_Read2() Dim FileType, Prompt As String Dim FileNamePath As Variant Dim textline, csvline() As String Dim Rowcnt, ColumNum As Integer Dim ch1 As Long FileType = "CSV ファイル (*.csv),*.csv" Prompt = "CSV File を選択してください" '操作したいファイルのパスを取得します FileNamePath = SelectFileNamePath(FileType, Prompt) If FileNamePath = False Then 'キャンセルボタンが押された End End If '空いているファイル番号を取得します ch1 = FreeFile 'FileNamePath のファイルをオープンします Open FileNamePath For Input As #ch1 'エラーが発生したらファイルを閉じます 'CSVのファイルは1行の項目数が正確に合っていないと読めないのですが、 '色々なCSVがあるようなので入れておきます On Error GoTo CloseFile '表の行番号の初期化 1行目から読み込んだデータを入力します Rowcnt = 1 Do While Not EOF(ch1) 'ファイルの終端かどうかを確認します。 '1行読み込みます Line Input #ch1, textline 'ダブルクォーテーションを削除します 'カンマ+ダブルクォーテーションで区切られている CSV ファイルなどは '適時追加してください textline = Replace(textline, """", "") 'カンマで分離します csvline() = Split(textline, ",") '配列渡しでセルに代入 Range(Cells(Rowcnt, 1), Cells(Rowcnt, UBound(csvline()) + 1)) = csvline() Rowcnt = Rowcnt + 1 Loop CloseFile: 'ファイルを閉じます Close #ch1 End Sub Function SelectFileNamePath(FileType, Prompt) As Variant SelectFileNamePath = Application.GetOpenFilename(FileType, , Prompt) End Function Function GetItemNum(FileNamePath) As Integer Dim ch1 As Long Dim textline As String '空いているファイル番号を取得します ch1 = FreeFile 'FileNamePath のファイルをオープンします Open FileNamePath For Input As #ch1 Line Input #ch1, textline '1行だけ読み込みます。 Close #ch1 GetItemNum = 1 '1行中のカンマの数を数えます Do GetItemNum = GetItemNum + 1 textline = Mid(textline, InStr(textline, ",") + 1) Loop Until InStr(textline, ",") = 0 End Function

  • テキスト文書(.txt)→エクセルにインポート

    エクセルから、テキスト文書(.txt)をインポートする機能を VBAで作成しているのですが、1つのセルに複数の行を 入力する方法がわからず、困っています。ご存知の方い らっしゃいましたら、ご教授よろしくお願いします。 ↓途中までのコードです。↓ Sub ボタン1_Click() Dim dir_name As String, file_name As String Dim rn As Integer dir_name = Application.GetOpenFilename( _ "テキストファイル (*.txt),*.txt", 1, _ "読み込み元のファイルをどれか一つ開いてください" _ ) If dir_name = "False" Then Exit Sub file_name = Dir("*.txt", vbNormal) rn = 1 ' 開始行 - 1 を設定 Do Until file_name = "" rn = rn + 1 Call ImportText(file_name, rn) file_name = Dir() Loop End Sub '------------------------------------------------------- Sub ImportText(file_name As String, rn As Integer) Dim FileNum As Integer Dim TextLine As String Dim cn As Integer FileNum = FreeFile() Open file_name For Input Access Read As #FileNum Application.StatusBar = "ファイル""" & file_name & """の内容を読み込んでいます。" On Error GoTo CloseFile Do Until EOF(FileNum) Line Input #FileNum, TextLine If cn < 6 Then cn = cn + 1 Cells(rn, cn).Value = Trim(TextLine) Else ★★★★★★★★★★★★★★★ End If Loop End Sub 『 ★★★★★★★★★★★★★★★』となっているところに、 Cells(rn, cn).Value = Trim(TextLine) と書いて、1つのセル に残りの文章を全て入れようとしたのですが、このままでは上書 きされてしまい、最後の1行しか残っていません。 [例]残りの文字 こんにちは こんばんは おかえり。 ↓これをそのまま1つのセルに↓ こんにちは こんばんは おかえり。 と入れるには、どのような記述をすれば良いのでしょうか? (Excel2007を使用しています。)