MW211 EXIT

devlog
設計/追加・変更・削除の作業順
2014年09月22日
同一明細にて、「追加(INSERT)・変更(UPDATE)・削除(DELETE)」を
同時に指定できる場合、漫然と「追加→変更→削除」の順で処理してもよいが、
「変更→削除→追加」の方がいいのではいだろうか。
※ここでは、追加(INSERT)は新規ID(自動的に末番)を付番し、
  変更(UPDATE)・削除(DELETE)は既存IDに対して更新するものとする

つまり、マトリックス表的には以下の関係となる。
┌──┬──┬──┬──┐
│ → │追加│変更│削除│
├──┼──┼──┼──┤
│追加│ \ │ × │ × │
├──┼──┼──┼──┤
│変更│ ○ │ \ │ ○ │
├──┼──┼──┼──┤
│削除│ ○ │ × │ \ │
└──┴──┴──┴──┘
  ×削除→変更
    先に削除をしてしまうと同一IDに変更指示があった場合、
    変更処理にて該当なしエラーとなってしまう。
    結果的に削除されるのであれば、おとなしく変更を先にしてしまえばよい
  ×追加→変更・削除
    追加にて新規IDが付番されるのだが、変更・削除にてたまたまそのIDを
    指定していると、該当なしエラーとなるべきところ通ってしまう

ということで、「変更→削除→追加」の順がベスト。

もちろん、場合によりけりだけど。
分類:設計
ExcelVBA/マクロメニューに表示させない方法
2014年09月21日
関数をPrivate関数とする。
┌──────────────────────────────────────┐
│Private Sub 関数()                                                          │
│  …                                                                        │
│End Sub                                                                     │
└──────────────────────────────────────┘

他もモジュールでも使っているのでPublic関数じゃなきゃダメな場合には
そのモジュール自体をPrivateモジュールにしてしまう。
┌──────────────────────────────────────┐
│Option Private Module                                                       │
│Public Sub 関数()                                                           │
│  …                                                                        │
│End Sub                                                                     │
└──────────────────────────────────────┘
分類:ExcelVBA
MSSQL/データベース全体のSQL文作成
2014年09月20日
「Microsoft SQL Server Management Studio」にて
データベースを右クリック。

タスク>スクリプトの作成

●データベース全体とすべてのデータベースオブジェクトのスクリプトを作成

「スクリプト作成オプションの設定」にて「詳細設定」を押下。

「全般>スクリプトを作成するデータの種類」を「スキーマとデータ」にする。

後は適宜出力する。
分類:MSSQL
Excel/ハイパーリンクで勝手に書式が変わる
2014年09月19日
ハイパーリンクを設定すると、勝手に文字が大きくなったりする。

この対策。

