2017-06-14 25 views
0

MS Access(2013)クエリからExcel(2013)の複数のワークシートブックに複数のクエリをエクスポートしようとしています。輸出プロセスは問題ありません。この問題は、エクスポート後のワークシートの書式設定です。各ワークシート(5)のために、私が行う必要があります。黄色の背景 msアクセスエクスポート(VBA)後のExcelワークシートの書式設定

  • と一番上の行で

    1. フリーズ一番上の行
    2. フィルが 'フィルタ&ソート' を適用する...

    各レポートのエクスポートには独自のセクションがありますので、セクションを1つだけ貼り付けます。そのような実行時エラーなど コードのフォーマット部分が開始すると、私は通常得るエラー:

    「9」:添字

    オブジェクトの「1004」メソッド '範囲「_Global範囲外'失敗しました。

    これらのエラーは実際には一貫性がありません。コードは次のとおりです。

    Private Sub cmdGeneralReportWithComments_Click() 
    
    Me.ReportProcessLb.Visible = True 
    Me.UpdateTablesLb.Visible = False 
    
    'Dim general variables to check that all fields are populated to make the   reports 
    Dim startdatevar As Date 
    Dim enddatevar As Date 
    Dim pathtotemplatevar As String 
    Dim savereporttovar As String 
    Dim reportnamevar As String 
    Dim alltogethernow As String 
    
    startdatevar = Me.txtStartDate 
    enddatevar = Me.txtEndDate 
    pathtotemplatevar = Nz(Me.txtBrowse, "") 
    savereporttovar = Me.txtToReport 
    reportnamevar = Me.txtNameTheReport 
    'alltogethernow = startdatevar + enddatevar + pathtotemplatevar +   savereporttovar + reportnamevar 
    'MsgBox alltogethernow 
    
    If startdatevar Like "" Or enddatevar Like "" Or pathtotemplatevar Like ""  Or savereporttovar Like "" Or reportnamevar Like "" Then 
    
        MsgBox "The dates, report path's and a report path must be entered, please try again :)" 
    
    Else 
    
    '************************************************* 
    'Start Report PMCS 
    '************************************************* 
    
    'dim date values 
    Dim TheStartDate As Date 
    Dim TheEndDate As Date 
    
    'copy the template file and move it and rename it 
    Dim pathtotemplate As String 
    Dim pathtoreport As String 
    
    pathtotemplate = Me.txtBrowse 
    pathtoreport = Me.txtToReport 
    
    'output the Pmcs report 
    Dim outputFileName As String 
    
    'outputFileName = "C:\Users\travisanor1\Desktop\UTV\Reports\June2017 \SaveTest\GeneralReport_Template.xlsx" 
    outputFileName = pathtoreport & "\" & Me.txtNameTheReport 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, "GeneralReportWithComments_Pmcs", outputFileName, True 
    
    'Rename and format the worksheet 
    Dim xls  As Excel.Application 
    Dim wkb  As Excel.Workbook 
    Dim wks  As Excel.Worksheet 
    
    Set xls = New Excel.Application 
    Set wkb = xls.Workbooks.Open(pathtoreport & "\" & Me.txtNameTheReport) 
    
    'format 
    'filter sort on first row 
    Range("A1:Q1").AutoFilter 
    
    'Fill in first row 
    Rows("1:1").Select 
    With Selection.Interior 
        .Pattern = xlSolid 
        .PatternColorIndex = xlAutomatic 
        .Color = 65535 
        .TintAndShade = 0 
        .PatternTintAndShade = 0 
    End With 
    
    'freeze top row 
    Rows("1:1").Select 
    With ActiveWindow 
        .SplitColumn = 0 
        .SplitRow = 1 
    End With 
    ActiveWindow.FreezePanes = True 
    
    ' Set the name of the worksheet 
    Set wks = wkb.Worksheets("GeneralReportWithComments_Pmcs") 
    wks.Name = Me.txtStartDateTrim & " to " & Me.txtEndDateTrim & "_PMCS" 
    
    wkb.Close True 
    Set wks = Nothing 
    Set wkb = Nothing 
    xls.Quit 
    Set xls = Nothing 
    '************************************************* 
    'End PMCS report 
    '************************************************* 
    

    ありがとうございました。私は今3日間この頭を叩いているし、私は知恵の終わりです。 ありがとうございます!

  • 答えて

    0

    基本的に、あなたはMS Accessの内部外国いるExcelのオブジェクトを修飾されていません。以下の行は、初期化するExcelオブジェクトによって修飾される必要があります。

    電流:

    Range("A1:Q1").AutoFilter 
    Rows("1:1").Select 
    ActiveWindow.FreezePanes = True 
    

    正しい:

    wks.Range("A1:Q1").AutoFilter   ' EXCEL WORKSHEET METHOD 
    wks.Rows("1:1").Select     ' EXCEL WORKSHEET METHOD 
    xls.ActiveWindow.FreezePanes = True  ' EXCEL APPLICATION METHOD 
    

    VBA

    より

    Public Sub ExportExcel() 
    On Error GoTo ErrHandle 
    
        '... incorporate above code ...' 
        Const outputFileName = pathtoreport & "\" & Me.txtNameTheReport 
    
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _ 
          "GeneralReportWithComments_Pmcs", outputFileName, True 
    
        'INITIALIZE EXCEL OBJECTS 
        Dim xls  As Excel.Application 
        Dim wkb  As Excel.Workbook 
        Dim wks  As Excel.Worksheet 
    
        Set xls = New Excel.Application 
        Set wkb = xls.Workbooks.Open(outputFileName) 
        Set wks = wkb.Worksheets("GeneralReportWithComments_Pmcs") 
    
        ' FILTER/SORT TOP ROW 
        wks.Range("A1:Q1").AutoFilter 
    
        ' FILL FIRST ROW 
        With wks.Rows("1:1").Interior 
         .Pattern = xlSolid 
         .PatternColorIndex = xlAutomatic 
         .Color = 65535 
         .TintAndShade = 0 
         .PatternTintAndShade = 0 
        End With 
    
        'FREEZE TOP ROW 
        wks.Rows("1:1").Activate 
        With xls.ActiveWindow 
         .SplitColumn = 0 
         .SplitRow = 1 
        End With 
        xls.ActiveWindow.FreezePanes = True 
    
        'RENAME WORKSHEET 
        ' (WARNING: SPECIAL CHARS LIKE/\ * [ ] : ? NOT ALLOWED IN SHEET NAMES) 
        wks.Name = Me.txtStartDateTrim & " to " & Me.txtEndDateTrim & "_PMCS" 
    
        MsgBox "Successfully exported and formatted workbook!", vbInformation, "OUTPUT" 
    
    ExitHandle: 
        wkb.Close True 
        Set wks = Nothing: Set wkb = Nothing 
        xls.Quit 
        Set xls = Nothing 
        Exit Sub 
    
    ErrHandle: 
        MsgBox Err.Number & " - " & Err.Description, vbCritical, "RUNTIME ERROR" 
        Resume ExitHandle 
    End Sub 
    
    +0

    それはITです!うわー、構文的に言えば、それはまだVBAだとは思えない。Excelはいつも私に問題を与えていた。おかげさまで、BraXとThanks Partaitに!!!!! – UserName935

    0
    Public Sub FormatHeader() 
        ActiveWindow.FreezePanes = True 
        With ActiveSheet 
        .Range("A2:G2").Interior.Color = vbYellow 
        .Range("A2:G2").Font.Bold = True 
        .Range("A2:G2").AutoFilter 
        .Columns.AutoFit 
        End With 
    End Sub 
    

    希望する範囲にA2を変更します。すべてのシートのための

    Public Sub FormatAllHeaders() 
        Dim sh As Worksheet 
        For Each sh In Worksheets 
        ActiveWindow.FreezePanes = True 
        With sh.Range("A1:G1") 
         .Interior.Color = vbYellow 
         .Font.Bold = True 
         .AutoFilter 
         .Columns.AutoFit 
        End With 
        Next 
    End Sub 
    

    フリーズ一番上の行を追加
    Public Sub FormatAllHeaders() 
        Dim sh As Worksheet 
        For Each sh In Worksheets 
        sh.Activate 
        With ActiveWindow 
         .SplitColumn = 0 
         .SplitRow = 1 
        End With 
        ActiveWindow.FreezePanes = True 
        With sh.Range("A1:G1") 
         .Interior.Color = vbYellow 
         .Font.Bold = True 
         .AutoFilter 
         .Columns.AutoFit 
        End With 
        Next 
    End Sub 
    
    +0

    エラー処理との完全な調整VBAモジュールを考えてみましょう援助のためのks!上記の例で古いコードを置き換えると、最初に試したときに「下付き文字が範囲外のエラーです」というメッセージが表示されました。次に、2番目の試行でエラーが発生したコードが完成しましたが、ワークシートはフォーマットされませんでした。私はmsアクセスを歌えるようにすることができますが、私はいつも頭を浮き彫りにしていましたので、本当にありがとうと思います... – UserName935

    +0

    ああ...あなたはすべてのスプレッドシートをループしたかったのですか?そのコードは現在アクティブなシート上で動作します。 – braX

    +0

    WOW !!!これはキック! 2番目のコードスニペットはそれを行いました!最初の行も凍結する方法はありますか?それはそれだろう!すばらしいおかげでBraxに! – UserName935

    関連する問題