[[20160611090857]] 『Excelのウィンドウがアクティブになった時、メッメx(くまくま) ページの最後に飛ぶ

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

 

『Excelのウィンドウがアクティブになった時、メッセージを出したい』(くまくま)

 こんにちは

 Excelのウィンドウがアクティブになった時、メッセージをマクロで出したいと思っています。
 別のブックから該当のブックになった時は、「Workbook_WindowActivate」や「Workbook_Activate」できるのですが、
 別のアプリケーション(IEなど)からアクティブになった時は、メッセージを出せません。

 なにかいい方法はありませんでしょうか?
 ご教示ください。よろしくお願いします。

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


 現在のトップウィンドウのハンドルを GetForegroundWindow で取得し、自分自身のハンドルと比較することになると思いますが
 問題は イベント感知ができないことですね。
 監視ループ(その方法はいろいろあると思いますけど)を準備することになりますが、メッセージを出したい目的は?

 目的によっては別の解決策があるかもしれません。

(β) 2016/06/11(土) 09:46


 βさん  ご回答ありがとうございます。

 本来やりたいことは、特定のブックのみでのコピペの禁止です。
 マクロ無効で開かれるのは仕方ないのですが、それ以外の動作では禁止したいと思っているのです。

 考えたのが、クリップボードの中を空にするということです。
 該当ブックがアクティブになったり、非アクティブになったとき、空にしてしまえばいいかなと思ったのです。

 クリップボードカラにするコードは書けました。また、ウィンドウの監視も  
 http://toriaezumudai.seesaa.net/s/article/369130875.html
 のサイトを参考にして、ある程度できました。

 ontimeを使って、ある程度監視はできるのですが、どうしても画面がチラついてしまいます。

 実際書いたコードは会社にあるため、提示できないこと。詳しい事情を伝えなかったこと、大変申し訳ありませんでした。

 何かいい方法ありましたら、ご教示ください。よろしくお願いします。
(くまくま) 2016/06/11(土) 11:53

 監視サイクルが、参考にされたサイトのように 1秒単位でいいかどうかは、くまくまさんが判断することですから
 それはさておき。

 (といいながら、たとえば SetTimer/KillTImerでもう少しきめ細かくチェックする方法もあるでしょうし
  βなら、上級者さんからのお叱りは覚悟で DoEvents をはさんだループを裏でがんがんまわすかも)

 質問は、【Excelのウィンドウがアクティブになった時、メッセージをマクロで出したい】ということではなく
 その感知はできているけど、
 その時の処理(クリップボードを空にする処理)で、画面がちらちらする、それを防ぎたい と、これが【正しい質問】ですか?

 ががが〜ん!! です。(疲れます)

 どういう処理をしておられるのかわかりませんが、クリップボードが空なら その処理をしないということをされたら
 いいのではないですか?

 でも、どういう処理をしているのかがわからないので、具体的なコメントはできません。

(β) 2016/06/11(土) 13:08


 こんにちわ。

 >本来やりたいことは、特定のブックのみでのコピペの禁止です。

 これの目的は何でしょうか?

 特定ブックのデータや書式がコピペで壊れるのを防ぎたいと言う事でしょうか?
 それとも特定ブックの内容を他にコピーさせない(情報漏洩防止)のが目的ですか?

 1つ目のデータや書式の保護が目的と言うのであれば、ThisWorkbookに以下を記述して代用出来そうですけど、

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

    Application.EnableEvents = False
    If Application.ClipboardFormats(1) > -1 Then Application.Undo
    Application.EnableEvents = True

 End Sub

 Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

    Application.EnableEvents = False
    If Application.CutCopyMode > 0 Then Application.CutCopyMode = False
    Application.EnableEvents = True

 End Sub

 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    Application.EnableEvents = False
    If Application.CutCopyMode > 0 Then Application.CutCopyMode = False
    Application.EnableEvents = True

 End Sub

 2つ目のような事が目的なら、VBAでは悪意のある人の操作を完全に防ぐのは無理じゃないですか?

