ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:どちらでしょうか?) エクセルVBAで自身のファイルを読み取り専用モードにする方法 2012/10/30 20:21 このQ&Aのポイント エクセルVBAを使用して、自身のファイルを読み取り専用モードにする方法について説明します。特定のコードを使用することで、既に開いているエクセルファイルを読み取り専用モードにすることができます。一方、同じコードを実行しても、新規にエクセルファイルを開く場合には「ファイル名は既に開いています」というメッセージが表示されます。これは、既に開いているファイルを再度開くと、変更内容が破棄されるためです。 どちらでしょうか? Sub test() Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & ActiveWorkbook.Name, ReadOnly:=True End Sub エクセルなのですが、 上記のコードは、既に開いている自身のファイルを読み取り専用モードにするのですか? それとも 新規に自身のファイルを開きなおして、その時に読み取り専用モードで開くのか どちらでしょうか? 同じコードを実行しているのに 自身のファイルをそのまま読み取り専用モードにするパターンと 「ファイル名は既に開いています。 2重に開くと、子rまでの変更内容は破棄されます。ファイル名を開きますか?」 と聞かれる場合があります。 結局どちらも同じことなのでしょうか? 画像を拡大する 質問の原文を閉じる 質問の原文を表示する みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー keithin ベストアンサー率66% (5278/7941) 2012/10/30 21:09 回答No.1 こんばんは。 そのマクロではあくまでも一回自分を閉じてから、改めて読み取り専用で開き直そうとします。 前回保存してから、何かブックに編集を加えていると、後者のメッセージが現れます。 #参考 「既に開いている自身のファイルを読み取り専用モードにする」には、次のマクロにします sub macro2() activeworkbook.save ’←状況による activeworkbook.changefileaccess mode:=xlreadonly end sub 質問者 お礼 2012/10/31 19:43 保存してる場合は、そのファイルを読み取り専用モードにして、 保存してない場合は、同じファイルを新規に開いて 読み取り専用モードにするという事ですね。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ パソコン・スマートフォンソフトウェアオフィス系ソフト 関連するQ&A アクセスのMDBファイルを他のユーザーに強制的に読 アクセスのMDBファイルを他のユーザーに強制的に読み取り専用で開かせる方法は? 私が作ったファイルを他の人にメールで送って その人はローカルで保存し、共有ではなく一人で使う場合、 読み取り専用にしたいです。 エクセルなら Private Sub Workbook_Open() Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & ActiveWorkbook.Name, ReadOnly:=True End Sub でできましたが アクセスの場合は どうすればいいでしょうか? ヴァージョンは2003です。 よろしくお願いします。 同じファイルが既に開いていたら開かないようにしたい 同じファイルが既に開いていたら開かないようにしたい accessから下記のコードでexcelファイルを読み込み専用で開き、 指定したシートを開いています、 ですが、既に同じファイルが開いていた場合更にもう1枚開いてしまい、 同じファイルが2枚開いている状態になってしまいます、 何か1文を足して2枚目を開かせない様にすることが出来ると思うのですが、 どんな一文を入れたら良いか教えてください (既に開いているか気をつけて開く、と言うのは無しな方向で) oApp.Workbooks.Open Filename:= _ "■■■■■■■■■■■■", ReadOnly:=True oApp.Worksheets("■■■■■■■").Select よろしくお願いします VBAでフォルダにあるエクセルファイルを開く こんにちは このコードがうまく動かないのですが、 どこがいけないのかわからなく助けてください。 なおフォルダの中には******データ.xlsと言うファイルがあり、アスタリスク部分は日付が不規則に変化して上書きされるのです。 このファイルを開くマクロを作りたいのですが。 うまく行きません。 よろしくおねがいします。 Sub excelopen() ' ' Dim エクセル As String 'エクセル = Dir(ActiveWorkbook.Path & "\*データ.XLS") If エクセル = "" Then Exit Sub エクセル = ActiveWorkbook.Path & "\" & エクセル Workbooks.Open Filename:=エクセル End Sub 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? OKWAVE コラム ファイルが既に開いているかどうかを取得するには Sub Sample1() Dim App As Object Dim MyFileName As String Set App = CreateObject("Excel.Application") MyFileName = "C:\Users\test.xlsm" With App .Workbooks.Open Filename:=MyFileName .Visible = True If .ReadOnly Then MsgBox "既に開いています" App.Quit '既に開いているのなら、閉じる End If End With End Sub このようなコードを作ったのですが、どうやらIf .ReadOnly Thenの部分が間違っているようです。 エラーになります。 既にファイルが開いているか、読み取り専用かどうかを取得するコードをご教授ください。 自分のExcelを読み取り専用で開くVBAは? Excel2003を使っています。 基本的なことで恐縮なのですが、 Excelファイルを手動で開くとき、読み取り専用にするような方法はないでしょうか。 ファイルのプロパティから「読み取り専用」にチェックを入れても NASの性質なのか、チェックが外れてしまいます。 (前提として、ここの変更は考えていません) そこで、「読み取り専用を推奨する」にしたのですが、毎回メッセージボックスが出るため 「読み取り専用にしない」を選択される場合もあります。 そのため、VBAにその指示を書き込む方法を探していました。 たとえば、以下のコードを試してみました。 しかし、開いたファイルに指示しているため、当然ながら以下のメッセージが出ます。 "***.xls は既に開いています。2重に開くと、これまでの変更内容は破棄されます。***.xls を開きますか?" Private Sub Workbook_Open() Dim Filename As String Filename = ThisWorkbook.FullName With Workbooks.Open(Filename, , True) .ActiveSheet.Activate End With End Sub 「読み取り専用を推奨する」をオンにして、Workbook.Openの引数である ignorereadonlyrecommended を設定する…というのも、 やはり上記の点で引っかかります。 何か方法はないものでしょうか。。。 このコードの間違い箇所が解りません! tes1 の .xls と同じフォルダに 「tes2.xls」 という名前で保存し、閉じる。 というコードなんですが、「tes2.xls」 がなくなってしまいますが、どこが間違ってますでしょうか? 以上 よろしくお願い致します。 --------- Sub tes1() ActiveWorkbook.Close SaveChanges:=True, _ Filename:=ActiveWorkbook.Path & "\tes2.xls" End Sub --------- vbaでファイルを開くパス名に変数を使いたい お世話になります。 下記の様にファイルを開く時のパス名に変数を使用したいのですが、 エラーがかかります。 ご教示頂けます様宜しくお願い致します、 記 Dim mywNm1 As String mywNm1 = Format(Now, "yyyymm") Workbooks.Open Filename:="C:\mywNm1_glp.xls", ReadOnly:=True マクロ:読みとり専用の場合、一部シートを隠す エクセルを開くと、パスワードを入力OR読み取り専用の小窓を出します。 パスワードを入力すると、エクセルを操作でき、 読み取り専用の場合は一部シート、たとえば2シート目以降は隠す、というふうにマクロでできないでしょうか。 読み取り専用等の設定はできるのですが、 特定のシートを隠す設定が、毎回手間がかかるため、マクロにしようと思った次第です。 IFを使ってマクロを組もうとしたのですが、 つなげ方がよくわからず、ご教示頂きたいです。 よろしくお願いします。 ファイル名:#### Sub OpenWorkbook(エクセル1) WorlBooks.Opne FikeName:="####",PassWord:="ABCDE" WorkBooks.Open FileName:="#####",ReadOnly:=True Worksheets("Sheet2").Visible = False End Sub VBA 新規にエクセルを開き既存のファイルを開く VBAで新規にエクセルのアプリケーションを起動し、 その中に既存のファイルを起動する方法は有りますか? Sub Sample() Dim appExcel As Excel.Application Dim WSH As Variant Dim strPath As String Set appExcel = New Excel.Application Set WSH = CreateObject("Wscript.Shell") strPath = ActiveWorkbook.Path With appExcel .Visible = True .Workbooks.Add .ActiveWorkbook.SaveAs (strPath & "\ test.xls") End With Set WSH = Nothing End Sub このコードは、ネットから拾ったサンプルコードなのですが 新しいアプリケーションでエクセルを立ち上げることはできたのですが 新規のブックが開いてしまい、 更に、開きたいファイルに上書き保存してしまいそうです。 新規のブックが開く原因は .Workbooks.Addで、 上書き保存する原因は .ActiveWorkbook.SaveAs だとわかってるのですが、 この部分を同変更すればいいのかがわかりません。 Workbooks.Open?Filename:="C:\Users\test.xlsx" だと、現在実行しているvbaファイルを同じ枠内で 該当のファイルが開いてしまいます。 Excel : OpenTextメソッドが正常に動作しないのはなぜ? 下記のようなマクロを作りました。 Sub sample() FileName = ThisWorkbook.Path & "\test.txt" Workbooks.OpenText FileName:=FileName, Comma:=True ActiveWorkbook.SaveAs FileName:=FileName, FileFormat:=xlCSV ActiveWorkbook.Close End Sub test.txt には次のテキストが書かれています。 "あ"," あ " 上記のマクロを実行すると、テキストの中身は次のようになってしまいます。 """あ"",""",あ,"""" 本来であれば、テキストの内容には変化が全くないはずだと思います。 原因が不明なのですが、マクロの動作確認をしたところ、 OpenTextメソッドでテキストを開いたときにすでに、 カンマの位置で区切られてセル内に入っていませんでした。 どのようにすればOpenTextメソッドは希望する動作をしてくれるのでしょうか? CreateObjectとGetObjectの違い 当方エクセル2003です。 Sub test_CreateObject() Dim App As Excel.Application Dim MyFileName As String Set App = CreateObject("Excel.Application") MyFileName = ActiveWorkbook.Path & "\新規Microsoft Excel ワークシート.xls" With App .Workbooks.Open FileName:=MyFileName .Visible = True End With Set App = Nothing End Sub --------------------------------------------------------- Sub test_GetObject() Dim App As Excel.Application Dim MyFileName As String Set App = GetObject(, "Excel.Application") MyFileName = ActiveWorkbook.Path & "\新規Microsoft Excel ワークシート.xls" With App .Workbooks.Open FileName:=MyFileName .Visible = True End With Set App = Nothing End Sub この二つは何が違うのでしょうか? どちらも既存のエクセルファイルがが開きます。 vb2008 での記述が分かりません。教えて下さい。 本当に初心者ですみません。 ネットワークサーバにあるExcelファイルが読取り専用だったら、そのまま閉じる。というコードを書きたいのですが、 If xlApp.Activeworkbook.ReadOnly = True Then (処理) End if ではダメですよね。 ご教授方よろしくお願いします。 ヤバいパソコンが壊れたかも!?事前に知っておきたい3つの兆候と対策 OKWAVE コラム Workbooks.openについて 超初心者です。 Workbooks.Openを使って他の任意のxslファイルを開きたいのですが、 Sub Test_FileOpen() Workbooks.Open Filename = "c:\MyDocuments\data.xls" End Sub のように書いても 「実行時エラー'1004': 'False.xls'が見つかりません。ファイル名およびファイルの保存場所が正しいかどうか確認してください」 と言うアラートが出て上手くいきません。 ファイルのパスは何度も確認したので間違いはないです。 ちなみに同じフォルダに置いて、 Sub Test_FileOpen() Workbooks.Open Filename = ThisWorkbook.Path & "\data.xls" End Sub とやっても同じアラートが出ます。 どこがおかしいのでしょうか? 原因が推測できる方、どうかご教授願います。 EXCELVBAでONEDRIVE上への保管方法 EXCEL ファイルの VBAで、 OneDrive上の ファイルを コピーして XLSX および XLS旧フォーマット 両方の 保存形式で ファイルを 保管しようとしています。 WINDOWS8.1 EXCEL2013 を 使用しています。 ONEDRIVE上へ、コピー作成する同名ファイルがなく、 新規のファイルを コピー作成する場合は 『Microsoft Excelは動作を停止しました。』 というエラーが (ファイルをコピー作成していますが)、 出てしまいます。 上書きする場合は エラー がでない模様です。 ' Sub 旧EXCEL形式保管() ' Application.DisplayAlerts = False ' Dim PathName, FileName1, FileName2, FileName3 As String ' PathName = ActiveWorkbook.Path FileName1 = "テスト.xlsx" FileName2 = "テストCOPY旧.xls" FileName3 = "テストCOPY新.xlsx" ' Workbooks.Open Trim(PathName) & "\" & Trim(FileName1) Windows(Trim(FileName1)).Activate ' ActiveWorkbook.SaveAs Filename:=Trim(PathName) & "\" & Trim(FileName3) ActiveWorkbook.Close ' Workbooks.Open Trim(PathName) & "\" & Trim(FileName1) Windows(Trim(FileName1)).Activate ' If Application.Version < 12 Then ActiveWorkbook.SaveAs Filename:=Trim(PathName) & "\" & Trim(FileName2), FileFormat:=xlExcel9795 Else ActiveWorkbook.SaveAs Filename:=Trim(PathName) & "\" & Trim(FileName2), FileFormat:=xlExcel8 End If ' ActiveWorkbook.Close ' End Sub ' より効率的な VBA記述、 エラーへの対処方法 を 教えていただけないでしょうか? よろしく お願いします。 親フォルダを取得したい Sub test1() Dim mystr As String mystr = ActiveWorkbook.Path End Sub これだと、現在のアクティブブックのファイル名以外のパスが取得できるのですが、 mystr = ActiveWorkbook.Parent.Path にすると、なぜか C:\Program Files (x86)\Microsoft Office\Office14 が返ります。 ActiveWorkbook.Path の返り値が C:\新しいフォルダー だとしたら、 C: のみが取得されるコードが知りたいのですが、 ActiveWorkbook.Parent.Path ではダメなようなので、正しいコードを教えてください。 Excel VBAで異なるファイル間のコピー 異なるファイル間で値のみをコピーしたいです。下記の様な感じです。 hoge1.xlsのA1からA10のセルの値のみをhoge2.xlsのB1からB10へコピーする。 以下の様に書いてみたのですが、数式がコピーされてしまいます。 VBAをやったことがなく、今ネットで30分ほど見て書いてみたので 根本的に理解していません。簡単な書き方を教えていただきたいです。 Sub test() Dim Fname As String Fname = "hoge1.xls" Workbooks.Open Filename:=Fname, ReadOnly:=True Dim range1 As Range Set range1 = Worksheets("Sheet1").Range("A1:A10") range1.Copy Destination:=Workbooks("hoge2.xls").Worksheets("Sheet1").Range("B1:B10") End Sub また、ファイルを開いたり閉じたりは必要なのでしょうか? Workbooks.Open Filename:=Fname, ReadOnly:=True を書かずに、いきなり Set range1 = Workbooks("hoge1.xls").Worksheets("Sheet1").Range("A1:A10") はダメなのでしょうか?? よろしくお願いします。 エクセル保存出来ない様にするには。 エクセル保存出来ない様にするには。 お世話になります。 自宅でExcel2002VBA、職場でExcel2003VBAを使用しています。 職場で原紙ファイルに書き込み保存してしまう人がいる為、その対策として ボタンを設けて読取専用モードで、原紙ファイルを開く手順にしています。 Workbooks.Open Filename:=totoFullName, ReadOnly:=True 確かに上書き保存は出来ませんが、名前を変えて保存しますかメッセージが表示され保存可能な状態になってしまいます。 名前を変えて保存を含め、全ての保存が出来ない用にする方法がありましたら 教えて頂きたくよろしくお願いします。 EXCEL VBA のブック操作 完全に自己流でEXCEL2000のVBAを作成しています。 とても単純な操作なのですが、思い通り動きません。 どうかご教授ください。 よろしくお願いします。 Main ファイルとSubファイルがあります。【パス名とファイル名は指定済み】 ブック内のシートの構成は全く同じになっています。 (MainファイルのVBAを実行後Subファイルが作成されます ファイル名は作成日を入れて保存していっています。) それで以前作成したデータを利用するために、 MainファイルのVBAを実行中にSubファイルを開き参照したいシートを Mainファイルにコピーし、Subファイルを閉じたいのですが フォーカスがうまくいかず、Mainファイルが閉じてしまいます。 何がおかしいのでしょうか? Workbooks.Open Filename:=SubFile Sheets("Sheet1").Select Worksheets("Sheet1").Name = "ASheet" Sheets("ASheet").Copy After:=Workbooks(MainFile).Sheets(TotalSheet) Workbooks(SubFile).Activate ActiveWorkbook.Close Workbooks(MainFile).Activate Sheets(TsumSheet).Select オープンしてコピーまではできているのですが・・・ マクロでの自動保存 エクセルで作ったデータをボタン一つで自動的に特定のフォルダーに 保存するマクロを作りたいのですが、色々なサイトを参考に保存名前を 付けて保存するプログラムまでは組めたのですが、特定のフォルダに 保存していくプログラムがうまく動きません。 下記に作成したコードを記載するので、アドバイスお願いします。 Sub データ保存() Sheets("シート名").Select パス = ActiveWorkbook.Path 別名 = Application.InputBox(prompt:="入力例.12345", _ Title:=" ファイル名を入力して下さい", Type:=2) 別名 = パス & "\" & 別名 & ".xls" Sheets("シート名").Copy ActiveWorkbook.SaveAs Filename:=別名 ActiveWorkbook.Close End Sub VBAでファイルを閉じる時に、他のエクセルファイルを閉じるには? VBAで、 Private Sub Workbook_Open() Workbooks.Open FileName:="バス時刻表.xls",ReadOnly:=True End Sub で、バス時刻表.xlsを自動的にオープンした後、 閉じる時に、 Private Sub Workbook_BeforeClose(Cancel As Boolean) Workbooks("バス時刻表.xls").Close End Sub で記述したら、エラーとなります。 どのようにすればいいのでしょうか? よろしくお願いします。 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ パソコン・スマートフォン ソフトウェア Excel(エクセル)Word(ワード)PowerPoint(パワーポイント)Access(アクセス)その他MS Office製品オフィス系ソフトPhotoshop(フォトショップ)Illustrator(イラストレーター)その他Adobe製品画像・動画・音楽編集ホームページ作成ソフト筆まめ・はがき作成フリーウェア・フリーソフトその他(ソフトウェア) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
保存してる場合は、そのファイルを読み取り専用モードにして、 保存してない場合は、同じファイルを新規に開いて 読み取り専用モードにするという事ですね。