2017-05-04 14 views
0

私のExcelプロジェクトの1つでは、過去25分間にブックが保存されていない場合、ユーザーに何らかのアクション(MsgBox)を求めるプロンプトが表示されます。Excelバグメッセージボックスの出力がセルに書き込まれます

このメソッドは、Application.OnTimeを呼び出して次のアラートをスケジュールし、一度保存すると再スケジュールされます。

今日、メッセージボックスの内容(および「Microsoft Excel」の追加テキスト&「OK」)がワークシートに印刷され、セルの内容が上書きされるというバグがありました。

ユーザーによれば、マクロはバックグラウンドで実行されておらず、実行される唯一のアクションはワークシート間の切り替えでした。これらのシートにはイベントトリガコードはありません。

私はOnTimeでしたが、安全な方法でしたが、バグが私を驚かせました。

私はいくつかの研究を行って、この問題に関するドキュメントを探していましたが、できませんでした。私はそれが生涯に一度起こるかもしれない低いprobイベントでなければならないと信じています。

私はこのコードを保存するか、またはそれを消去する必要があるかについてのコメントはありますか?
事前に感謝します。

"EDIT 1からOnTime機能によって呼び出される追加のコード

Public Sub NeedToBeSaved() 
' ====================================================================== 
' Description : Periodically checks if the workbook needs to be saved. 
' 
' Comments : AfterSave method takes care of scheduling new check. 
'    Refresh it only if user has not saved 
' ====================================================================== 
    Dim nme As Name 
    Dim dteLastSaved As Date 

    Set nme = ThisWorkbook.Names(gsRNGNAME_LASTSAVED) 
    dteLastSaved = Mid$(nme.value, 2) 

    ' Debug Log 
    ' --------- 
    Debug.Print "----------------------" 
    Debug.Print "Saving Periodic Check" 
    Debug.Print "----------------------" 
    Debug.Print "Worbook is saved:" & vbTab & ThisWorkbook.saved 
    Debug.Print "Last time  :" & vbTab & dteLastSaved 

    If (ThisWorkbook.saved = False) Then 
     MsgBox "File has not been saved in the last " & glAPP_SAVED_FREQ & _ 
       " minutes, please consider saving your changes. " & _ 
       vbCrLf & "(To prevent this message open in read-only mode)" 

     Call SaveOnTimeCheck 

    Else 
     Debug.Print "Not rescheduled" 
    End If 
End Sub 
+0

チャーリー - あなたはquesitonを編集し、 'OnTime'呼び出しでコードを含める必要があります。 –

+0

"セルの内容を上書きする" - セルの内容が画面上で隠されたり上書きされたり、実際のセルの内容が変更されたことを意味しますか? –

+0

私はgimme a secを使用しているコードを追加するつもりです。 問題は、メッセージボックスに出力する文字列によって実際のセルの内容が変更されたことです。 – Charlie

答えて

2

これは私にとって最も可能性の高いシナリオである:

は、誰かがあなたのワークブックの一部のコピーペーストの操作を行います想像してみてください。彼は盲目に慣れていないので、画面ではなくキーボードで見ています。 MsgBoxがポップアップします(彼は気づいていませんが、キーボードにはまだ目がありません)。彼は誤ってMsgBox ctrl + cの内容をコピーし、ブックに貼り付けます。

これは以下のようなメッセージに "---" 追加 "をMicrosoft Excel" や線を追加し、 "OK":

--------------------------- 
Microsoft Excel 
--------------------------- 
Your MsgBox message here … 
--------------------------- 
OK 
--------------------------- 

あなたは簡単にCTRL + Cを押すと、この自分自身を再現することができます MsgBoxが起動しています。その後、Excelに貼り付けます。

このため2つの考えられる理由があります。

  1. 私は、上記の手動コピーペーストシナリオ(最も可能性が高いです)。
  2. また、MsgBoxが起動している間にコピーペーストアクションを実行しているマクロがバックグラウンドで実行されていました(私は100%確信していませんが、これも不可能だと思いますが、そうなら問題を再現できるはずです) 。
+1

確かにメッセージ...メッセージボックスから値をコピーできるかどうかは決して確認したことがありません(クラップクラップ)。私はちょうどユーザーと確認し、彼は確かに彼は確かに時間内にコピー/ペーストしようとしていたと言います。 答えに感謝します。 – Charlie

関連する問題