(sy) 2016/06/11(土) 16:36


 お世話になっております

 syさん βさんご回答ありがとうございます。
 本来やりたいことを最初に告げておらず大変申し訳ありませんでした。
 情報漏えいの防止まではいかないのですが、コピペをすることによるミスの防止が目的で、
 やりたいことは、2016/06/11(土) 11:53で申し上げたとおり「特定ブックでのコピペの禁止」です。

 syさんのおっしゃられる、Workbook_SheetChange等のイベントを使ってみたのですが、
 別のアプリケーションからアクティブにした場合、イベントプロシージャが動きません。

 ですのでontimeを使ってウィンドウの監視をし、ウィンドウがアクティブに変わったらクリップボードの中を空にしようと思いました。
 そのため、Excelのウィンドウがアクティブになった時のイベントをハンドルできないかと考え、質問に至った次第です。
 別のサイトを参考(http://toriaezumudai.seesaa.net/s/article/369130875.html)にして書いたのですが、
 ontimeで1秒ごとに監視すると、アクティブウィンドウの名前をイミディエイトウィンドウに表示させるだけでも画面がちらついてしまいます。
 監視しているだけで、ちらつくようだと使いにくいのです。

 コピペの禁止については、http://www.saka-en.com/office/vba-copy-paste-disabled-excel/のサイトも参考にしました。
 ただ、このやり方だとすべてのブックに影響してしまいます。特定のブック(Thisworkbook)だけコピペを禁止したいのです。

 βさんのおっしゃられた、ミリ秒単位で監視は試していませんでしたので、試してみたいと思います。
 syさんのおっしゃられるとおり、完全に防ぐことはできませんし、マクロの無効で意味をなさなくなることは承知しております。

 最終的にできないとわかれば妥協点も見いだせるのですが、やれるところまではやっておきたいです。
 ご教示いただけませんでしょうか。よろしくお願いします。
(くまくま) 2016/06/11(土) 18:00

 >syさんのおっしゃられる、Workbook_SheetChange等のイベントを使ってみたのですが、
 >別のアプリケーションからアクティブにした場合、イベントプロシージャが動きません。

 私の記述した方法は、他のアプリなどでコピーしてクリップボードが空じゃない時に、
 該当ブックに貼り付けた時に元に戻すと言うものですが、

    If Application.ClipboardFormats(1) > -1 Then 

 クリップボードが空じゃないのに、上記の判定がTRUEにならないと言う事ですか?

 もし提示の方法でアンドゥが働かないケースがあれば、私の勉強不足だと思いますので申し訳ありません。
 どのようなケースではTRUEにならないのか、教えて下さい。

 文章間違えました、少し修正(18:23)

(sy) 2016/06/11(土) 18:14


お邪魔します
試してみたら、貼り付け時だけでなく、手入力でもUndoが働きます。

(マナ) 2016/06/11(土) 18:36


 To マナさん

 あっ!ホントですね。
 クリップボードが空じゃ無い時は手入力も受け付けませんね。

 やっぱりタイマー監視じゃないと難しいのかな?

 ちょっと中途半端ですが、ThisWorkbookモジュールの宣言セクションで以下を宣言して、

 Private Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As Long
 Private Declare Function CloseClipboard Lib "User32" () As Long
 Private Declare Function EmptyClipboard Lib "User32" () As Long

 Workbook_SheetSelectionChangeイベントを以下に修正すれば、クリップボードを空に出来ますが、
 ウィンドウをアクティブにした時に、目的のセル番地だったらわざわざ選択位置を変えたりしないでしょうねぇ。。。

 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    Application.EnableEvents = False
    OpenClipboard (0&)
    EmptyClipboard
    CloseClipboard
    If Application.CutCopyMode > 0 Then Application.CutCopyMode = False
    Application.EnableEvents = True

 End Sub

 一応貼付後に、元に戻した後、クリップボードを空にしておいた方が良いので、
 Workbook_SheetChangeイベントも以下に修正した方が良いかな。

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

    Application.EnableEvents = False
    If Application.ClipboardFormats(1) > -1 Then
        Application.Undo
        OpenClipboard (0&)
        EmptyClipboard
        CloseClipboard
    End If
    Application.EnableEvents = True

 End Sub

(sy) 2016/06/11(土) 18:53


>目的のセル番地だったらわざわざ選択位置を変えたりしないでしょうねぇ。。。

あれっと思うだけで気づかないかも。
わたしだったら、これくらい我慢してよってレベルです。

実は、他の掲示板で、コピペ禁止の質問があって、
昨日から考えていたのですが、紹介してもよいでしょうか。

(マナ) 2016/06/11(土) 19:11


 はい、私は全然かまわないですよ。
 APIは昔どこかのサイトで拾ってきたものですけど(何処かは忘れましたが)

(sy) 2016/06/11(土) 19:14


syさん、ありがとうございます。勉強になりました。(他の掲示板というのは質問箱です)
くまくまさん、これで引っ込みます。お邪魔しました。

(マナ) 2016/06/11(土) 19:32


 そっか、クリップボードを空にするから、

 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    Application.EnableEvents = False
    OpenClipboard (0&)
    EmptyClipboard
    CloseClipboard
    If Application.CutCopyMode > 0 Then Application.CutCopyMode = False
    Application.EnableEvents = True

 End Sub

 の If Application.CutCopyMode > 0 Then Application.CutCopyMode = False は要らないですね。

(sy) 2016/06/11(土) 19:34


 お世話になっております。

 syさん、βさん、マナさんご回答ありがとうございます。
 syさん、大変申し訳ありません。確認がきちんとできておりませんでした。
 2016/06/11(土) 16:36と、2016/06/11(土) 18:53にご教示いただいたコードで大丈夫そうです。 
 単純にIE等のウィンドウから、Excelに画面を切り替えたときにイベントが起動していなかったため、
 確認を怠ってしまいました。
 該当ブックでの「コピーのみの操作」はできてしまいますが、そこは運用でカバーしようと思います。

 みなさん大変助かりました。本当にありがとうございます。

 現物ではないのですが、書いていたコードはおおむねこんな感じです。
 クリップボードを空にするコードは、http://www7b.biglobe.ne.jp/~whitetiger/ex/ex2002092.htmlを参考にさせていただきました。
 ontimeをしようしているため、1秒未満では監視できません。βさんに教えていただいた「SetTimer KillTImer」を参考にし、今後の課題にしようと思います。

 Private Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As Long
 Private Declare Function CloseClipboard Lib "User32" () As Long
 Private Declare Function EmptyClipboard Lib "User32" () As Long
 Private Declare Function GetForegroundWindow Lib "User32" () As Long
 Private Declare Function GetWindowText Lib "User32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
 Private Declare Function SetForegroundWindow Lib "User32" (ByVal hwnd As Long) As Long
 Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

 Private wkHwndTarget As Long
 Private ti As Variant

 Private Sub 実行()
     Call GetWindowTitle
     SetForegroundWindow wkHwndTarget
     Application.Wait Now() + TimeValue("00:00:01")
 End Sub

 Private Sub 停止()
     Application.OnTime ti, "GetWindowTitle", , False
 End Sub

 Private Sub GetWindowTitle()
     Dim wkTime As Date
     Dim wkStr As String
     Dim wkHwnd As Long

     wkHwnd = GetForegroundWindow
     wkStr = String(100, Chr(0))
     GetWindowText wkHwnd, wkStr, Len(wkStr)
     wkHwndTarget = wkHwnd
     If wkStr Like "*" & ThisWorkbook.Name & "*" Then
         OpenClipboard (0&)
         EmptyClipboard
         CloseClipboard
     End If
     ti = Now + TimeValue("00:00:01")
     Application.OnTime ti, "GetWindowTitle"
 End Sub
(くまくま) 2016/06/11(土) 20:22

 解決ということで祝着ですが、あえてコメントします。

 syさんも指摘しておられますが、

 >>これの目的は何でしょうか?

 保護しておきたいブックのセルを選択した状態で、メモ帳をアクティブにして、そこで文字列をコピーして
 エクセルに戻って Ctrl/v をやるとコピペされてしまいますから、どうしても、コピペを禁止したいなら
 監視ループせざるを得ないわけですけど、2点 コメントします。

 1.言葉の遊びをするわけではありませんが、【コピーを禁止したい】
   これは【要件】ではありません。
   本当は、【何かをしたい、ないしは、何かを防ぎたい】という【要件】があって
   その要件を達成するために くまくま さんが 一生懸命考えられた【仕様】が「コピペの禁止」ということですね。
   その仕様は、要件を満たすために、適切なものかもしれません。
   あるいは、その要件であれば、別の、こんな方策もあるといった、別の【仕様】が考えられるかもしれません。

   ●なぜ、コピペを禁止したいのか。コピペされることで何に困っておられるのか。
    それを明確に説明いただきたいと思います。
    まさか、 100 と入力する。それを、別アプリも含めた別の場所の 100 をコピーしてペーストするのは
    許したくない なんてことではないですよね。書式が壊れてしまうとか?
    であれば、全く別の方策も考えられますよね。
    守りたいブックのシートがどんなものなのか、それが、全く見えないので具体的なコメントはできませんけど
    壊したくない部分に保護をかけておくとか、【要件】によって【仕様】を考えれば、道は開けるかもしれません。

  2.こちらで、簡単な監視ループを書いて、試行してみましたが、【画面のちらつき】なんてことは
    一切発生していません。(クリップボードのクリアは、syさんアップのコードと同じく、APIを使っています)
    どういうコードを書いて、どういうところがちらつくのか、全くわかりませんね。

(β) 2016/06/11(土) 20:48


 余談です。

 マナさんの指摘、クリップボードに何か入っている状態で手入力するとUNDOがきいてしまう。

 これは、きいてもいいのではないですか?

 特別なことをするわけですから、クリップボードにのこったままで入力しちゃいけないという仕様でも
 全く問題ないと(個人的には)思いますよ。
 必要なら、その状態の時は、クリップボードをからにしてから入力をやりなおしてくださいと メッセージをだしてUNDO。

 これでいいと思いますがね。

(β) 2016/06/11(土) 21:01


 ん?

 >該当ブックでの「コピーのみの操作」はできてしまいますが、そこは運用でカバーしようと思います。

 該当ブッック内でのコピペやカット&ペーストなどもキャンセルされる筈ですけど?

 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    Application.EnableEvents = False
    OpenClipboard (0&)
    EmptyClipboard
    CloseClipboard
    Application.EnableEvents = True

 End Sub

 これは他アプリなどからコピーする時に、選択位置を変えればクリップボードを空にして、貼付が出来なくなると言う事と、
 ブック内での CutCopyMode もキャンセルさせる両方の働きを持っています。

 Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

    Application.EnableEvents = False
    If Application.CutCopyMode > 0 Then Application.CutCopyMode = False
    Application.EnableEvents = True

 End Sub

 こちらはシートを切り替えた時に、CutCopyMode をキャンセルすると言うものです。
 でもこちらも
    OpenClipboard (0&)
    EmptyClipboard
    CloseClipboard
 でクリップボードを空にした方が良いかもです。

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

    Application.EnableEvents = False
    If Application.ClipboardFormats(1) > -1 Then
        Application.Undo
        OpenClipboard (0&)
        EmptyClipboard
        CloseClipboard
    End If
    Application.EnableEvents = True

 End Sub

 こちらは貼付け操作を行った後に、貼付前の状態に戻してから、クリップボードを空にしています。

 該当ブックから他のアプリに対するコピペは出来るのと、上記に書いたセル位置を変更しない時は直接入力も受け付けない問題はありますが、
 他アプリ→該当ブック、該当ブック→該当ブックの、コピペやカット&ペーストによる変更は全て回避できる筈ですけど?

(sy) 2016/06/11(土) 21:03


 とりあえず、こちらで、ちょこっと確認していた時のコードをアップします。(見直したら、やはり、ちょこっとベースだったので1か所訂正 22:19)

 なお、StopLoop は 何らかの都合で、監視をやめたいときのための保険用です。

 ThisWorkbookモジュール。

 Private Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) As Long
 Private Declare Function CloseClipboard Lib "User32" () As Long
 Private Declare Function EmptyClipboard Lib "User32" () As Long
 Private Declare Function GetForegroundWindow Lib "User32" () As Long

 Dim DoLoop As Boolean

 Private Sub Workbook_Open()
    Application.OnTime Now(), "ThisWorkbook.CopyNG"
 End Sub

 Sub CopyNG()
    DoLoop = True

    Do While DoLoop
        If GetForegroundWindow = Application.hwnd Then
            If ActiveWorkbook.Name = ThisWorkbook.Name Then
                If Application.ClipboardFormats(1) <> -1 Then
                    OpenClipboard (0&)
                    EmptyClipboard
                    CloseClipboard
                End If
            End If
        End If
        DoEvents
        DoEvents
    Loop

 End Sub

 Sub StopLoop()
    DoLoop = False
 End Sub

