SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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 テクニック編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2024 Y.SAK