MW211 EXIT

devlog
ExcelVBA/ActiveXコントロール無限ループ
2018年08月17日
以下だと無限ループしてしまう。
┌──────────────────────────────────────┐
│Private Sub TextBox_Change()                                                │
│    Me.TextBox.Value = Rnd()                                                │
│End Sub                                                                     │
└──────────────────────────────────────┘

以下は、Excelシート向けのイベント抑止なので効かない。
┌──────────────────────────────────────┐
│Private Sub TextBox_Change()                                                │
│    Application.EnableEvents = False                                        │
│    Me.TextBox.Value = Rnd()                                                │
│    Application.EnableEvents = True                                         │
│End Sub                                                                     │
└──────────────────────────────────────┘

回避方法としては地道にフラグ制御しかないようだ。
┌──────────────────────────────────────┐
│Private mIs無限ループ回避 As Boolean  ' 初期値はFalseになる                 │
│Private Sub TextBox_Change()                                                │
│    If mIs無限ループ回避 Then                                               │
│        mIs無限ループ回避 = False     ' 次回に向けて再初期化                │
│    Else                                                                    │
│        mIs無限ループ回避 = True      ' 代入処理より前に置くこと            │
│        Me.TextBox.Value = Rnd()                                            │
│    End If                                                                  │
│End Sub                                                                     │
└──────────────────────────────────────┘
なお、「mIs無限ループ回避 = True」の位置は、
「Me.TextBox.Value = Rnd()」の前になければ効かないので注意。
分類:ExcelVBA
ライセンス/MAKとKMSの違い
2018年08月16日
マイクロソフトのライセンス、MAKとKMSの違いについて。

【MAK(マルチプルアクティベーションキー)】
  インターネットを経由して各PCが直接マイクロソフトに認証を行う方式。
  認証回数に上限がある。

【KMS(キーマネジメントサービスキー)】
  認証用PC(KMSホスト)にライセンスを設定(KMSをインストール)し
  ネットワーク上の他のPCはそれを介して認証を行う方式。
  有効期限がある。

かつてはMAKが標準だったが(それしかなかったが)、WindowsVista以降、
KMSが標準となっているので、MAKとする場合には手続きが必要。
分類:Windows
ExcelVBA/テキストボックスの数式は255文字制限
2018年08月15日
テキストボックスの数式欄にセル参照を指定すると
そのセルの内容をテキストボックス内に表示できるが
最大255文字までという制限がある。(末尾が途切れてしまう)

代案は以下の通り

○「ActiveXコントロールのテキストボックス」のLinkedCellにセル参照を設定
  △稀に印刷時にExcel例外が発生する場合がある
    →但し、LinkedCellに一旦別のセル参照を設定してみると回避できた

×「テキストボックス」の数式欄にセル参照を設定
  ×255文字までしか表示できない

×「画像」の数式欄にセル参照を設定
  ×元セルの表示領域しか表示できない
    画像扱いなので領域を拡大すると文字サイズが大きくなる

×「フォームコントロールのラベル」の数式欄にセル参照を設定
  ×255文字しか表示できない
  ×フォントの指定ができない
  ×罫線の指定ができない

×「ActiveXコントロールのラベル」
  ×セル参照を設定できない
分類:ExcelVBA
Excel/ActiveXコントロールのテキストボックス
2018年08月14日
ActiveXコントロールのテキストボックスを
一般的なテキストボックスのようににする設定。

いかにも入力欄のような凹凸をなくし(SpecialEffect)、
逆に枠線を引く(BorderStyle)。
┌───────┬────────────┬────────────┐
│              │         既定値         │         設定値         │
├───────┼────────────┼────────────┤
│SpecialEffect │2-fmSpecialEffectSunken │0-fmSpecialEffectFlat   │
├───────┼────────────┼────────────┤
│BorderStyle   │0-fmBorderStyleNone     │1-fmBorderStyleSingle   │
├───────┼────────────┼────────────┤
│MultiLine     │False                   │True                    │
└───────┴────────────┴────────────┘

入力不可にもできるが(Enabled)、文字色が灰色がかるのが難点。
┌───────┬────────────┬────────────┐
│              │         既定値         │         設定値         │
├───────┼────────────┼────────────┤
│Enabled       │True                    │False                   │
└───────┴────────────┴────────────┘
分類:ExcelVBA
jQuery/遅延(delay)(3)非アニメーション系メソッド
2018年08月13日
┌──────────────────────────────────────┐
│setTimeout(function() {$('div').text('1秒後に表示');}, 1000);               │
└──────────────────────────────────────┘
とはいえ、アニメーション系メソッド以外でも遅延処理をしたいという場合がある。
例えば、上記のようにsetTimeout()を使えばよいのだが、
.delay()でやってみたい。そんな時の方法。

まず、アニメーション系メソッドは、キュー(queue)というものに登録されて
順番に実行するものである点を理解しなければならない。

つまり、アニメーション系メソッドは、実行した瞬間に実行されるのではなく
実行した瞬間は、キュー(queue)に登録されるだけで
キュー(queue)の方で先入先出で順番に実行していくのだ。
よって、.delay()が効くという寸法になっているのだ。

ってことで、自動で行われるキュー(queue)の登録を手動に行えばよい。
┌──────────────────────────────────────┐
│$('div').delay(1000).queue(function() {                                     │
│    $(this).text('1秒後に表示').dequeue();                                  │
│});                                                                         │
└──────────────────────────────────────┘
つまり、上記のような感じ。
.dequeue()を用いて、キュー(queue)からの削除も手動で行う必要がある点に注意。