(β) 2016/06/11(土) 22:12


質問箱にこのスレのリンクを貼りました。
わたしの好みですが、syさんの回答をおすすめとしました。
「元に戻す」の機能が使えることは、わたしに大きいです。

(マナ) 2016/06/11(土) 23:47


 確かに、元に戻す がきかなくなるのが 監視ループでのクリアでは 悪い副作用ですねぇ。

 ただ、悩ましいのは(あくまでコピペ禁止という仕様が必要だとした場合、悩ましいということです。)
 コメントしましたが、別アプリを表示して Ctrl/c をやってエクセルに戻って
 ほかのシートの選択もブックの選択もセルの選択もしないで、
 そのまま Ctrl/v をやるとコピペできてしまうというところですかね・・

 ★しつこいようですが、なぜコピペ禁止にしたいんでしょうかねぇ・・
  その理由というか目的を知りたいですねぇ。

(β) 2016/06/11(土) 23:59


>そのまま Ctrl/v をやるとコピペできてしまうというところですかね・・

あれっ、syさんのコードでは、Undoが働きまませんか。

(マナ) 2016/06/12(日) 00:05


 >そのまま Ctrl/v をやるとコピペできてしまうというところですかね・・ 

 いえ、それは大丈夫の筈ですけど?

 今同じ操作でUndo働きましたけど。

