Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5266 / 13644 ツリー ←次へ | 前へ→

【51265】読み取り専用ダイアログを表示させない方法 山形 07/9/7(金) 1:25 質問[未読]
【51266】Re:読み取り専用ダイアログを表示させない... りん 07/9/7(金) 7:03 回答[未読]
【51272】Re:読み取り専用ダイアログを表示させない... 山形 07/9/7(金) 23:28 発言[未読]
【51279】Re:読み取り専用ダイアログを表示させない... [名前なし] 07/9/8(土) 16:11 発言[未読]
【51318】Re:読み取り専用ダイアログを表示させない... 山形 07/9/11(火) 21:55 発言[未読]
【51319】Re:読み取り専用ダイアログを表示させない... [名前なし] 07/9/12(水) 0:12 発言[未読]
【51351】Re:読み取り専用ダイアログを表示させない... 山形 07/9/12(水) 21:28 発言[未読]
【51352】Re:読み取り専用ダイアログを表示させない... [名前なし] 07/9/12(水) 22:22 発言[未読]
【51378】Re:読み取り専用ダイアログを表示させない... 山形 07/9/14(金) 2:31 お礼[未読]
【51271】Re:読み取り専用ダイアログを表示させない... ichinose 07/9/7(金) 11:50 発言[未読]
【51819】Re:読み取り専用ダイアログを表示させない... にす 07/10/5(金) 22:16 質問[未読]
【51828】Re:読み取り専用ダイアログを表示させない... G-Luck 07/10/6(土) 16:42 回答[未読]
【51855】Re:読み取り専用ダイアログを表示させない... にす 07/10/7(日) 21:52 質問[未読]
【51857】Re:読み取り専用ダイアログを表示させない... りん 07/10/8(月) 9:34 回答[未読]
【51858】Re:読み取り専用ダイアログを表示させない... にす 07/10/8(月) 11:59 お礼[未読]

【51265】読み取り専用ダイアログを表示させない方...
質問  山形  - 07/9/7(金) 1:25 -

引用なし
パスワード
   ブックを開いて、別のExcelで同じブックを開くと、
「読み取り専用で開きますか?」の確認ダイアログが表示されます。

このダイアログを表示させず、
読み取り専用でブックを開くようにするにはどうしたらよいでしょうか?

【51266】Re:読み取り専用ダイアログを表示させな...
回答  りん E-MAIL  - 07/9/7(金) 7:03 -

引用なし
パスワード
   山形 さん、おはようございます。

>このダイアログを表示させず、
>読み取り専用でブックを開くようにするにはどうしたらよいでしょうか?

別のエクセルでというのが気になりますが。
マクロで開く場合なら、ReadOnly引数をTrueにすればいいです。

Sub Macro1()
  Application.Workbooks.Open Filename:= "Book1.xls", ReadOnly:=True
End Sub

こんな感じです。

【51271】Re:読み取り専用ダイアログを表示させな...
発言  ichinose  - 07/9/7(金) 11:50 -

引用なし
パスワード
   こんにちは
>ブックを開いて、別のExcelで同じブックを開くと、
>「読み取り専用で開きますか?」の確認ダイアログが表示されます。
>
>このダイアログを表示させず、
>読み取り専用でブックを開くようにするにはどうしたらよいでしょうか?

あれ、簡単には

Workbooks.Open "D:\あああ\bbb.xls", , , , , , , , , , True

これかな???

これで問題があるなら

'=========================
Sub mainmain()
If share_chk("D:\aaa\bbb.xls") Then
  Workbooks.Open "D:\aaa\bbb.xls"
Else
  Workbooks.Open "D:\aaa\bbb.xls", , True
  End If
End Sub
'=======================================================
Function share_chk(ByVal mypath As Variant) As Boolean
  On Error Resume Next
  Dim fno As Long
  fno = FreeFile()
  share_chk = True
  Open mypath For Binary Lock Read Write As #fno
  If Err.Number = 70 Then
    share_chk = False
    End If
  Close #fno
End Function

【51272】Re:読み取り専用ダイアログを表示させな...
発言  山形  - 07/9/7(金) 23:28 -

引用なし
パスワード
   ▼りん さん:
>山形 さん、おはようございます。
>
>>このダイアログを表示させず、
>>読み取り専用でブックを開くようにするにはどうしたらよいでしょうか?
>
>別のエクセルでというのが気になりますが。
>マクロで開く場合なら、ReadOnly引数をTrueにすればいいです。

Excelとは別のツールの話で申し訳無いのですが、

通常ブックを開く場合、同じExcel上にブックが二つ開きます、

