アプリ版:「スタンプのみでお礼する」機能のリリースについて

アクセスのテーブルをエクセルへエクスポートした時の
セルの書式設定の配置の縦位置が「下詰め」になります。
できれば「中央揃え」で出力したいのですが。。。

私だけなのでしょうか?

A 回答 (1件)

【要旨】


Access側の設定では、対応不可と思われますので、対応するとしたら
AccessかExcel上でVBAにて処理するしかなさそうです。


【詳細】
確かに、Excelのセルには、横位置と同様の書式設定が、縦位置にも
用意されていますが、Accessのデータシート(テーブルの他、フォームの
データシートビューを含む)では、縦位置には用意されていないようです。
(フォーム/レポートのテキストボックスでは、『上余白』『下余白』などで
 代替的な対応なら可能ですが・・・)
※なお、Access2003では、データシートビューでは横位置も設定不可
 でしたが、Access2007ではテーブルも含めて横位置は設定可能でした。

そのため、Access側の設定で、書式を同時保存するような指定を
しても、その対象に『縦位置の配置』を含めることはできないものと
思います。

・・・ということで、Excel側のテンプレートファイル(Excel起動時に表示
される状態を指定できる)をいじればどうにかなるかと思ってやってみた
のですが、残念ながら「Accessからのエクスポートにより、新規に作成
したExcelファイル」については、既定のテンプレートファイルの設定は
反映されませんでした。(※)

なので、あとは
 ・Accessからの出力時に、出力ファイルに書式設定までしてしまう
 ・Excel側でマクロを作成して、出力後にそのマクロを起動する
のどちらかしかないように思います。

以下、「出力」アクション(OutPutToメソッド)の後に、出力したExcel
ファイルに書式設定(縦位置の配置を「中央寄せ」に設定)するコードを
書いてみましたので、参考までに提示します:

Private Sub 出力_Click()
'エラーが発生した場合は「エラー処理」に移動させるための宣言
On Error GoTo エラー処理

  '変数を宣言(ファイル名とテーブル名用)
  Dim strFile As String, strTbl As String

  'VBAのメニューの「ツール(T)→参照設定(R)」で、「Microsoft Excel
  '#.#」(「#」は数字)のチェックをオンにした場合は以下の宣言を使用
  Dim xls As Excel.Application, WKB As Excel.Workbook, WKS As Excel.Worksheet
  '上記の参照設定を指定しない場合は以下の宣言を使用
  'Dim xls As Object, WKB As Object, WKS As Object

  '出力するテーブル名を変数に記録(→TextBoxに入力させるもよし)
  strTbl = "テーブル1"

  '出力ファイル名を指定(ドライブから未指定時の動作は未確認(汗))
  strFile = "c:\test.xls"

  'Excel形式で出力
  DoCmd.OutputTo acOutputTable, strTbl, "MicrosoftExcelBiff8(*.xls)", strFile

  '上記で出力したファイルを、Excelアプリケーションで開く
  Set xls = CreateObject("Excel.Application")
  Set WKB = xls.WorkBooks.Open(strFile)

  'テーブル名がシート名になっているはずなので、そのシートを指定
  Set WKS = WKB.Worksheets(strTbl)

  '上記シートの全てのセルの縦位置を「中央寄せ」に変更して保存
  WKS.Cells.VerticalAlignment = xlCenter
  WKB.Save

終了処理:
  'エラーで途中終了しても、Excelが立ち上がったままにならないよう、
  'Excelアプリケーションを可視化(上の処理中は全て不可視です)
  If xls Is Not Nothing Then xls.Visible = True

  '念のためメモリを開放して終了
  Set WKS = Nothing
  Set WKB = Nothing
  Set xls = Nothing
  Exit Sub

エラー処理:
  'エラーが発生した場合はメッセージを表示した後、「終了処理」へ。
  MsgBox Err & ":" & Error$, , Me.Name & " 出力"
  Resume 終了処理

End Sub

・・・以上です。


※上記の「Excelのテンプレート」で私が試したのはこちらの設定法です:
 http://office.microsoft.com/ja-jp/excel/HP051995 …
  「Accessから出力するExcelに反映するならそこじゃない」という
 情報をお持ちの方がいらっしゃったら、VBAで処理する必要がなくなる
 のですが・・・(汗)
    • good
    • 0
この回答へのお礼

ありがとうございます!
原因がわかってすっきりしました!
対処法のコードを早速使わせていただきます。

お礼日時:2009/07/05 17:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!