(sy) 2016/06/12(日) 01:20


 私のコードを纏めると

 他アプリからのコピペ                                  Undoが働き全て禁止+クリップボードをクリア
 自ブック間のコピペ                                    Undoが働き全て禁止+クリップボードをクリア
 自ブック間のカット&ペースト                          Undoが働き全て禁止+クリップボードをクリア
 選択セルを変えた時                                    クリップボードをクリア
 選択シートを変えた時                                  クリップボードをクリア
 他アプリからウィンドウを戻し選択セルを変えなかった時  Undoが働き直接入力も禁止+クリップボードをクリア
 そのまま2回目に入力した時                             入力可能
 それ以外                                              入力可能

 こんな感じです。
 コピペはいかなる場合も禁止で、副作用として初めの1回目は入力も受け付けなくなるケースがあるです。
 自ブックから、他のアプリへのコピペは出来ますけどね。

(sy) 2016/06/12(日) 01:49


 ごめんなさ〜い!!

 一番肝心の Changeイベントを貼り付けていませんでした。

 途中までいれてたんです。
 で、他アプリ等で コピー --> 戻って手入力 -->UNDO。 
 マナさんの指摘があって、私からは、それでいいでしょう、特別なことをしてるのだから
 それぐらいは。

 こうコメントしたのですが、その時に Changeイベントを削除して動きを確認したまま
 ほったらかしにしていたという【おそまつ】でした。

 To くまくまさん

 ということで、コピペ禁止なら、syさんの方法でいきましょうよ。

