[[20170407182521]] 『情報更新フラグ』(momo) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『情報更新フラグ』(momo)

エクセルの内容が情報更新されたときに、「New」または記号「★」などのようにフラグを立てることはできますか?

たとえばAという名前のシートが表紙で、項目ボタンがあります。

Aのシートの 項目ボタンを押すとBのシートにリンクします。
Bのシートの内容を更新すると Aシートの 項目ボタンの横に
「New」のような フラグを立てたいのです。

マクロ初心者です。
宜しくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 質問です。

 こういったボタンが複数あって、その中の特定のボタンが押されたあと シートB が変更されたら
 そのボタンの横にフラッグをつけたい という要望ですか?

 それとも、ボタンは決められているのですか?

 それと、ボタンとフラッグを記入する場所の関係ですけど、セル上に配置されたボタンがあったとして
 そのボタンから見て、どこにフラッグを記入したいのですか?

 先に関係しそうな情報にふれておきますと、そのボタンの左上隅が位置するセル、そのボタンの右下隅が位置するセル。
 これらの情報は取得可能です。

 ですから、そのいずれかのセルを基準にして、そのセルの1つ右とか、1つ左とか、そういった取得は可能です。

 あと、要件によっては、ボタンをクリックした時に、どんなマクロで処理されているのかがポイントになる場合もありますので
 そのマクロもアップされると回答が付きやすいと思います。

(β) 2017/04/07(金) 19:49


追加で質問します。
(Q1)Newはどのタイミングで解消するんでしょうか。
(Q2)複数の更新があったとき、どのようにする予定ですか?

(γ) 2017/04/07(金) 19:51


 私からも追加質問。

 ボタンを押さずに シート B を選択して変更した場合は シート A の ボタンのそばには フラッグは立てたくないという要件ですか?
 それとも、ボタンは関係なく、とにかく シート B に変更があれば シートA の所定の場所にフラッグを立てるのですか?

(β) 2017/04/07(金) 19:57


ご回答ありがとうございます。
Aシートには、項目ボタンは複数あります。
ボタンを押すと、それぞれ別のシートを開きます。

各内容のシートで変更があった場合、Aシートの項目ボタンの左上か右上あたりにフラグをあげたいです。
フラグ解消時期は1日経ったら消える想定です。

ファイルをメンテナンスする人が1人いてそれ以外は
Aシートから ボタンを押して活用します。
読み取り専用で参照し、
メンテナンス時だけはずします。

また、A以外はのシートは 図形を貼ることがあります。

(momo) 2017/04/08(土) 17:23


 >フラグ解消時期は1日経ったら消える想定です。 

 ここについては、こちらでは、何も手当てをしていません。
 具体的に、どういったタイミングで、どういったアクションの結果、消すのか、それは momoさんが考えてくださいね。
 その仕様が提示されれば、回答が付くと思います。

 で、メンテナンス結果 New をセットするところのみ。
 (目的が不明なので、こういったことをしてどんないいことがあるのか、こちらではわかりませんが)

 また、以下は、momoさんの意図にはそぐわないものかもしれません。
 実際に何をどうしたいということについて、もう少しQ/Aを重ねたほうがいいとは思うのですが、
 まず、Q/Aのためのたたき台として。

 ThisWorkBookモジュールに。
 コード内で規定しているシート名やボタン名は実際のものにしてくださいね。

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim btnNm As String

    Select Case Sh.Name
        '対象のシートと、それに紐付くシートAのボタン名
        Case "B": btnNm = "ボタン 1"
        Case "C": btnNm = "ボタン 2"
        Case "D": btnNm = "ボタン 3"
    End Select

    If btnNm = "" Then Exit Sub

    Application.EnableEvents = False
    Sheets("A").Shapes(btnNm).TopLeftCell.Offset(-1, -1).Value = "New"
    Application.EnableEvents = True

 End Sub

(β) 2017/04/08(土) 17:44


 たたき台として、もう1例。
 アップ済みのものと比べてどちらが、そちらの構成にマッチするのか、いやいや、どちらも使えないということになるのか
 それは、そのほかのもろもろの状況がどうなのかによって異なってきますのでなんともいえませんが。

 まず、想像ですけど、シートAの各ボタンには標準モジュールに書かれたマクロが登録されていると思います。
 そのマクロが、すべてのボタンで共通なのか、ボタンごとに異なるマクロなのかはわかりませんが
 そのマクロで、目的のシートを Select なり Activate なりしていると思われます。
 あるいは Application.GoTo を使っているのかもしれません。

 いずれにしても、標準モジュールの 宣言部(そのモジュールの、最初のプロシジャ記述の上の部分)に

 Public btnNm As String
 Public TargetSh As Worksheet

 こんな宣言をしておきます。

 で、ボタンに登録されたマクロプロシジャで、目的のシートを選択するコードの下に

    btnNm = Application.Caller
    Set TargetSh = ActiveSheet

 こんなコードを書いておきます。

 こうしておいて、ThisWorkbookモジュールは

 Private Sub Workbook_SheetChange(ByVal SH As Object, ByVal Target As Range)

    If TargetSh Is Nothing Then Exit Sub

    If SH.Name = TargetSh.Name Then
        Application.EnableEvents = False
        Sheets("A").Shapes(btnNm).TopLeftCell.Offset(-1, -1).Value = "New"
        Application.EnableEvents = True
    End If

 End Sub

 こんなようにしておけば、アップ済みのコードではコード内で シートとボタンの紐付けを
 ハードコーディングしていますが、それが不要になります。

(β) 2017/04/09(日) 13:51


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.