しかしそのツールはExcelを起動してしまい、そちらにブックを開いてしまい、

Personal.xlsを再び開くので、読み取り専用確認ダイアログが表示されてしまうのです。

【51279】Re:読み取り専用ダイアログを表示させな...
発言  [名前なし]  - 07/9/8(土) 16:11 -

引用なし
パスワード
   個人用マクロブックPersonal.xlsは必須ですか?
A)必要無いなら Application.StartupPath に何も置かなければ良いだけですね。

個人用マクロブックが必要な場合、
B)Personal.xlsとしてではなく、アドイン化したほうが何かと便利です。

C)StartupPathではなく、別の場所に個人用マクロブックを置いて、
 StartupPathには個人用マクロブックをOpenするマクロを置いておく。
(ichinoseさんのコードを参考にされると良いです)
 Openするマクロを書いたBookは「読み取り専用」にしておく。

どうしてもStartupPathにPersonal.xlsを置く必要がある場合
D)普段は読み取り専用にして、個人用マクロを書き換える必要がある時だけ上書き可で処理する。
(手作業でプロパティを変えたり、ChangeFileAccessメソッドを使ったり)


...などが考えられます。

【51318】Re:読み取り専用ダイアログを表示させな...
発言  山形  - 07/9/11(火) 21:55 -

引用なし
パスワード
   ▼[名前なし] さん:
>個人用マクロブックが必要な場合、
>B)Personal.xlsとしてではなく、アドイン化したほうが何かと便利です。

アドイン化(Personal.xlaで保存)したのですが、
マクロの実行を押しても、Personal.xlaのマクロが表示されません。
Personal.xlsだと表示されました。
Personal.xlaのマクロを実行するにはVisualBasicEditerを開くしかないのでしょうか?

>C)StartupPathではなく、別の場所に個人用マクロブックを置いて、
> StartupPathには個人用マクロブックをOpenするマクロを置いておく。
>(ichinoseさんのコードを参考にされると良いです)
> Openするマクロを書いたBookは「読み取り専用」にしておく。

以前試したのですが、IEでExcelを表示した時にエラーが発生してしまいました。

>どうしてもStartupPathにPersonal.xlsを置く必要がある場合
>D)普段は読み取り専用にして、個人用マクロを書き換える必要がある時だけ上書き可で処理する。
>(手作業でプロパティを変えたり、ChangeFileAccessメソッドを使ったり)

今はこれをしております。
いちいち手作業で変えるのが煩わしいので、いい方法が無いものかと。

【51319】Re:読み取り専用ダイアログを表示させな...
発言  [名前なし]  - 07/9/12(水) 0:12 -

引用なし
パスワード
   >Personal.xlaのマクロを実行するにはVisualBasicEditerを開くしかないのでしょうか?
一般的には、ツールバーから呼び出したりしますね。
tp://www.asahi-net.or.jp/~ef2o-inue/haifu/sub06_030_03.html

>以前試したのですが、IEでExcelを表示した時にエラーが発生してしまいました。
よくわかりませんのでパスしますm(_ _)m

>いちいち手作業で変えるのが煩わしいので、いい方法が無いものかと。
ですので、『ChangeFileAccessメソッドを使ったり』と。
Sub test()
  With ThisWorkbook
    If .ReadOnly Then
      .ChangeFileAccess xlReadWrite
    Else
      .ChangeFileAccess xlReadOnly
    End If
  End With
End Sub
#プロパティを変更するものではありません。

【51351】Re:読み取り専用ダイアログを表示させな...
発言  山形  - 07/9/12(水) 21:28 -

引用なし
パスワード
   ▼[名前なし] さん:
>ですので、『ChangeFileAccessメソッドを使ったり』と。
>Sub test()
>  With ThisWorkbook
>    If .ReadOnly Then
>      .ChangeFileAccess xlReadWrite
>    Else
>      .ChangeFileAccess xlReadOnly
>    End If
>  End With
>End Sub
>#プロパティを変更するものではありません。

ありがとうございます。
そのファイルが既に開かれているかどうかの
判定はどうしたらよいでしょうか?

まだ開かれていない時に開く場合は通常の書き込み可能な状態
既に開かれており、読み取り専用ダイアログが表示される場合は
ダイアログを表示せず、読み取り専用で開きたいのです

【51352】Re:読み取り専用ダイアログを表示させな...
発言  [名前なし]  - 07/9/12(水) 22:22 -

引用なし
パスワード
   >そのファイルが既に開かれているかどうかの