「ホーム」タブの「スタイル」に「ハイパーリンク」が表示されるので
右クリックし「変更」を選ぶ。
┌────────────────┐
│スタイル                        │
├────────────────┤
│                                │
│          ┌─────────┐│
│スタイル名│ハイパーリンク    ││
│          └─────────┘│
│                    ┌────┐│
│                    │書式設定││
│                    └────┘│
│スタイルに設定されている書式──│
│□表示形式                      │
│□配置                          │
│■フォント                      │←これを変更するか□にする
│□罫線                          │
│□塗りつぶし                    │
│□保護                          │
│    ┌─────┐┌─────┐│
│    │    OK    ││キャンセル││
│    └─────┘└─────┘│
└────────────────┘
分類:Excel
ExcelVBA/入力規則のリスト
2014年09月18日
ExcelVBAで入力規則リストを動的に作成する(セルにリストを生成する)ことができる。
さっと以下のような感じである。
┌──────────────────────────────────────┐
│With Selection.Validation                                                   │
│    .Delete                                                                 │
│    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _              │
│        Formula1:="1:織田信長,2:豊臣秀吉,3:徳川家康"                        │
│    .InCellDropdown = True                                                  │
│    .IgnoreBlank = True                                                     │
│    .ShowInput = True                                                       │
│    .InputTitle = "コード入力"                                              │
│    .InputMessage = "コードを入力してください"                              │
│    .ShowError = True                                                       │
│    .ErrorTitle = "エラー"                                                  │
│    .ErrorMessage = "無効です"                                              │
│    .IMEMode = xlIMEModeNoControl                                           │
│End With                                                                    │
└──────────────────────────────────────┘
しかしながら、リストのデータを定義する「Formula1:=」の部分について
256文字以上となるとファイルを保存した時点で
内容が空にされてしまうようだ。
従って、こいつらはリスト数が少ない時にしかた使わないとした方がよさそうだ。
分類:ExcelVBA
ExcelVBA/選択範囲のループ
2014年09月16日
X座標、Y座標でループする方法。
┌──────────────────────────────────────┐
│Dim x As Long, y As Long                                                    │
│For y = 1 To Selection.Rows.Count                                           │
│    For x = 1 To Selection.Columns.Count                                    │
│        MsgBox "x=" & x & ",y=" & y & ",値=" & Selection.Cells(y, x).Value  │
│    Next x                                                                  │
│Next y                                                                      │
└──────────────────────────────────────┘
範囲でループする方法。
┌──────────────────────────────────────┐
│Dim r As Range                                                              │
│For Each r In Selection                                                     │
│    MsgBox "x=" & r.Column & ",y=" & r.Row & ",値=" & r.Value               │
│Next r                                                                      │
└──────────────────────────────────────┘
分類:ExcelVBA
設計/型いろいろ
2014年09月14日
┌─────────┬───────────────┬────────────┐
│char              │character                     │文字                    │
│string            │character string              │文字列                  │
├─────────┼───────────────┼────────────┤
│int               │integer                       │整数                    │
│short             │short integer                 │短精度整数              │
│long              │long integer                  │長精度整数              │
│long long         │double long integer           │倍長精度整数            │
├─────────┼───────────────┼────────────┤
│decimal           │decimal                       │小数                    │
│numeric           │numeric                       │数値(小数)              │
│float             │floating point number         │短精度浮動小数点数      │
│double            │dobuble floating point number │倍精度浮動小数点数      │
├─────────┼───────────────┼────────────┤
│byte              │byte                          │符号なし 8ビット整数    │
│word              │word                          │符号なし16ビット整数    │
│dword             │double word                   │符号なし32ビット整数    │
│qword             │quadruple word                │符号なし64ビット整数    │
│int8_t            │signed 8-byte integer         │符号あり 8ビット整数    │
│uint8_t           │unsigned 8-byte integer       │符号なし 8ビット整数    │
│int16_t           │signed 16-byte integer        │符号あり16ビット整数    │
│uint16_t          │unsigned 16-byte integer      │符号なし16ビット整数    │
│int32_t           │signed 32-byte integer        │符号あり32ビット整数    │
│uint32_t          │unsigned 32-byte integer      │符号なし32ビット整数    │
│int64_t           │signed 64-byte integer        │符号あり64ビット整数    │
│uint64_t          │unsigned 64-byte integer      │符号なし64ビット整数    │
│signed char       │signed character              │符号あり 8ビット整数    │
│unsigned char     │unsigned character            │符号なし 8ビット整数    │
│signed int        │signed integer                │符号あり整数            │
│signed short      │signed short integer          │符号あり短精度整数      │
│signed long       │signed long integer           │符号あり長精度整数      │
│signed long long  │signed double long integer    │符号あり倍長精度整数    │
│unsigned int      │unsigned integer              │符号なし整数            │
│unsigned short    │unsigned short integer        │符号なし短精度整数      │
│unsigned long     │unsigned long integer         │符号なし長精度整数      │
│unsigned long long│unsigned double long integer  │符号なし倍長精度整数    │
└─────────┴───────────────┴────────────┘
分類:設計
Excel2003/オートシェイプ削除エラー
2014年09月13日
Excel2003の場合、オートシェイプ(ボタンなど)の削除時は、
シートの保護を解除していないとエラーとなる。
→「アプリケーション定義またはオブジェクト定義のエラーです。」
分類:ExcelVBA
ExcelVBA/リスト作成でエラー
2014年09月12日
以下のような感じで入力規則によるリストを作成したところ…。
┌──────────────────────────────────────┐
│With ActiveCell.Validation                                                  │
│    .Delete                                                                 │
│    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, _       │
│        Formula1:="1:東京,2:大阪,3:名古屋"                                  │
│    .InCellDropdown = True                                                  │
│    .IgnoreBlank = True                                                     │
│End With                                                                    │
└──────────────────────────────────────┘
Excel2003で以下のようなエラーが出てしまった(Excel2010では出なかった)。
┌──────────────────────────────────────┐
│実行時エラー'-2147417848(80010108)':                                        │
│オートメーションエラーです。                                                │
│起動されたオブジェクトはクライアントから切断されました。                    │
└──────────────────────────────────────┘

「更新」ボタンを押して実行した場合にエラーが発生し、
マクロを関数単位で直接実行する分には問題なかった。

ということで、原因はフォーカス。
ボタンを押した時点でフォーカスがボタンに当ってしまうので
エラーでごねられてしまうということらしい。

解決策は、ボタンが押された後で、シートに故意にフォーカスをあて直す。
┌──────────────────────────────────────┐
│Cells(1, 1).Select                                                          │
└──────────────────────────────────────┘

もしくはボタンにフォースを当てなくする(TakeFocusOnClick=False)。
分類:ExcelVBA
ExcelVBA/文字数がものすごく多い文字列
2014年09月11日
文字数がものすごく多い文字列を調査したところ、
どうも途中で文字列が欠けているのではないかという疑念が生まれた。

ウオッチ式で表示すると250文字位で切れてしまっているからだ。

それじゃということで、メッセージボックス(MsgBox)で表示させたところ
こちらも最後まで表示されない(明らかに途中で切れている)。

そういえば、セルの書式を文字列にすると256文字くらいまでしか入力できなかったな。

そんなことから、ExcelVBAは250文字前後までしか文字列に格納できない、
という推論(っていうか誤解)をしてしまった。

そんなことはない。2GBまでOKだ。

実は以下の制約にひっかかったのだった。
  ・ウオッチ式では「250文字まで」(1バイト換算)しか表示できない
  ・メッセージボックス(MsgBox)では「1023文字まで」(1バイト換算)しか表示できない
ということで、「Debug.Print」でイミティトウインドウに表示させたら
全て表示することができた。

しかし、ダブルで制約にひっかかると誤解してしまう。
分類:ExcelVBA
前へ 1 … 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 … 156 次へ