これを応用すれば以下のおうに要素を追加することもできる。
┌──────────────────────────────────────┐
│$('div').delay(1000).queue(function() {                                     │
│    $(this).append(                                                         │
│        $('<span>').text('1秒後に表示')                                     │
│    ).dequeue();                                                            │
│});                                                                         │
└──────────────────────────────────────┘

ちなみに、キュー(queue)をクリアする方法は以下の通り。
┌──────────────────────────────────────┐
│$('div').clearQueue();                                                      │
├──────────────────────────────────────┤
│$('div').queue([]);                                                         │
└──────────────────────────────────────┘

また、キューの数を確認するには以下の通り。
┌──────────────────────────────────────┐
│$('div').queue().length                                                     │
└──────────────────────────────────────┘
分類:jQuery
jQuery/遅延(delay)(2)アニメーション系メソッド
2018年08月12日
.delay()が効くのはアニメーション系メソッドのみである。
アニメーション系メソッドは以下の通り。
┌───────┬──────────────────────────────┐
│.animate()    │アニメーション                                              │
├───────┼──────────────────────────────┤
│.show()       │表示                                                        │
│.hide()       │非表示                                                      │
│.toggle()     │表示/非表示                                                 │
│              │→「.hide(0).delay(1000).show(0)」(引数0が必要)             │
├───────┼──────────────────────────────┤
│.fadeIn()     │徐々に表示                                                  │
│.fadeOut()    │徐々に非表示                                                │
│.fadeTo()     │透明度変更                                                  │
│              │→「.fadeOut().delay(3000).fadeIn()」                       │
├───────┼──────────────────────────────┤
│.slideDown()  │スライド表示                                                │
│.slideUp()    │スライド非表示                                              │
│.slideToggle()│スライド表示/非表示                                         │
└───────┴──────────────────────────────┘
分類:jQuery
jQuery/遅延(delay)(1)基本認識
2018年08月11日
sleep関数的な使い方をするものではない。
┌──────────────────────────────────────┐
│$('div').text('初期表示');                                                  │
│$('div').delay(1000);  // sleep1秒                                          │
│$('div').text('1秒後に上書');                                               │
├──────────────────────────────────────┤
│$('div').text('初期表示')                                                   │
│        .delay(1000)                                                        │
│        .text('1秒後に上書');                                               │
└──────────────────────────────────────┘
上記は効かない。すぐに上書されてしまう。
分類:jQuery
ExcelVBA/ADODBデータベースに時間がかかる場合
2018年08月10日
以下のパラメータ値(プロパティ値)を変更(大きく)すればよい。(以下は既定値)
┌──────────────────────────────────────┐
│Dim データベース As New ADODB.Connection                                    │
│With データベース                                                           │
│    .ConnectionTimeout = 15                                                 │
│    .CommandTimeout = 30                                                    │
│End  With                                                                   │
└──────────────────────────────────────┘
┌─────────┬────────────────────────────┐
│.ConnectionTimeout│接続まで時間がかかる場合                                │
│                  │ネットワークの調子が悪い場合向け                        │
├─────────┼────────────────────────────┤
│.CommandTimeout   │SQL応答に時間がかかる場合                               │
│                  │重い(複雑な)SQL文を待つ場合向け                         │
└─────────┴────────────────────────────┘
分析系など特別なプログラムの場合には後者の値を大きくする感じか。
分類:ExcelVBA
要件
2018年08月08日
分類するとこんな感じか?
┌─────┬────────────────────────────────┐
│機能要件  │明示された要求事項                                              │
│          │・いわゆる本開発の目玉機能                                      │
├─────┼────────────────────────────────┤
│暗黙の要件│明示しなくとも満たされるべき要求事項                            │
│          │・誤った情報がないこと(誤解しやすい表現や誤字脱字などがないこと)│
│          │・UI/UXが使いやすいこと(並び順・メッセージ・画面遷移など)       │
├─────┼────────────────────────────────┤
│非機能要件│主にインフラ(ハードウェア)関係の暗黙の要件                      │
│          │・性能(速度と容量)  …運用に耐えうる速度や容量を満たしていること│
│          │・信頼性と可用性    …壊れにくく壊れても対策がなされていること  │
│          │・拡張性と移植性    …次のステップへ進むこともできること        │
│          │・安全性            …いわゆるセキュリティ対策(侵入・改竄・漏洩)│
│          │・運用保守性        …実運用全般として扱いやすいこと            │
└─────┴────────────────────────────────┘
非機能要件には暗黙の要件も含まれるっぽいが
一般的に非機能要件っていったらインフラが主だったりもするのかなぁ。
よくわからん。
分類:設計
SQL/DEFAULT定義の誤解
2018年08月07日
SQL文のDEFAULT定義は、あくまで列が指定されなかった場合の既定値であり
NULLを代入した場合の代替値ではないことに注意。
○INSERT文にて列が指定されなかった場合には基本的にNULLが代入される
○この場合、DEFAULT定義があった場合にはその値が代入される
○UPDATE文にてNULLを代入しても、DEFAULT定義の値は無視される
×INSERT文にてNULLを代入したら、DEFAULT定義の値が代入される
  →NULLが代入される

よって、NOT NULL制約とDEFAULT定義が両方定義してある列について
DEFAULT定義があるから(NOT NULL制約にはひっかからなくて)安心というのは間違いだ。
分類:SQL
前へ 1 2 3 次へ