SAK 図書館
Excel VBA (その二) Excel XP での下位互換 - シート保護、リンク、10 進演算
■Excel オブジェクト - CreateObject("Excel.Application") ・VB から Excel オブジェクトを扱う場合、Excel XP では、VB6 レベルの 記述が問題なく行える。 しかし、Excel2000 ではエラーになるコードも多い。 今後のためにまとめておく。 ■シート保護(セルの保護) ・Excel XP では、複数範囲に名前付けした入力可能領域を設定できる。 たいへん便利な機能なのであるが、Excel2000 ではエラーになる。 従って、互換性保つには、旧来の「セルのロック」による保護解除機能を 使用する。この機能は Excel XP でもサポートされていた。 ■動的セルリンクの更新設定 ・Excel XP では、セルリンクをメッセージなしに更新させる事ができる。 これも便利な機能なのであるが、Excel2000 ではサポートされていない。 従って、エラートラップでマスクしておくと良い。 On Local Error Resume Next exl.ActiveWorkbook.UpdateLinks = 3 On Local Error GoTo 0 ■BCD 10 進演算 ・Excel XP では、VB6 と同じ CDec がサポートされている。 VB6 で何の気なしに使用していたので、軒並み Excel2000 でエラーに なった。これは、CDbl を使うしかなさそうである。 exl.Cells(4, 4) = CDbl(zaiko) ■読み取りパスワード、編集パスワード ・Excel.Workbooks の Open メソッドで PW を指定すれば、認証ダイアログを 経由せずにオープンできる。 読み取りパスワードと編集パスワードを設定してテストした。 exl.Application.Workbooks.Open FileName:="book1.xls", Password:="12345" exl.Application.Workbooks.Open FileName:="book1.xls", WriteResPassword:="12345" ■Excel カーソル移動方向 ・これは、Excel 全体に対しての設定しか出来なかった。 従って、コードの制御はしない方が良い。 ■Excel 可視セル選択(ジャンプ) ・バラバラの行が抽出されるようにフィルタをかけてのコピー&ペーストは、 特に可視セルの選択をしなくても動作するようである。 (試したのは Excel XP。) Selection.AutoFilter Field:=1, Criteria1:="1" Range("A1:C22").Select Selection.Copy Workbooks.Add ActiveSheet.Paste ・グループ集計などの各計だけをコピーするような場合は、 1. 対象範囲を選択 2. メニュー、編集、ジャンプで、「セル選択...」ボタン、「可視セル」を選択 3. コピー&ペースト とすると、実際に見えているセルだけをコピーすることができる。 Range("A1:C52").Select Selection.SpecialCells(xlCellTypeVisible).Select Selection.Copy Workbooks.Add ActiveSheet.Paste ■Access XP (ODBC による mdb SQL アクセス) ・これも Access XP から 10 進項目がサポートされたが、下位互換がない。 通貨型や倍精度浮動小数点型で逃げるしかない。 ・クエリで日付型の演算を行う項目を作成すると、日付書式の設定が異なる PC ではエラーになるようである。解決策があるのか不明。 私は他のコードで逃げました。 (VB6 から SQL でアクセスした場合の現象である。) ・同様に Access XP の mdb を ODBC 経由で SQL アクセスすると、凝った 関数項目がまるで使えなくなっている。 データアクセスコンポーネントや ODBC ドライバを最新にしてみたが解決 できなかった。(Oracle では文字列の編集項目や日付の計算項目が ODBC でも正常に扱えている。) mdb の関数は Access 内でしか有効でないのだろうか。 とにかく mdb で編集項目や計算項目を扱う際は、要注意と悟った。 ・トランザクションのかかり方が、Oracle と少し違うようである。 トランザクション外でレコードセットを読み取り専用でオープンしても 更新系のトランザクションがアベンドする。 結局、更新専用の接続コネクションを作成した。 レコードセット系と更新系の接続コネクションが違う場合には、問題が 発生しないようである。 ■VB 環境編資料
■VB 入門編資料
■VB 基礎編資料
■VB ビジュアル編資料
■VB テクニック編資料