• ベストアンサー

Excelファイルの読み込み

SUPERSの回答

  • ベストアンサー
  • SUPERS
  • ベストアンサー率42% (26/61)
回答No.5

>質問なのですがグローバル変数宣言は標準モジュールで >Public strFileName As String と宣言し、 >それ以外にも各フォームごとにも >Dim strFileName As Stringと宣言をすべきなのでしょうか? 各フォームで宣言するとローカルな同じ変数になります。 したがって、この場合宣言するとややこしくなりますので 宣言しないほうがいいでしょう。 「パス名が無効です」でMSDNのヘルプを検索してください。 「パス名が無効です。(Error 75)」 Open、MkDir、ChDir、または RmDirなどのファイル アクセスまたは ディスク アクセス操作の際に、オペレーティング システムでパスと ファイル名を関連付けることができませんでした。エラーの原因と 対処方法を次に示します。 ファイル指定の形式が間違っています。 ファイル名には、絶対パスと相対パスがあります。絶対パスは (パスが別のドライブの場合は) ドライブ名で始めて、ルートから ファイルまでのパスを明示的に指定します。絶対パスで指定されて いないパスは、カレント ドライブとフォルダへの相対パスになります。 既存の読み取り専用ファイルと同じ名前でファイルを保存しようとして います。 ターゲット ファイルの読み取り専用の属性を変更するか、別のファイル 名で保存します。 読み取り専用ファイルをシーケンシャル Output または Append モードで 開こうとしています。 Input モードで開くか、読み取り専用属性を変更します。 以上のような記述でひっかかっているかどうか判断できませんか? 何か根本的なところでおかしい気もします。 思いもしない箇所のエラーで、結果として上記エラーになっている 可能性もあります。 「ファイルがありません」などのメッセージではないですから。 参考にならなかったら申し訳ありませんが。 まさか、エクセルファイル(通常バイナリ)をシーケンシャルで 開こうとしているとか? エクセルのファイルは、CSVなどのテキストですよね? バイナリならば、シーケンシャルでは無理なので、 Open FileName For Binary As #1 などに し、Get などを使わないと処理できませんので。 (蛇足でしたらごめんなさい)

tomokoji
質問者

お礼

回答ありがとうございました。 宣言のしすぎでした。グローバル変数以外に、 各フォームでも宣言していました。 修正してデバッグしたら、パス名が必要な箇所では strFileName = "" などの空白がなくなり コモンダイアログから引っ張ってきたパス名がはいっていました。 これで次の処理に移れます。 皆さん丁寧なアドバイスありがとうございました。

