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 テクニック編資料