• ベストアンサー

APIとFSOの違い

VBAを勉強中のものです。 VBAではできないwindowsの操作・制御はAPIを使うと良いと聞いたのですが ファイルを操作・制御するときのみは FSO(FileSystemObject)は使うのですか? ファイルの操作もVBA以外の作業・windows作業なのに なぜAPIを使わないのでしょうか?

  • bkshfu
  • お礼率98% (516/525)

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

  • ベストアンサー
  • gungnir7
  • ベストアンサー率43% (1124/2579)
回答No.1

APIとFSOは事実上、同じものだと考えて下さい。外部呼び出しプログラムです。 APIは低レベル(レベルが低いのではなく、よりOSに近いという意味)なのに対して、 FSOはAPIを更に組み合わせて、動作保証をして提供されています。 ということなのでFSOを使った方が安全で便利ということになります。 MSも随分と昔(1998年頃)からFSOを使いましょうと推奨しています。

bkshfu
質問者

お礼

詳しい説明ありがとうございます。

関連するQ&A

  • このコードはFSOを使ってるのでしょうか?

    Sub フォルダ作成() MkDir "C:\新しいフォルダ" End Sub で、フォルダが作成されますが、 上記のコードは省略されてるだけで FileSystemObjectオブジェクトは使われていますか? フォルダの操作は、FSOじゃないとできないと思っていましたが 上記のコードを見る限りFSOを使わなくても出来てるような気がして 混乱しています。 ご回答よろしくお願いします。

  • FSO.CopyFileでのエラー無視方法

    コピー元フォルダにあるxlsファイルを全てコピー先のフォルダにコピーするVBAを作っています。 既にコピー先フォルダに同名のファイルがある場合は上書きせずスキップし、 コピー先フォルダに無いファイルだけコピーしたいのですが、 Sub test() Dim FSO As Object Dim md As String Set FSO = CreateObject("Scripting.FileSystemObject") Set md = Format (Date, "MMDD") FSO.CopyFile "C:\コピー元\*.xls", "C:\コピー先\"& md ,False Set FSO = Nothing End Sub FSO.CopyFileをFalseにするとコピー先に同名のファイルがある場合に エラーで止まってしまいます。 このエラーを無視してコピーを続ける方法はありますでしょうか。 今回は確認ダイアログなど一切出さずに処理する方法が知りたいのですが、 今後の為に同名のファイルがあれば上書き確認ダイアログを出し、 処理を分岐させる方法もありましたらヒントだけでも教えて頂けると嬉しいです。 作成はExcel2010ですが、Excel2002でも動作するように作りたいです。 よろしくお願いいたします。

  • vbaで出来る事をわざわざAPIを使う理由・必要性

    vbaで出来る事をわざわざAPIを使う理由・必要性は? 他人が作ったエクセルファイルを操作しているのですが ところどころにAPIが使われています。 しかし、「なぜvbaでできるのにAPIを使ってるのだろう?」と思う部分があります。 例えば、 時間を止め対場合、 vbaで Sub vba() Application.Wait Now + TimeSerial(0, 0, 2) End Sub とすればいいのに、 APIで Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub API() Sleep 2000 End Sub としています。 APIを使う事によって、どのようなメリットがあるのでしょうか?

  • VBA FSOの詳細説明はどこ?

    FSOはファイル関係の操作が出来るので、私も利用してます。 ただ、いつも虫食いのごとく一部だけ調べるパターンが多いです。 使用方法の詳細がずらっと載っているものはないでしょうか?

  • エクセルマクロ(vba)のFSO.OpenTextFileを利用したファイルへの追記について

    FSOを利用して、特定のファイルがなければ、FSO.CreateTextFileを使ってファイルを作成して、ログを記入します。 特定のファイルがあれば、FSO.OpenTextFileを使って追記します。 ファイルが存在しないので新規でファイル作成を行ってからログを記入するのははうまくいくのですが、ファイルが存在するので、ファイルを開いて追記する場合ががうまくできません。 何が原因なのでしょうか? 以下がそのプログラムです。 アドバイスをよろしくお願いします。 Dim excel_folder excel_folder = ThisWorkbook.Path excel_folder = excel_folder & "\log.txt" Set objShell = CreateObject("Wscript.Shell") Dim FSO Set FSO = CreateObject("Scripting.FileSystemObject") Dim stream, data_text If FSO.fileexists(excel_folder) Then Set stream = FSO.OpenTextFile(Filename:=excel_folder, IOMode:=ForAppending, Create:=True) Else: Set stream = FSO.CreateTextFile(Filename:=excel_folder, Overwrite:=True) End If data_text = "test" stream.writeLine (data_text) stream.writeLine (vbCrLf) stream.Close

  • FSOでエクセルファイルを作成したい

    FSOでエクセルファイルを作成したいのですが、 ファイルの作成はできますが、作成したファイルが開けません。 Sub 新規Excelファイルを作成する() Dim MyFile As String Dim myFSO As Object MyFile = "管理簿.xlsx" Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO.CreateTextFile("C:\" & MyFile) .Close End With Set myFSO = Nothing End Sub で、エラーにならずうまくいっています。 が、その出来上がったファイルを開こうとすると 「ファイル形式またはファイル拡張子が正しくありません」 と言う旨のメッセージが表示されます。 何が間違ってますか? よろしくお願いします。

  • win32API

    win32APIと言うのを使えばオフィスの操作だけではなく windowsの操作も出来ると知ったのですが 何ができるか・どんなことができるのかの一覧を知りたいのですが そのようなURL、わかりますか?

  • FSOを使いサブフォルダのファイル操作

    同じ階層のサブフォルダにxlsm入るが入っており、VBAによりモジュールを解放しようと試みています。 まずは、FSOを使ってサブフォルダにアクセスしようとしましたが、下から6行目でエラー(424 オブジェクトが必要です)が出てしまい、解決できませんので、ご教示いただけないでしょうか? よろしくお願いします Sub DeleteMain() With Application.FileDialog(msoFileDialogFolderPicker) If Not .Show Then Exit Sub Call DeleteSub(folderPath:=.SelectedItems(1)) End With End Sub Sub DeleteSub(folderPath As String, Optional mycount As Long = 0) Dim fso As Object, myFolders As Object, myfile As Object Set fso = CreateObject("Scripting.FileSystemObject") Set myFolders = fso.GetFolder(folderPath).SubFolders For Each myfile In fso.GetFolder(folderPath).Files mycount = mycount + 1 ' Cells(mycount, 1) = myfile.Path Debug.Print myfile.Path Next For Each myFolders In fso.GetFolder(folder.Path).SubFolders Call DeleteSub(myFolder.Path, mycount) Next Set fso = Nothing Set myFolders = Nothing End Sub

  • FSOでテキストファイルのデータをエクセルに書き出

    FSOでテキストファイルのデータをエクセルに書き出すには? http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_040.html を参考に、 メモ帳の中身をエクセルに書き出そうとしてるのですが、 参考サイトを自分なりにアレンジしてみたのですが、何も書き出されません。 Sub WRITE_TextFile3() Const cnsFILENAME = "C:\Windows\PrimoPDF Setup Log.txt" Dim FSO As New FileSystemObject ' FileSystemObject Dim TS As TextStream ' TextStream Dim strREC As String ' 書き出すレコード内容 Dim GYO As Long ' 収容するセルの行 Dim GYOMAX As Long ' データが収容された最終行 ' 最終行の取得 GYOMAX = Cells(Rows.Count, "A").End(xlUp).Row ' 指定ファイルをOPEN(出力モード) Set TS = FSO.CreateTextFile(Filename:=cnsFILENAME, Overwrite:=True) ' 2行目から開始 GYO = 2 ' 最終行まで繰り返す Do Until GYO > GYOMAX ' A列内容をレコードにセット(先頭は2行目) strREC = Cells(GYO, 1).Value ' レコードを出力 TS.WriteLine strREC ' 行を加算 GYO = GYO + 1 Loop ' 指定ファイルをCLOSE TS.Close Set TS = Nothing Set FSO = Nothing End Sub そもそも、 ' 最終行の取得 GYOMAX = Cells(Rows.Count, "A").End(xlUp).Row で、なぜ最終行を取得するのかがわかりません。 書き出そうとしているシートには何も入ってないので、 GYOMAXは1になります。 そして、 ' 2行目から開始 GYO = 2 で、なぜ 2行目から開始から開始するのかわかりません。 ご回答よろしくお願いします。

  • 「FindFirstFile」APIで、検索にひっかからないファイルがある。

    お世話になります。 今、VBAで、自動的にファイルを操作するプログラムを 組んでいるのですが、通常エクスプローラー→検索で検索した時と、プログラム上で実行した時に、検索に引っかかったファイルの数の合計が相違していました(><)。 原因を追求すると、どうやら自分がAPIを使用して作成したプログラムの方は、英数のファイルは問題無いのですが、ひらがなのファイル名は検索の対象になっていないようなのです(:;)。 ふつうに"aaa.mpg"は検索にひっかかり、"あ.mpg"は検索の対象外になってしまいます・・。 これはAPIの仕様なのでしょうか?? それともどこかに設定があるのでしょうか? どなたかご教授下さい。