モードレス・フォーム

Excelのフォームでモードレスかモーダル(要するに通常のフォーム)そうでないかの使い分けは面倒である。
現在のところこれに関したフォームはGerRange.frmしかない1)。この使い方をヘタをするとExcelがよくフリーズするので困る。
NOTE
1) 現在(2020/05/16)では、Tools.xlsmのAppBase.basから呼び出すSelector.frmがモードレス・フォームである。しかし、これはモードレスでもモーダルでもどちらでもいいかが、GerRange.frmはモードレスで呼び出すしか動作はしない

この呼び出しの組み合わせは次の4つのパターンになる。
  1. モードレスフォームからGetRange.frmをモーダルで呼び出す場合は正常に動作する。

  2. モーダルフォームからGetRange.frmをモーダルで呼び出す場合はフリーズする。
    しかし、モーダルフォームから普通のフォームを呼び出す場合は正常に動作する。

  3. モードレスフォームからGetRange.frmをモードレスで呼び出すと起動できないというエラーになった。

  4. モーダルフォームからGetRange.frmをモードレスで呼び出した場合は未確認。
    上でのフリースが多かったので実験用のファイルが飛んでしまったので、こんな実験はやめた(笑)。多分実行できないのかも(不明/もう興味ない)。
結局、このパターンではモードレスフォームからGetRange.frmをモーダルで呼び出すということにするのがいいだろう。

さて、そうして呼び出したものの、これがフリーズしたのではないかと錯覚させる画面(動作)になる。左側の最下段のボタンがその呼び出しだが、画面上にGetRange.frmが一瞬見えた後は、どこかに隠れてしまって、ウンともスンとも反応しない。またフリーズか、と思って、一時はこれを[Ctrl]+[Alt]+[Delete]でタスクマネージャーを呼び出して終了したほどである。



しかし、GetRange.frmが画面に出ているものだとして、シート上で範囲を選択すると、GetRange.frmが画面上の見える所に出てくる。どうやら呼び出し元のフォームの後ろに隠れていただけのようである。かといって、こんな程度のものに元のフォームより大きいようなバカでかいサイズをとることもできない。以前のExcelでは最前面に出てきていたように思う(今はその仕様が変わったのかもしれない)。

この場合、呼び出し元のフォーム「CSVファイルの作成パターン」をデフォルトで表示される位置よりもっと左側(右側でもよい)に表示させておけば、画面の中央にGetRange.frmが邪魔されずに現れることになる。




これの範囲でCSVファイルを作成すると次のようになる。
セル内改行のあるシードをExcelの通常の方法ではなく作成するとこのような形になるようである。
ちなみに、メモ帳はCRLF改行だからLF改行部分は無視されて、このファイルは単純な2行に見える。

- 2017/04/21 -