MW211 EXIT

devlog
ExcelVBA/リボンの最小化と非表示
2018年01月26日
Excel2010までは「リボンの最小化」しかなかったが
(というか「リボンの最小化」の導入はExcel2010からだが)
Excel2013から「リボンの非表示」も導入された。

力関係的には、「リボンの非表示」>「リボンの最小化」なので
リボンが非表示状態で、最小化云々をやろうとするとエラー(*1)となってしまう。
*1:「'ExecuteMso'メソッドは失敗しました:'_CommandBars'オブジェクト」

たとえば、以下は最小化されていない場合に、最小化するマクロだが…
┌──────────────────────────────────────┐
│If Application.CommandBars.GetPressedMso("MinimizeRibbon") = False Then     │
│    Application.CommandBars.ExecuteMso "MinimizeRibbon"                     │
│End If                                                                      │
└──────────────────────────────────────┘
非表示状態の場合には、エラーとなってしまう。

なので、非表示状態じゃない時という条件が必要になる。
しかも、Excel2010では非表示自体ないので、その条件文にも注意が必要。

例えばこんな感じになる(事前に非表示を解消してしまう方法)。
┌──────────────────────────────────────┐
│If CInt(Application.Version) >= 15 Then     ' Excel2013(バージョン15.0)以降 │
│    If Application.CommandBars.GetPressedMso("HideRibbon") = True Then      │
│        Application.CommandBars.ExecuteMso "HideRibbon"                     │
│    End If                                                                  │
│End If                                                                      │
│If Application.CommandBars.GetPressedMso("MinimizeRibbon") = False Then     │
│    Application.CommandBars.ExecuteMso "MinimizeRibbon"                     │
│End If                                                                      │
└──────────────────────────────────────┘
なお、"HideRibbon"も"MinimizeRibbon"もトグル命令なので、状態が反転する。
False下で実行するとTrueとなり非表示化・最小化し、
True下で実行するとFalseとなりそれが解除される。
分類:ExcelVBA
ExcelVBA/ボタンの設定
2018年01月25日
ボタンを設定するには以下の方法がある。
┌──────────┬───────────────────────────┐
│フォームコントロール│マクロを登録する                                      │
├──────────┼───────────────────────────┤
│ActiveXコントロール │イベントとして登録する                                │
├──────────┼───────────────────────────┤
│オートシェイブ      │マクロを登録する                                      │
└──────────┴───────────────────────────┘
分類:ExcelVBA
ExcelVBA/セルの範囲
2018年01月21日
┌───────────┬──────────────────────────┐
│起点セル.CurrentRegion│空白で囲まれた範囲(矩形)を選択                      │
├───────────┼──────────────────────────┤
│シート.UsedRange      │(空白関係なく)すべての使用済み範囲(矩形)を選択      │
└───────────┴──────────────────────────┘
分類:ExcelVBA
ExcelVBA/.Formulaのイコール
2018年01月16日
┌─┬────────────────────────────────────┐
│A│With Selection                                                          │
│  │    .Formula = .Formula                                                 │
│  │End With                                                                │
├─┼────────────────────────────────────┤
│B│With Selection                                                          │
│  │    .Formula = "=" & .Formula                                           │
│  │End With                                                                │
└─┴────────────────────────────────────┘
上記の違い。

元々の値が数式だった場合には、影響はなし。
Aで「=」が足りないとか、Bで「=」が過剰とか、怒られたりはしない。

違いは、元の値が数式っぽい文字列だった場合。
例えば「A1」という文字だったら、Aはそのままだが、Bは数式「=A1」となる。
分類:ExcelVBA
ExcelVBA/選択とオブジェクト
2018年01月15日
選択中のものは、セルだけとは限らない。オブジェクトの場合もある。
オブジェクトも一つの種類のオブジェクトとは限らない。
但し、セルとオブジェクトを同時に選択することはない。
何を選択しているかは、「TypeName(Selection)」で確認すればよい。
なお、複数のオブジェクトを選択している場合には
その種類に差異があるかは不問で「DrawingObjects」となる。
┌──────┬───────┬──────────────┐
│セル        │Range         │                            │
├──────┼───────┼─────┬────────┤
│オブジェクト│DrawingObjects│TextBox   │テキストボックス│
│            │              ├─────┼────────┤
│            │              │Line      │直線            │
│            │              ├─────┼────────┤
│            │              │Rectangle │四角形          │
│            │              ├─────┼────────┤
│            │              │Oval      │円(楕円)        │
│            │              ├─────┼────────┤
│            │              │Picture   │画像            │
└──────┴───────┴─────┴────────┘

ということで、テキストボックスの数式を置換するマクロはこんな感じになる。
┌──────────────────────────────────────┐
│Public Sub テキストボックスの数式参照相対化()                               │
│    Dim theObject As Object                                                 │
│    Select Case TypeName(Selection)                                         │
│        Case "DrawingObjects"                                               │
│            For Each theObject In Selection                                 │
│                If TypeName(theObject) = "TextBox" Then                     │
│                    With theObject                                          │
│                        .Formula = Replace(.Formula, "$", "")               │
│                    End With                                                │
│                End If                                                      │
│            Next theObject                                                  │
│        Case "TextBox"                                                      │
│            With Selection                                                  │
│                .Formula = Replace(.Formula, "$", "")                       │
│            End With                                                        │
│        Case Else                                                           │
│            MsgBox "テキストボックスを選択してください"                     │
│            Exit Sub                                                        │
│    End Select                                                              │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA
SQL/採番をバッティングさせない方法
2018年01月11日
①列の自動採番機能を使う
  ○確実(漏れがない、直接SQL文で更新しても効く)
  ×単一列でしか利用できない(複合キーには向かない)
②更新前トリガを使う
  ○確実(漏れがない、直接SQL文で更新しても効く)
  ○採番方法は自由(複合キーでもOK)
  △トリガの管理が煩雑(他列が増減した場合にトリガも追従させないといけない)
③排他トランザクションを使う
  ○採番方法は自由(複合キーでもOK)
  △不確実(処理ルートに漏れがあってはならない、直接SQL文で更新したら対応外)
④プログラムで行う
  ○採番方法は自由(複合キーでもOK)
  △不確実(処理ルートに漏れがあってはならない、直接SQL文で更新したら対応外)
  △管理が煩雑(SQLに一元化されない)
分類:SQL
SVN/ファイルの更新日時
2018年01月05日
SVNから更新してひっぱってきたファイルの更新日時は、その時の現在日時となる。

コミットした日時にしたい場合には、以下の設定を行う。

  TortoiseSVNのメニューより、「設定」を選び、以下にチェックを入れる
  ┌────────────────────────────────────┐
  │設定 - 全般                                                             │
  ├────────────────────────────────────┤
  │┌Subversion─────────────────────────────┐│
  ││■ファイルの更新日時を「最終コミット日時」に設定する                ││
  │└──────────────────────────────────┘│
  │                        ┌────┐┌────┐┌────┐┌────┐│
  │                        │   OK   ││        ││        ││        ││
  │                        └────┘└────┘└────┘└────┘│
  └────────────────────────────────────┘
分類:SVN
前へ 1 次へ