Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7 Professional : Excel 2010)
マクロ実行する動作を切替えたい
投稿日時: 18/06/08 06:47:00
投稿者: さかき999

excel2010でVBAを書いてる者です。
 
現在、VBAで特定の動作をする関数を作っています。
excel上で右クリックしてメニューを表示し、選択すると実行されるマクロなのですが、
このマクロの動作がA、Bの2種類あり、同じ項目を選択しても過去の実行結果を元にAかBのどちらを実行すべきか切り替えたいです。
過去の実行結果からA、Bどちらを実行すべきかは簡単にできましたが、
その結果を次のマクロ実行時まで持ち越す方法がわかりませんでした。
 
外部ファイルとして変数を退避して保存し、それを実行毎に毎回読み出すしかないのでしょうか?

回答
投稿日時: 18/06/08 07:50:43
投稿者: mattuwan44

ども^^
 
素人の思いつきですが、
非表示のシートに書いてもいいし、
どこか用の無いところにテキストボックスでも配置して(非表示にしておいてもいいのかな?)、
値を記録するのはどうでしょうか?
 
(他の方はどうされてるのかなぁ。。。)

投稿日時: 18/06/08 07:56:29
投稿者: さかき999

ごめんなさい。正確に書かなかったのがまずかったです。
作っているのはアドインで、特定のブックに対するマクロではないのです。
なので、非表示のシートというのがないです。
 
もしかして、そういう場合でもできるのかな?

回答
投稿日時: 18/06/08 08:42:15
投稿者: mattuwan44

アドインファイルは非表示のブックなのですが、
シートを持っているかどうかは知りません。
個人的に興味もないので探る気はありませんので、
ご了承願います。
 
他の回答が付くまで、ご自分で調べてみてはいかがでしょう?
 
https://hirossyi.net/172/settingsave
https://docs.microsoft.com/ja-jp/office/dev/add-ins/develop/persisting-add-in-state-and-settings

回答
投稿日時: 18/06/08 10:31:07
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
過去の実行結果からA、Bどちらを実行すべきかは簡単にできましたが、
その結果を次のマクロ実行時まで持ち越す方法がわかりませんでした。

過去の実行結果からA・Bどちらか判断できるのであれば、
(要するに、次回のマクロ実行で判断できているわけです。)
次回のマクロ実行まで持ち越す(保持する)必要があるのですか?
 

回答
投稿日時: 18/06/10 19:49:54
投稿者: i-brown

アドインが.xlam(Excelファイルをアドインとして保存している)のであれば、Excelファイルを作った時点でワークシートがあれば、マクロからアクセスできます。
ただし、現在開いているワークブックにシートをコピーでもしない限り中身の表示は困難です。
 
定型フォーマットを含むアドインを作ったときはよく使いました。(原紙をアドインに持たせておけば、ユーザーから改変される恐れがかなり少なくなる。)

回答
投稿日時: 18/06/11 20:43:16
投稿者: WinArrow
投稿者のウェブサイトに移動

さかき999 さんの引用:
ごめんなさい。正確に書かなかったのがまずかったです。
作っているのはアドインで、特定のブックに対するマクロではないのです。
なので、非表示のシートというのがないです。
 
もしかして、そういう場合でもできるのかな?

 
>アドイン
「.xlam」ファイル
という前提で、
 
アドインファイルでもシートは、存在します。ブックとして非表示にしているだけです。
また、そのシートにも書き込み可能です。
シートを表示する場合は、テンポラリブックに内容を複写します。
ところが、アドインファイルは、他ブックでも利用するから、基本的に共有ブックという概念になります。、
書き込みする前提でしよう運用する場合は、排他制御を考慮する必要があります。
上書き保存できない可能性もあります。
(普通は書き込みしないと思いますが・・・)

回答
投稿日時: 18/06/11 23:32:06
投稿者: i-brown

レジストリでも使いますか?
Application.SaveSettingとか。
https://msdn.microsoft.com/ja-jp/vba/language-reference-vba/articles/savesetting-statement

回答
投稿日時: 18/06/17 11:15:55
投稿者: 見多目信仁

的を外していたら御免なさい。
Staticが使いえませんか?
モジュールが終わっても値は保持されます。
 
Static Sub Static_subの動作()
    Dim i As String
 
    If (i = "") Then
        MsgBox "今回の値は「Null」です。もう一度起動すると入力した値が保持されその値が表示されます。"
    Else
        MsgBox "前回に入れた値「" & i & "」が表示されました。"
    End If
 
    i = InputBox("文字を入れて下さい", "変更", "東京")
 
    MsgBox i & "を代入しました。Static Subですので値が保持されるのでもう一度起動すると「" & i & "」と表示されます"
    Exit Sub
End Sub
 
Public Sub Public_subの動作()
    Dim i As String
 
    If (i = "") Then
        MsgBox "今回の値は「Null」です。"
    Else
        MsgBox "前回に入れた値「" & i & "」が表示されました。"
    End If
 
    i = InputBox("文字を入れて下さい", "変更", "東京")
 
    MsgBox i & "を代入しましたがPublic Subですので値が保持されませんるのでもう一度起動すると「" & i & "」と表示されません"
    Exit Sub
End Sub

トピックに返信