痔になりやすい生活習慣とは?

ExcelVBAの勉強を始めて間もない者です。
Office2000のExcelでマクロを作成しています。

テキストストリームオブジェクトを作成してファイルを開き、
ファイルの内容をセルに展開するプログラムを書いているのですが、
開こうとしているファイルが他のプロセスで開かれているかどうかを調べる方法はありませんか?

Openステートメントを使用すればロックをかけることができるので、
エラーを発生させることができるみたいなのですが、
テキストストリームオブジェクトを使用してファイルを開いている場合に
開くファイルが他のプロセスで使用してるか調べる方法が知りたいです。

説明がわかりにくいとは思いますがよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ExcelVBAのことでこちらで回答を得られないときは、


デジタルライフ > ソフトウェア > Office系ソフト
のほうで再質問してみたほうがいいと思います。
VBAの知識のある方が大勢いますよ。
回答でなくてすいません。
    • good
    • 0
この回答へのお礼

再回答ありがとうございます。
ここでの質問は締め切って教えて頂いたカテゴリで再度質問させて頂きたいと思います。

お礼日時:2007/07/18 23:50

最近、よく似た質問がありました。


http://okwave.jp/qa3139073.html
でどうでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

リンク先を拝見させていただきました。
私の説明が下手でうまく伝わらなかったみたいで申し訳ないです。

プログラムでファイルを扱うために「ファイルを開く」際に
開く方法がテキストストリームオブジェクトなるものを作成して開く方法と
ご提示頂いたOpenステートメントなるものを使用して開く方法の
2つがあるらしいのです(勉強中の身の為間違っているかもしれませんが)

さらに、ファイルの内容を読み込む際に、Openステートメントで開いた場合よりも
テキストストリームオブジェクトを作成して開いた方が速い。
という記事を見かけました。

今回、勉強とはいえ扱う読み込みデータが多い為、
処理が速い方(テキストストリームオブジェクト)を使ってプログラミングをしました。

ですが、他のプロセスですでにファイルが開かれていても
読み込みモードで開いた場合はエラーは発生せずに開いてしまいます。

そこで、テキストストリームオブジェクトを作成してファイルを開く方法でも
Openステートメントを使用して開く際にロックをかけるような処理はないか?
または、そのファイルが他のプロセスで開かれているかどうかを調べるようなメソッドなり関数なりプロパティなりがないのか?
ということを知りたいのです。

ないならないでOpenステートメントを使ったプログラムに変更するのですが、
自分で探しただけでは、「きっと探せないだけであるはず!」と
諦めがつかなくて。。。

やっぱり無いのでしょうか。。。

回答本当にありがとうございました。
説明下手で申し訳ありませんでした。

お礼日時:2007/07/15 11:21

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理

大変お世話になっています。

サーバ上にあるファイルを更新するVBAを作りました。
該当ファイルはあらかじめ閉じられていて、オープンして処理終了後保存して閉じるという仕様になっているのですが、そのファイルは複数人が使用するもののため、「閉じている」ことを前提としたVBAにもかかわらず、ファイルが開いている可能性があります。

そこで、一番最初に「ファイルが開かれていたら何もせずに終了する」という判断をしたいのですが、いい方法はあるでしょうか。

過去の質問を検索したところ、

If .ReadOnly Then
’処理を行わない
Else
’処理を行う
End If

という書き方があるようですが、VBAを使わない場合でも「他の人が使用中です。読み取り専用で開きますか?」というメッセージが自動で出てしまうため、これを出さずに強制終了できると嬉しいです。

達人の皆様、どうかお知恵をかして下さいませ。

Aベストアンサー

こんにちは。

>過去の質問を検索したところ、
>If .ReadOnly Then
それは正しい回答だったのでしょうか?

ダミーのバイナリ編集をすればよいのではありませんか?既に開いていれば、エラーが返りますので、それでチェックできます。

サンプル:

Sub BookEnableEdit()
Dim MyPath As String
Dim myFno As Integer
Const Fname As String = "test.xls" 'ファイル名
MyPath = \\サーバー名\共有フォルダ & "\"
If Dir(MyPath & Fname) <> "" Then
  myFno = FreeFile
  On Error Resume Next
  Open MyPath & Fname For Binary Lock Read Write As #myFno
  Close #myFno
End If
 If Err.Number > 0 Then
  MsgBox "ブックは開いています", vbInformation
  Exit Sub
 End If
 On Error GoTo 0
End Sub

こんにちは。

>過去の質問を検索したところ、
>If .ReadOnly Then
それは正しい回答だったのでしょうか?

ダミーのバイナリ編集をすればよいのではありませんか?既に開いていれば、エラーが返りますので、それでチェックできます。

サンプル:

Sub BookEnableEdit()
Dim MyPath As String
Dim myFno As Integer
Const Fname As String = "test.xls" 'ファイル名
MyPath = \\サーバー名\共有フォルダ & "\"
If Dir(MyPath & Fname) <> "" Then
  myFno = FreeFile
  On Error Resume Nex...続きを読む

QVBAでCSVファイルが使用中かどうかの確認

お世話になっております。