>判定はどうしたらよいでしょうか?
StartupPathのPersonal.xlsが開かれる時、つまりExcelが起動する時、
既にStartupPathのPersonal.xlsが開かれているかどうかの判定
...という事ですか?

書き込み時に制約ありますが、ある程度妥協した上で、
SetAttrステートメントでファイル属性をフラグ替わりに使えば、
できなくはないと思います。
が、下記スレッドのように、かなり面倒そうですよ?
tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=38514;id=excel

それより、主目的が、
Excelの重複起動時の『読み取り専用ダイアログを表示させない』だけなら、

Personal.xlsのOpenイベントで .ChangeFileAccess xlReadOnly にする。
つまり、Personal.xlsは常に読み取り専用で開かれる。
なので重複で開く場合でもダイアログは表示されない。
個人用マクロを書き換える必要がある時だけ.ChangeFileAccess xlReadWrite にする。

...が簡単です。それではだめな理由があるのですか?

上記案がだめな場合は
>Personal.xlaのマクロを実行するにはVisualBasicEditerを開くしかないのでしょうか?
この疑問点が解消されているわけですから、
アドイン化するのが現実的な解決方法だと思います。

また、(多分)アドインファイルのほうがStartupPathのPersonal.xlsより先に開くでしょうから、
Openイベントだけのアドインで、工夫すればできるかもしれません。(未検証)

【51378】Re:読み取り専用ダイアログを表示させな...
お礼  山形  - 07/9/14(金) 2:31 -

引用なし
パスワード
   ありがとうございました。

【51819】Re:読み取り専用ダイアログを表示させな...
質問  にす  - 07/10/5(金) 22:16 -

引用なし
パスワード
   便乗ですみませんが、教えてください!

Workbooks.Open "D:\あああ\bbb.xls", , True

で、読み取り専用状態では開けたのですが、
書き込めるように開く時にはどうしたら良いのでしょう?

True ⇒ False に変更してみましたが、やはりダメでした。

よろしくお願いいたします。

【51828】Re:読み取り専用ダイアログを表示させな...
回答  G-Luck  - 07/10/6(土) 16:42 -

引用なし
パスワード
   ▼にす さんへ
G-Luckといいます。
にすさんが開こうとしているファイルは「読み取り専用」のチェックが入っているのではないですか?
チェックが入っているのを開くのであれば、以下のようなのはどうでしょう?

Sub ttt()
  
  Dim buf As Variant
  Dim stFileName As String
  
  stFileName = "Book1.xls"
  
  buf = GetAttr(stFileName)
  SetAttr stFileName, vbNormal
  Workbooks.Open (stFileName)
  Workbooks(stFileName).Close
  SetAttr stFileName, buf
End Sub

【51855】Re:読み取り専用ダイアログを表示させな...
質問  にす  - 07/10/7(日) 21:52 -

引用なし
パスワード
   G-Luckさん、初めまして。にすと申します。
早速の返信、ありがとうございます。

>にすさんが開こうとしているファイルは「読み取り専用」のチェックが入っているのではないですか?

というご指摘ですが、開こうとしているファイルは、
「読み取り専用を推奨する」になっています。

Workbooks.Open "ファイル名"

で開こうとすると、「読み取り専用で開きますか?」の確認ダイアログが表示されます。
ここで、自動で「いいえ」を選択して、書き込める状態で開きたいのですが、上手くいきません。
初心者なので、基本的な質問かもしれませんが、教えて頂けると助かります。
よろしくお願いいたします。m(__)m

【51857】Re:読み取り専用ダイアログを表示させな...
回答  りん E-MAIL  - 07/10/8(月) 9:34 -

引用なし
パスワード
   にす さん。おはようございます。

>というご指摘ですが、開こうとしているファイルは、
>「読み取り専用を推奨する」になっています。

Openメソッドの、名前付引数IgnoreReadOnlyRecommendedをTrueにすると、「読み取り専用を推奨する」を設定して保存したファイルを開く時に、確認のダイアログが出ません。

Sub Macro1()
  Workbooks.Open Filename:="book1.xls", IgnoreReadOnlyRecommended:=True
End Sub

こんな感じです。
詳細はヘルプで確認してみてください。

【51858】Re:読み取り専用ダイアログを表示させな...
お礼  にす  - 07/10/8(月) 11:59 -

引用なし
パスワード
   りんさん

ご回答ありがとうございます!!
やってみたら希望通りの動きをしました。
ヘルプで意味も確認しました。
プログラム→意味確認は出来ても、
やりたいこと→プログラムの検索って、なかなか慣れなくて・・・まだまだですね。
本当にありがとうございましたm(^^)m

5266 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free