カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

ACCESS Excelオートメーションメモ

Dim xlApp   As Object
Dim xlBook  As Object
Dim xlSheet As Object

Dim FileName   As String
Dim myFileName As String
Dim myShape    As Object

FileName = Environ("USERPROFILE") & "\デスクトップ\sample.xls"

Set xlApp   = CreateObject("Excel.Application")
Set xlBook  = xlApp.Workbooks.Add
Set xlSheet = xlBook.WorkSheets(1)

With xlSheet

    .Range("A18:D18").MergeCells = True       'セルを結合
    .Range("A18").HorizontalAlignment = -4108 '横位置を中央揃えに
    .Range("A18").Font.Size = 48              'フォントの大きさを変更

End With

'保存
xlBook.Saveas (FileName)

xlBook.Close

xlApp.Application.Quit

Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
3,238 views

Excel VBA 画像の挿入

Sub auto_open()

    Dim myFileName As String
    Dim myShape As Shape

    myFileName = ActiveWorkbook.Path & "\sample.bmp"

    ' 選択位置に画像ファイルを挿入し、変数myShapeに格納
    Set myShape = ActiveSheet.Shapes.AddPicture( _
          Filename:=myFileName, _
          LinkToFile:=False, _
          SaveWithDocument:=True, _
          Left:=Selection.Left, _
          Top:=Selection.Top, _
          Width:=0, _
          Height:=0)

    ' 挿入した画像に対して元画像と同じ高さ・幅にする
    With myShape
        .ScaleHeight 1, msoTrue
        .ScaleWidth 1, msoTrue
    End With

End Sub

ACCESSからExcelを操作し、挿入する場合
続きを読む…»

11,923 views

正規表現の最短一致

正規表現の文字列検索にて、最短一致を検索します。
デフォルトは最長一致ですが、量指定子("*"、"+"、"{}"等)の後に"?"を付けることで最短一致に変更できます。

Visual Basic

Dim regEx As Object
Dim Matches As Variant

'正規表現オブジェクト
Set regEx = CreateObject("VBScript.RegExp")

続きを読む…»

17,072 views

ACCESS VBA Excelオートメーションの例

参照設定なしでACCESSからExcelファイルを作成する方法です。
罫線等の定数は使用できないため、実際の数値を与えています。

Dim xlApp    As Object
Dim xlBook   As Object
Dim xlSheet  As Object
Dim FileName As String
FileName = Environ("USERPROFILE") & "\デスクトップ\test.xls"

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(FileName)
Set xlSheet = xlBook.WorkSheets(1)

続きを読む…»

13,162 views

参照設定を追加せずDAOを利用する

Dim db As Object
Dim rst As Object

Set db = DBEngine.Workspaces(0).Databases(0)

MsgBox db.Name

Set rst = db.OpenRecordset("テーブルまたはクエリ名")

Do Until rst.EOF
    Debug.Print rst("フィールド名")
    DoEvents
    rst.MoveNext
Loop

rst.Close: Set rst = Nothing
db.Close: Set db = Nothing

OpenRecordsetメソッドにdbOpenDynasetなどの引数を指定したい場合
定数が使用できないので、下記を参考に数値を入力してください。

dbOpenTable 1
dbOpenDynamic 2
dbOpenDynaset 3
dbOpenSnapshot 4

SQL Serverへ接続する場合について(※2016.06.14追記)

SQL ServerのID列を持つテーブルを開くときは、dbSeeChanges(512)オプションを使用するようエラーが発生します。
その場合は以下のように開きます。

Set rst = db.OpenRecordset("テーブルまたはクエリ名", 2, 512)

CurrentDbの推奨(※2020.10.28追記)

Access2000以降ではデータベースをする際、上記のコードにある「DBEngine.Workspaces(0).Databases(0)」よりも「CurrentDb」の使用が推奨されているようです。

Set db = CurrentDb

また、別のデータベースを参照する必要があるときは以下のようにしてください。

Set db = DBEngine.Workspaces(0).OpenDatabase("Another.mdb")

参考URL:CurrentDb メソッド (Access) | Microsoft Docs

9,548 views