Excel VBA についてご質問します。
今、VBAでCSVファイルを作成してデータ管理を行うソフトを作成しております。
このソフトは、共有をかけて複数の人で使用するため同じCSVファイルに同時にアクセスする可能性があります。そのため、CSVファイルに混同したデータが書き込まれてしまう恐れがあります。
そこで、CSVファイルがオープン中または、アクセス中が認識できる命令等はないでしょうか?

よろしくお願いします。

Aベストアンサー

こんにちは。

CSV ファイルですか....難しいですよ。

Excel で CSV を開く場合、ファイルはロックされるため、下記のような
ロジックで使用中かどうかを調べることは可能です。

' // ファイルが使用中か調べる
Public Function FileInUse(ByVal sFilename As String) As Boolean

  Dim n As Integer
  n = FreeFile()
  On Error Resume Next
  Open sFilename For Binary Lock Read Write As #n
  FileInUse = CBool(Err.Number > 0)
  Close #n
  On Error GoTo 0

End Function

ただし、これは CSV を編集するアプリが、ファイルを開くときに、
ファイルをロックする、、これが条件です。ロックされないファイル
について、使用中かどうかを判定する術はありません。

CSV は Excel で編集すると限定できる場合は、このロジックで十分です。

しかし、CSV の実態は単純なテキストですから、メモ帳などでも編集
できますよね?
メモ帳(他多くのエディタ)では、ファイルがロックがされませんから、
このケースでは検知できません。

心配ならデータベース(例えば mdb とか)を使った方がよろしいのでは?

こんにちは。

CSV ファイルですか....難しいですよ。

Excel で CSV を開く場合、ファイルはロックされるため、下記のような
ロジックで使用中かどうかを調べることは可能です。

' // ファイルが使用中か調べる
Public Function FileInUse(ByVal sFilename As String) As Boolean

  Dim n As Integer
  n = FreeFile()
  On Error Resume Next
  Open sFilename For Binary Lock Read Write As #n
  FileInUse = CBool(Err.Number > 0)
  Close #n
  On Error GoTo 0

End Fun...続きを読む

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QExcel VBA でファイルが開かれているか確認する

ExcelのVBAで、book1.xlsというファイルが現在開かれているか確認するにはどんなプロパティを使えばいいでしょうか?

実際にやりたい事は、book1.xlsに対して処理するマクロがあるのですが、そのbook1.xlsが開かれていなければ処理が出来ないのでマクロが入っているファイルを閉じる。というものです。

Aベストアンサー

Workbookは、Workbooksコレクションによって管理されているので、Worlbooksの中身を列挙することでチェック可能です。

Dim wb As WorkBook
Dim blnFlag As Boolean
For Each wb In Workbooks
  If wb.Name = "book1.xls" Then
    blnFlag = True
    Exit For
  End If
Next

もっと手っ取り早くですと、
Set wb = Workbooks("book1.xls")

これでエラーが発生したら開いていないと判断できます。

ただし、この処理を呼ぶ前にOn Error Resume Nextでエラートラップを無効にしておかないと処理が中断してしまいます。

Qオートフィルタで抽出したデータの行を削除(VBAで記述)

Excel2000を利用しています。

VBAで、オートフィルタを利用した作業を記述したいと思っています。
データは一行目にタイトルが入っています。

オートフィルタで抽出したデータを
その行まるまる削除したいと思っています。
その時、タイトル行(1行目)を除いて
オートフィルタで抽出された行のみ選択して
削除する、という場合、どのように記述すればよいのでしょうか。
自分では全然分からないので
教えてください、よろしくお願い致します。

Aベストアンサー

#1の者です。操作を間違えて回答ボタンを押してしまいました。少し追加させてください。
このマクロは、最終列まですべての列にデーターが入力されていないとうまく動作しません。
myRange = Range(myCell).SpecialCells(xlCellTypeVisible).End(xlUp).Offset(2, 0).Address
マクロのこの部分は、タイトル行を除くデータの先頭行を取得するためのマクロです。もし、タイトル行が1行の場合は下記のように変更して下さい。
myRange = Range(myCell).SpecialCells(xlCellTypeVisible).End(xlUp).Offset(1, 0).Address

あなた様がVBAをご存知であることを前提として書いてあります。もし、このマクロを実行させる方法がわからない時・うまく動作しない場合は、ご遠慮なくお知らせ下さい。
私でよろしければ、あなた様のおやりになりたいことが実現するまでご一緒に考えていきたいと思います。

QEXCELマクロで、開いてはいるがアクティブでないファイルをアクティブにする方法?

いつもこちらのサイトではお世話になっております。EXCELのマクロについて教えてください。

ファイルを2つ開いているとき、アクティブになっていないほうのファイル名を取得し、そのファイルをアクティブにしたいと考えています。

条件1)
アクティブにしたいファイル名は必ず「グラフ」で始まり、「.xls」で終わります。

条件2)
ファイルは2つともEXCELファイルです。



すみませんが、どうしてもやりかたが思いつかず、教えてください。

Aベストアンサー

#1です。

なるほど、こちらの認識不足でした。

If wb.Name <> ActiveWorkbook.Name Then

     ↓

If wb.Name <> ActiveWorkbook.Name And Windows(wb.Name).Visible Then

で、非表示ブックを対象外にします。


人気Q&Aランキング