(β) 2016/06/12(日) 05:54


 βさん、syさん、マナさんご回答ありがとうございます。
 2016/06/11(土) 20:22にも書きましたが、syさんにご教示いただいた方法で、やっていこうと思っています。 
ありがとうございます。
 「該当ブックでの「コピーのみの操作」はできてしまいますが」の件は、

 該当ブックでコピー → IE、メモ帳等へのペースト

 ができるということです。ここは問題にならないよう、別運用でなんとかする方向です。

 2016/06/11(土) 20:48 にβさんがおっしゃられている件です。
 経緯を書きます。
 1.エクセルのファイル(Aブック)があります。これはフォーマットとなるブックで、原則的に内容は手打ちしなければなりません。
  内容には日付、クライアント名、住所等の情報が入っています。手打ちする際は、基本的にIE、紙媒体等を見ながら入力します。

 2.つぎにAブックから名前を付けて保存したBブックというものもあります。これは内容と名前が違う、複数のブックが存在してます。(B1、B2など)

 3.Aブックの内容を記載する際、一部例えばクライアント名などはBブックと同じ場合があるのです。
  この部分で「きっとAもB同じ内容だろう」という発想から、禁止されている、本来Aブックにペーストしてはいけない情報をBブックからコピぺして、内容の記載ミスが発生するのです。
  Bブックを開けないようにしてしまうことも考えましたが、Bブックの内容を見ながら、Aブックに記入すること。Bブックの内容の修正もあるということで却下されました。
  コピーコマンドやショートカットを使えなくする方法も考えましたが、別の普通(コピペ使用可)のブックを開いて同時に作業することもあるといわれ、これも却下されました。

 4.入力する人へルール周知の徹底は当然なのですが、毎月一定の期間のみの作業で、その都度新しい人員を確保しているため、
  教育の徹底が図れない状態になっています。

 目的は2016/06/11(土) 18:00にもあるとおり
  上の経緯から、Aブックから、Bブックを作成する際のコピペ記載ミスを防ぐことにあります。

 目的を達成するために考えた要件は
  1.BブックからAブックへのテキスト内容のコピぺ不可
  2.IE、メモ帳からAブックへのテキスト内容のコピぺ不可
  3.Bブックからメモ帳へのテキスト内容のコピペ不可(メモ帳を参考にして、Aブックを記載することも考えられたため)

 と、考えました。もちろんBブックを見ながら記載する際に、手入力でもミスが発生する可能性があることは承知しています。そこはどうにもなりません。
 コピペ禁止以外の方法があれば教えてほしいです。今までも長文でしたが、さらに長文になると思い、経緯等の記載は避けていました。 
 申し訳ありませんでした。
