2012年2月15日水曜日

VBAでの正規表現

    Dim RegEx As Object
    Dim Matches As Object

    Set RegEx = CreateObject("VBScript.RegExp")
    RegEx.IgnoreCase = True
    RegEx.Global = True

'--- マッチしたかどうかテストする ----
    RegEx.Pattern = "正規表現マッチパターン"
    If RegEx.Test(文字列) Then
        MsgBox "マッチしました"
    Else
        MsgBox "マッチしませんでした"
    End If


'--- マッチしたときのn番目のグループ値を取出す ---
'    $1 --- SubMatches(0)
'    $2 --- SubMatches(1)
'    $3 --- SubMatches(2)

    RegEx.Pattern = "(\d{4})/(\d{2})/(\d{2})"    '日付の形式
    Set Matches = RegEx.Execute("2012/02/14")
    If 0 < Matches.Count Then
        MsgBox Matches(0).SubMatches(0)    '2012
        MsgBox Matches(0).SubMatches(1)    '02
        MsgBox Matches(0).SubMatches(3)    '14
    End If

2012年2月2日木曜日

Access Printer Object 変更して印刷

Sub RestoreReportPrinter()
    Dim rpt As Report
    Dim prtOld As Printer
    Dim prtNew As Printer

    DoCmd.OpenReport ReportName:="商品区分別商品リスト", View:=acViewPreview
    Set rpt = Reports("商品区分別商品リスト")

    'レポートの現在のプリンタ設定を prtOld 変数に保存します。
    Set prtOld = rpt.Printer

    'レポートの現在のプリンタ設定を prtNew 変数に代入します。
    Set prtNew = rpt.Printer

    'レポートの設定を変更
    With prtNew
        '用紙の向きを横に設定
        .Orientation = acPRORLandscape
        '印刷するページの上の余白を 30mm に設定
        .TopMargin = Round(30 * 56.7, 2)
        '印刷部数を 2 部に設定
        .Copies = 2
        '上下にページをめくる両面印刷の印刷の向きに設定
        .Duplex = acPRDPVertical
        '給紙トレイを上段に設定
        .PaperBin = acPRBNUpper
    End With


    '印刷します。
    Docmd.RunCommand acCmdPrint

    'プリンタを元の設定に戻します。
    Set rpt.Printer = prtOld

    '保存せずに、レポートを閉じます。
    DoCmd.Close ObjectType:=acReport, ObjectName:="商品区分別商品リスト", Save:=acSaveNo

    Set rpt = Nothing
    Set prtNew = Nothing
    Set prtOld = Nothing
End Sub