EXCEL VBAについて質問があります。もしかしたら初歩的なことかもしれませんがよろしくお願いいたします。
まず、
Sub Test()
Dim i As String
i = InputBox("好きな果物を入力してください")
Sheets("Sheet1").Range("A1").Value = i
End Sub
を実行し、ブックを保存して終了する。
ブックを開く
Private Sub Workbook_Open()
Dim k As String
k = Sheets("Sheet1").Range("A1").Value
If k = "みかん" Then
MsgBox ("a")
Else: MsgBox ("b")
End If
End Sub
この処理を
Sheets("Sheet1").Range("A1").Value = i
というシート上のセルに値を保存するという方法を取らずに
iの値をブック終了後もプロシージャ内に持っておくというのは可能なのでしょうか。
Publicで宣言してもブックを一度閉じると
やっぱりiの値は保存されませんでした。
どうぞよろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
こんばんは。
一般的には、CustomDocumentProperties を使います。
なお、変数の'i' はインクリメントのi ですから、String型などにはあまり使いません。
サンプルを書きます。
'-------------------------------------------
Sub Test1()
Dim strTxt As Variant
strTxt = Application.InputBox("好きな果物を入力してください", Type:=2)
If VarType(strTxt) = vbBoolean Or strTxt = "" Then Exit Sub
On Error GoTo ErrHandler
'MyFavorite に、登録する
ThisWorkbook.CustomDocumentProperties("MyFavorite").Value = strTxt
Exit Sub
ErrHandler:
'プロパティがない時に、プロパティ項目を新たに作る
With ThisWorkbook.CustomDocumentProperties
.Add Name:="MyFavorite", _
LinkToContent:=False, _
Type:=msoPropertyTypeString, _
Value:=strTxt
End With
Resume Next
End Sub
'-------------------------------------------
Private Sub Workbook_Open()
Dim strTxt As Variant
strTxt = ThisWorkbook.CustomDocumentProperties("MyFavorite").Value
If strTxt = "みかん" Then
MsgBox "a", vbInformation
Else
MsgBox "b!" & vbCrLf & "Your Registration: " & strTxt, vbExclamation
End If
End Sub
'=============================================
他に、iniファイルを使う方法もありますが、Office からですと、タイミングがあまりよくありません。
ありがとうございました。やりたいことが出来ました。
カスタムプロパティについてざっとネットで見ましたが、知らないやり方だったので非常に勉強になりました。
変数も気をつけます。動けばいいというレベルのいい加減なコードをよく書いてしまうので、メンテをするときに自分でもわからなくなることがあります。
また何かありましたらよろしくお願いいたします。
No.1
- 回答日時:
他のブックのモジュールから実行し、そちらにモジュールレベルの
変数として宣言してあれば、そのブックを開いている間は保持されますが
(VBAのプロジェクトがリセットされる様な事態があると消えてしまいます)
>ブックを保存して終了する。
とエクセルを終了してしまうのであれば無理です。
そのブックに残したくない理由は分かりませんが、他には、
1.テキストファイルで適当な場所に保存しておく
2.PERSONAL.XLS(個人用マクロブック)がシートを持てるのでそちらに保存しておく
3.レジストリに保存する
http://officetanaka.net/excel/vba/tips/tips43.htm
くらいしか思いつきません。
4.禁じ手ですが、自分自身のVBAコードの定数値を書き換えるなんて事も可能らしいです。
数案あげてみましたが、そのブックに保存するのが一番だと思います。エクセルならではのメリットを享受すべきです。必要ならシートを隠す、VBAからしか、可視化出来ない隠しシートにするなんて事も可能です。(既にご存じでしたら、悪しからず)
目的をお示しいただけると、良案が回答されるかもしれません。
ご回答ありがとうございました
3のレジストリに保存する方法は知らなかったので勉強になりました。
いつもはご教示のとおり非表示上のシートにデータを残しており、特に不都合は感じでいないのですが、
ふと他にもやり方があるのではないかと思って質問をさせていただきました。
また何かありましたらよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/03/25 08:33
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) Excleマクロ セル値の代入と文字列の結合について 3 2022/10/05 16:47
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
ファイルを終了しても、値を保持する。
Excel(エクセル)
-
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
-
4
ユーザーフォームに入力したデータを保持する方法
Visual Basic(VBA)
-
5
ユーザーフォームのテキストボックスに前回入力した値を表示する Excel
Visual Basic(VBA)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
エクセルでエラーが出て困っています。
Excel(エクセル)
-
8
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
9
配列の参照渡しで型が一致しません。
Visual Basic(VBA)
-
10
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
11
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
12
【Excel VBA】CSV取込時、数字の先頭の0を消えないようにするには?
Excel(エクセル)
-
13
VBAのFind関数で結合セルを検索するとヒットしない
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
エクセルを共有するとPCによっ...
-
エクセルで参照しているデータ...
-
WorkBooksをオープンさせずにシ...
-
エクセルで50行ごとに区切った...
-
エクセルで「ディスクがいっぱ...
-
エクセル2016です。「ブッ...
-
エクセルにおける,「ブック」...
-
ブックのピボットを別ブックに...
-
Excelファイルをダブルクリック...
-
VBA フォルダ内の全ブック、さ...
-
Excel VBAでブックを閉じる時、...
-
フォルダ内の複数ブック・シー...
-
エクセルファイルをオープンし...
-
フォルダ内の複数ファイルから...
-
同じフォルダへのハイパーリン...
-
エクセルファイルを開かずにpdf...
-
Excelでブックの共有を掛けると...
-
【マクロ】【VBA】別ブックへの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
VBAでブックを非表示で開いて処...
-
エクセルの関数 ENTERを押...
-
エクセルで参照しているデータ...
-
WorkBooksをオープンさせずにシ...
-
(マクロ)vlookupの元データを同...
-
Excelでブックの共有を掛けると...
-
Excel(2010)のフィルターが保...
-
エクセルで「ディスクがいっぱ...
-
Excelで複数ブックの同一セルに...
-
複数ファイルから特定シートの...
-
エクセルで別ブックをバックグ...
-
エクセルでウィンドウの枠固定...
-
Excelファイルをダブルクリック...
-
フォルダ内の複数ファイルから...
-
エクセルファイルを開かずにpdf...
-
外部ブック参照が#REF!になって...
-
エクセルで複数のシートを別フ...
-
エクセルシートの一部を送りたい
-
エクセルで50行ごとに区切った...
おすすめ情報