(くまくま) 2016/06/12(日) 10:38

 >Bブックを見ながら記載する際に、手入力でもミスが発生する可能性があることは承知しています。そこはどうにもなりません。
 >コピペ禁止以外の方法があれば教えてほしいです。

 こう言う事は私の会社でも頻繁に発生していますけど、根本的な解決策はありません。
 ダブルチェックなどで、違う目線でチェックするくらいでしょうか。

 プログラムは魔法ではないので、予め登録されたデータとの比較やありえない桁や法則性のあるデータ以外の入力は規制できますが、
 全く法則性も無く、且つ新規で比較データも無ければ、人間が意識をもって確認する以外に方法はありません。

 ただ住所などは、郵便番号を入力して番地までを自動にするなどの入力支援は可能です。
 後入力された情報をリストに自動で登録して、次回から同じ客先であればリスト選択する事は可能です。
 (この場合も初回登録が間違ってれば、どうしようも無いですけど)

 無限のパターンがある人的ミスを完全に防ぐ事は不可能です。

 一番ベターなのは、責任意識の教育とダブルチェックの徹底でしょうか。

(sy) 2016/06/12(日) 11:13


 なるほど。

 別の場所の100 をコピペしてはだめだ、手打ちでタイプしろ というのはへんですね とコメントしましたが

 【コピペだと安易に間違ったもの、ふさわしくないものを うっかりといれてしまうリスク有り、1文字ずつタイプすれば、それが防げるのでタイプさせたい】
 こういうことだったんですね。納得です。

 であれば、なおさら監視ループ処理は不要で、syさん提示の構成でいいですね。

 ちょっと気になるんですが、

 >>  3.Bブックからメモ帳へのテキスト内容のコピペ不可(メモ帳を参考にして、Aブックを記載することも考えられたため)

 これだと Bブックもコピペ不可?

 >>手打ちする際は、基本的にIE、紙媒体等を見ながら入力します

 【等】ですよね。様々なものを参考にして Aブックに手打ちするわけで、それがメモ帳でもいいわけですよね。
 参考にするだけなら。それを 手打ちで Aブックに入力すればいいのでは?

 ただ、これは私がどうこういうことではないですね。
 できあがった Bブックも、その後の変更時、安易なコピペによる変更は禁止というのも
 わからなくはないです。

 であれば、なおのこと 監視ループはふさわしくないと思いますね。
 Cブックも開いているかもしれないし、Dブックも開いているかもしれないし
 それぞれのブック監視用の監視ループが、いくつも 裏で回っているのは、なんだか
 気持ち悪い部分もありますから。

(β) 2016/06/12(日) 11:26


こんにちは。
興味深く拝見しております。

たいへんそうだなと思っておりましたが、ふと気になったのが
AブックからBブックを作り、BブックからAブックを作るというところ
もちろん必要だからそうしておられるのでしょうが、データの流れとしてはうまくないなぁと
データは一定方向に流してやるほうが、ムリやムダのない(間違いも紛れ込みにくい)システムになります。
どうしても仕方ないなら仕方ないのでしょうが、うまくない、とは思います。

あと、まったくの新しい情報を作成するときはしかたありませんが、
システム内のデータを転記するなら、プログラムでもって、自動的に転記してはと思います。
入力担当に同じものを2度入力させてはいけません。
「自動転記されないものは違うものだから、かならず手入力するように」というルールなら
新人さんにも分かりやすい、徹底しやすいと思います。

( 佳 ) 2016/06/13(月) 07:08


コメント返信:

[ 一覧(最新更新順) ]


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