質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

Q&A

解決済

2回答

1897閲覧

Workbook_Open()で取得した変数を参照したい~オブジェクトをまたいだ変数の取得~

ypk

総合スコア80

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

0グッド

0クリップ

投稿2021/06/20 02:16

編集2021/06/20 03:47

エクセルを立ち上げた時に取得した変数を、エクセルを立ち上げた後に比較して処理を変化させたいと考えております。

しかし、値が空になってしまい、うまく実現できません。どのように対処したらよいのでしょうか。
よろしくお願いいたします。

できたこと

Dim before As String Private Sub Workbook_Open() Sheets(1).Fromテキスト = Format(Date, "yyyymmdd") Sheets(1).TextBox1 = "A社" Sheets(1).TextBox3 = "東京都新宿区" Sheets(1).TextBox4 = "テストタロウ" 'コンボボックスに項目を追加 Sheets(1).ComboBox1.AddItem "0" Sheets(1).ComboBox1.AddItem "1" Sheets(1).ComboBox1.AddItem "2" '初期値を指定 Sheets(1).ComboBox1.ListIndex = 0 before = Sheets(1).TextBox1 & Sheets(1).TextBox3 & Sheets(1).TextBox4 & Sheets(1).ComboBox1 End Sub
Private Sub CommandButton1_Click() Dim after As String Dim 結果 As String after = Sheets(1).TextBox1 & Sheets(1).TextBox3 & Sheets(1).TextBox4 & Sheets(1).ComboBox1 If before <> after Then 結果 = MsgBox("値が変更されていますがよろしいですか?", vbYesNo) End If End Sub

Excel画面

イメージ説明

イメージ説明

変数befroeがこのままだと空になります。beforeにブックを立ち上げた時に格納した値(Sheets(1).TextBox1 & Sheets(1).TextBox3 & Sheets(1).TextBox4 & Sheets(1).ComboBox1)を保持し、「実行!」ボタンを押下したときに変数afterと比較をするためにはどのようにしたらよいのでしょうか。

どうぞよろしくお願いいたします。

追記

自分が実現したいことについて、下記のようなソースコードを書いてみたところうまくいきました。
ただ、もっと賢いやり方があるような気がしてなりません。。。。

Private Sub Workbook_Open() Sheets(1).Fromテキスト = Format(Date, "yyyymmdd") Sheets(1).TextBox1 = "A社" Sheets(1).TextBox3 = "東京都新宿区" Sheets(1).TextBox4 = "テストタロウ" 'コンボボックスに項目を追加 Sheets(1).ComboBox1.AddItem "0" Sheets(1).ComboBox1.AddItem "1" Sheets(1).ComboBox1.AddItem "2" '初期値を指定 Sheets(1).ComboBox1.ListIndex = 0 Range("A10000").Value = Sheets(1).TextBox1 & Sheets(1).TextBox3 & Sheets(1).TextBox4 & Sheets(1).ComboBox1 If A10000 <> "" Then Range("A10000").Hidden = True End Sub
Private Sub CommandButton1_Click() Dim after As String Dim 結果 As String after = Sheets(1).TextBox1 & Sheets(1).TextBox3 & Sheets(1).TextBox4 & Sheets(1).ComboBox1 If Range("A10000").Value <> after Then 結果 = MsgBox("値が変更されていますがよろしいですか?", vbYesNo) End If End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

たとえばこんな感じでどうでしょうか。

VBA

1Private Sub Workbook_Open() 2 3 4 Sheets(1).Fromテキスト = Format(Date, "yyyymmdd") 5 6 Sheets(1).TextBox1 = "A社" 7 Sheets(1).TextBox3 = "東京都新宿区" 8 Sheets(1).TextBox4 = "テストタロウ" 9 10 'コンボボックスに項目を追加 11 Sheets(1).ComboBox1.AddItem "0" 12 Sheets(1).ComboBox1.AddItem "1" 13 Sheets(1).ComboBox1.AddItem "2" 14 15 16 '初期値を指定 17 Sheets(1).ComboBox1.ListIndex = 0 18 19 ThisWorkbook.BuiltinDocumentProperties("Comments").Value = Sheets(1).TextBox1 & Sheets(1).TextBox3 & Sheets(1).TextBox4 & Sheets(1).ComboBox1 20 21 22End Sub 23 24Private Sub CommandButton1_Click() 25 26 Dim after As String 27 Dim 結果 As String 28 29 after = Sheets(1).TextBox1 & Sheets(1).TextBox3 & Sheets(1).TextBox4 & Sheets(1).ComboBox1 30 31 If ThisWorkbook.BuiltinDocumentProperties("Comments").Value <> after Then 32 結果 = MsgBox("値が変更されていますがよろしいですか?", vbYesNo) 33 End If 34 35 36 37End Sub

BuiltinDocumentProperty というExcelにもともと用意されている機能を使っています。

投稿2021/06/20 04:58

編集2021/06/20 05:11
jinoji

総合スコア4585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ypk

2021/06/20 05:05

ありがとうございます。 もう少し、詳しく教えていただいてもよろしいですか? VBAにソースコードを入れてみようとしたのですが、どう使うのかいまいちよくわからず。。。
jinoji

2021/06/20 05:12

追記しました。
ypk

2021/06/20 05:14

ご丁寧にありがとうございました! 助かりました。 今後ともよろしくお願いいたします。
guest

0

自分で考えましょう!!!!!!!!!!!!!!!

投稿2021/06/20 02:17

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ypk

2021/06/20 02:24

そういう回答は不要です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問