関連するQ&A

  • VB2005 でCSVファイルの読み込み

    VisualBasic2005でカンマ区切りのcsvファイルを読み込み、各項目を配列に取り込みたいのですが、どうすればいいのですか? VB6の時のように書くとエラーになります。 VB2005にはopen命令はないみたいですね。 Open ファイル名 For Input As #1 input #1,s(1),s(2),s(3) close #1 ちなみにcsvファイルの内容は "会社名(co.xxx,sss)","工場名","製品名(aaa,xxx)" のように各項目中にカンマやピリオドが入っています。 VB6はVBAではダブルコーテーションで囲めば正常に読み込めました。 どなたか教えて下さい。よろしくお願いします。

  • バイナリデータのファイル入出力について

    ○No.1 Open filename For Binary Access Read As #1 Get #1, , 変数 Close #1 ○No.2 Open filename For Input As #1 Line Input #1, 変数 Close #1 No.1とNo.2のプログラムでは読み込み方にどのような違いがあるのでしょうか?たとえば、No.2のLine Inputでは改行文字は読み飛ばされますが、No.1は改行文字も読み込みますよね。また、No.1ではDim 変数 As String * 1と最後の* 1など文字の読み込み数を定義しておく必要がありますが、Line Inputに対応するものがないからでしょうか? また、バイナリデータを読み書きするときに他に良いコードというかこうするのが定石みたいなのがあったら教えてください。

  • 変数の頭「#」の意味

    VB初心者です。 VB5のOPEN関数等で見かける #変数名 の#はどういう意味でしょうか? ヘルプを見ると「省略可能」とありますが・・・ 指定した場合に何か意味を持つものなのでしょうか? 例 intFileNo = FreeFile Open "test.txt" For Input As #intFileNo

  • VB6.0 CSVファイル読み込みについて

    VB6.0について質問です。 CSVファイルの読み込みを行いたいのですがうまくいきません。。。 以下のソースのどこに問題ありますでしょうか?>< 14個のカンマ区切りのCSVファイルを読み込んでいますが ファイルのデータを変更するとインデックスが有効範囲にありませんというエーラーがでます。。。 ファイルは3行で構成しているのですがヘルプを参照したら複数行の場合はLINE Input #1, MyString(i)と書いてありました。 しかしやってみると行ごとのデータを取得してカンマ区切りで取得してくれませんでした。。。 以下のソースで実行すると改行部でエラーになるようです。 改行を無視するようなロジックを入れる必要があるのでしょうか? Dim MyString(), i Open App.path & "\" & CSV_filename For Input As #1 ReDim MyString(13) Do While Not eof(1) Input #1, MyString(i) Label4(i).caption = MyString(i) i = i + 1 Loop Close #1

  • VBからExcelのテキストを指定して開きたい

     VBのアプリケーションから文書名を指定してエクセルを起動したいのですが 出来なくて困っています。ちなみにコードは下記のとおりです。どこに問題があ るのか教えていただけないでしょうか。 Private Sub Command1_Click() Dim lngReturnCode As Long Dim strFileName As String strFileName = "AllTitles.csv"   lngReturnCode = ShellExecute(Me.hwnd, _ "open c:\***\***.xls", _ strFileName, _ vbNullString, _ App.Path, _ SW_SHOWNORMAL) End Sub

  • テキストファイルを一行づつとる方法

    テキストファイルを一行だけとる方法は以下のとおりかと思いますが、最後の列まで一行づつとる場合はどうすればいいのでしょうか?教えて頂ければ幸いです。 Open "c:\data.txt" For Input As #1 Line Input #1, str Close #1

  • ActiveBasic 動画の画面のサイズを取得したい(Fieldの使い方)

    お世話になっています。 今回、動画の画面のサイズを取得したく、方法を探していたところ、 以下のようなページを見つけました。 http://tokyo.cool.ne.jp/kanain/APIHTM/AVI_Size.html しかし、Fieldのところで詰まってしまい、先へ進めません・・・ #N88BASIC Dim path As String Dim str As String Dim width As Double Dim height As Double Input"動画ファイルへのパス:",path Open path As #1 Field #1,3 Get #1,65,str Close #1 とりあえず、ここまで書きましたが、 数値が返ってきません・・・ (mpgで実験しました) やり方をご存知の方、お手数ですがご教授いただければ幸いです。 AB 4.23.00 Win XP

  • VBA 複数のファイルの特定の列だけ取得してマージ

    お世話になっております。 VBAで、複数のCSVファイルの特定の列だけを抽出して別のCSVファイルにマージする方法を探しています。 例えば、マージフォルダに1000のCSVファイルがあります。 1000あるファイルのA列とC列だけを抽出して、 それを別の「マージ.CSV」というファイルにA列とB列にマージして一つにしたいのです。 1000のファイルにはA~Qまで値が入っていて、A~Q列の値全て取り込みマージするとデータが重くなってしまうのです。 Unionメソッドを仕様して列を選択するのかなと思うのですが。。。 現在、こちらのコードを参考にしています。 わかる方いましたらよろしくお願いいたします。 Sub csvmerge() wpath = Range("B3") wfile = Dir(wpath & "\") flag = 0 Do While wfile <> "" If InStr(wfile, ".csv") Then flag = flag + 1 If flag = 1 Then FileCopy wpath & "\" & wfile, ThisWorkbook.Path & "\output.csv" Open ThisWorkbook.Path & "\output.csv" For Output As #1 Close #1 End If Open ThisWorkbook.Path & "\output.csv" For Append As #1 Open wpath & "\" & wfile For Input As #2 Do Until EOF(2) Line Input #2, w_str Print #1, w_str Loop Close #2 Close #1 End If wfile = Dir() Loop MsgBox "マージ完了", vbInformation End Sub

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

    いつもお世話になります。 環境は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で閉じないのはなぜですか? 初めてテキストファイルを操作するのでよくわかりません。 よろしくお願いします。

  • CSVの作り方

    VBの初心者です。 VBでCSVファイルを新規で開いて 保存できたと思ったのですが、できていませんでした。 まだ何か足らないのでしょうか? ーーーーーソースーーーーー '取り合えず開いて保存 open app.path + "ファイル名"for output access write as #1 close #1 ーーーーーソースーーーーー