2015-07-15 3 views
0

Я пытаюсь экспортировать несколько сводных отчетов из Access в Excel. Исходные данные находятся в Access. Форма, в которой конечный пользователь создает эти отчеты одним нажатием кнопки, также находится в Access. Я столкнулся с трудностями 2 и удивление, если вы можете помочь:Экспорт и форматирование нескольких листов из Access в Excel

  1. Я успешно удается экспортировать свои отчеты, но по какой-то причине мои форматы не реализованы - Не могли бы вы сказать мне, почему и предложить идею о том, как можно Я исправлю это.

  2. Наряду с моими отчетами я хотел бы добавить графики. Не могли бы вы помочь мне понять, как я могу начать с этого.

*** Пока что я сделал макрос vba в excel и как-то понял, как его перевести в доступе. Почему это так отличается, и почему я не могу использовать один и тот же синтаксис языка? Я довольно новичок в программировании, но логически, так как Microsoft Office создал обе среды - не должен ли язык быть одинаковым? Я имею в виду, я бы предположить, почему многие пользователи предпочитают покупать их продукцию - Как ни странно - моя теория не поддерживает мое предположение .... пожалуйста, помогите

Вот мой код:

Private Sub cmdREPORT_GenerateUWReport_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 

On Error GoTo cmdREPORT2_err 

    Dim appExcel As Variant 
    Dim wbkExcel As Object 
    Dim wstExcel As Object 
    Dim dblFormattedStartDate As Double 
    Dim dblFormattedEndDate As Double 
    Dim strFileSavePath As String 
    Dim strFilter As String 


    If (IsNull(comboREPORT_StartDate.Value) Or comboREPORT_StartDate.Value = "") Then 
     MsgBox ("No Start Date selected.") 
     Exit Sub 

    ElseIf (IsNull(comboREPORT_EndDate.Value) Or comboREPORT_EndDate.Value = "") Then 
     MsgBox ("No End Date selected.") 
     Exit Sub 

    End If 
    dblFormattedStartDate = Right(comboREPORT_StartDate.Value, 4) & _ 
          Left(comboREPORT_StartDate.Value, 2) 
    dblFormattedEndDate = Right(comboREPORT_EndDate.Value, 4) & _ 
          Left(comboREPORT_EndDate.Value, 2) 

    If (dblFormattedStartDate > dblFormattedEndDate) Then 
     MsgBox ("Start Date is greater than End Date.") 
     Exit Sub 

    End If 

    strFilter = ahtAddFilterItem(strFilter, "Excel Files (*.XLS)", "*.XLS") 
    strFilter = ahtAddFilterItem(strFilter, "All Files (*.*)", "*.*") 

    strFileSavePath = ahtCommonFileOpenSave(_ 
     OpenFile:=False, _ 
     InitialDir:="C:\Documents And Settings\" & fOSUserName() & "\Desktop\", _ 
     Filter:=strFilter, _ 
     DialogTitle:="Save file as:", _ 
     Flags:=ahtOFN_OVERWRITEPROMPT Or ahtOFN_READONLY, _ 
     Filename:="URC_Reports.xls") 

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "D60: DetailReportDonna", strFileSavePath, True, "Detail_Report" 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "D24: FA_Month", strFileSavePath, True, "FA_Month" 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "D34: FA_Quarter", strFileSavePath, True, "FA_Quarter" 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "D40: Policy_Month_Count", strFileSavePath, True, "Policy_Month_Count" 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "D50: Policy_Quarter_Count", strFileSavePath, True, "Policy_Quarter_Count" 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "D10: Risk_Issue_Details", strFileSavePath, True, "Risk_Issue_Details" 


    Set appExcel = CreateObject("Excel.Application") 
    appExcel.Visible = True 
    Set wbkExcel = appExcel.Workbooks.Open(strFileSavePath) 
    Set wstExcel = wbkExcel.ActiveSheet 

    With appExcel 
    .ActiveWorkbook.Sheets("Detail_Report").Cells.Font.Name = "Times New Roman" 
    .ActiveWorkbook.Sheets("Detail_Report").Cells.Font.Size = 11 
    .ActiveWorkbook.Sheets("Detail_Report").Rows("2:2").Select 
    .ActiveWorkbook.Sheets("Detail_Report").ActiveWindow.FreezePanes = True 
    .ActiveWorkbook.Sheets("Detail_Report").Rows("1:1").Font.Bold = True 
    .ActiveWorkbook.Sheets("Detail_Report").Rows("1:1").Font.ColorIndex = 2 
    .ActiveWorkbook.Sheets("Detail_Report").Rows("1:1").Interior.ColorIndex = 12 
    .ActiveWorkbook.Sheets("Detail_Report").Rows("1:1").ColumnWidth = 15 
    .ActiveWorkbook.Sheets("Detail_Report").Rows("1:1").RowHeight = 40 
    .ActiveWorkbook.Sheets("Detail_Report").Rows("1:1").HorizontalAlignment = xlHAlignCenter 
    .ActiveWorkbook.Sheets("Detail_Report").Rows("1:1").WrapText = True 
    .ActiveWorkbook.Sheets("Detail_Report").Rows("1:1").AutoFilter 
    .ActiveWorkbook.Sheets("Detail_Report").Tab.Color = 1 

    .ActiveWorkbook.Sheets("FA_Month").Tab.Color = 92 
    .ActiveWorkbook.Sheets("FA_Month").Rows("1:1").RowHeight = 40 
    .ActiveWorkbook.Sheets("FA_Month").Rows("1:1").Font.ColorIndex = 2 
    .ActiveWorkbook.Sheets("FA_Month").Rows("1:1").Interior.ColorIndex = 14 
    .ActiveWorkbook.Sheets("FA_Month").Rows("1:1").Font.Bold = True 
    .ActiveWorkbook.Sheets("FA_Month").Columns("A:M").EntireColumn.AutoFit 
    .ActiveWorkbook.Sheets("FA_Month").Columns("C:H").NumberFormat = "$#,##0" 
    .ActiveWorkbook.Sheets("FA_Month").Cells.Font.Name = "Times New Roman" 
    .ActiveWorkbook.Sheets("FA_Month").Cells.Font.Size = 11 
    .ActiveWorkbook.Sheets("FA_Month").Cells.HorizontalAlignment = xlHAlignRight 

    .ActiveWorkbook.Sheets("FA_Quarter").Tab.Color = 92 
    .ActiveWorkbook.Sheets("FA_Quarter").Rows("1:1").RowHeight = 40 
    .ActiveWorkbook.Sheets("FA_Quarter").Rows("1:1").Font.ColorIndex = 2 
    .ActiveWorkbook.Sheets("FA_Quarter").Rows("1:1").Interior.ColorIndex = 14 
    .ActiveWorkbook.Sheets("FA_Quarter").Rows("1:1").Font.Bold = True 
    .ActiveWorkbook.Sheets("FA_Quarter").Columns("A:M").EntireColumn.AutoFit 
    .ActiveWorkbook.Sheets("FA_Quarter").Columns("C:H").NumberFormat = "$#,##0" 
    .ActiveWorkbook.Sheets("FA_Quarter").Cells.Font.Name = "Times New Roman" 
    .ActiveWorkbook.Sheets("FA_Quarter").Cells.Font.Size = 11 
    .ActiveWorkbook.Sheets("FA_Quarter").Cells.HorizontalAlignment = xlHAlignRight 

    .ActiveWorkbook.Sheets("Policy_Month_Count").Tab.Color = 246 
    .ActiveWorkbook.Sheets("Policy_Month_Count").Rows("1:1").RowHeight = 40 
    .ActiveWorkbook.Sheets("Policy_Month_Count").Rows("1:1").Font.ColorIndex = 2 
    .ActiveWorkbook.Sheets("Policy_Month_Count").Rows("1:1").Interior.ColorIndex = 49 
    .ActiveWorkbook.Sheets("Policy_Month_Count").Rows("1:1").Font.Bold = True 
    .ActiveWorkbook.Sheets("Policy_Month_Count").Columns("A:M").EntireColumn.AutoFit 
    .ActiveWorkbook.Sheets("Policy_Month_Count").Cells.Font.Name = "Times New Roman" 
    .ActiveWorkbook.Sheets("Policy_Month_Count").Cells.Font.Size = 11 
    .ActiveWorkbook.Sheets("Policy_Month_Count").Cells.HorizontalAlignment = xlHAlignRight 

    .ActiveWorkbook.Sheets("Policy_Quarter_Count").Tab.Color = 246 
    .ActiveWorkbook.Sheets("Policy_Quarter_Count").Rows("1:1").RowHeight = 40 
    .ActiveWorkbook.Sheets("Policy_Quarter_Count").Rows("1:1").Font.ColorIndex = 2 
    .ActiveWorkbook.Sheets("Policy_Quarter_Count").Rows("1:1").Interior.ColorIndex = 49 
    .ActiveWorkbook.Sheets("Policy_Quarter_Count").Rows("1:1").Font.Bold = True 
    .ActiveWorkbook.Sheets("Policy_Quarter_Count").Columns("A:M").EntireColumn.AutoFit 
    .ActiveWorkbook.Sheets("Policy_Quarter_Count").Cells.Font.Name = "Times New Roman" 
    .ActiveWorkbook.Sheets("Policy_Quarter_Count").Cells.Font.Size = 11 
    .ActiveWorkbook.Sheets("Policy_Quarter_Count").Cells.HorizontalAlignment = xlHAlignRight 

    End With 

cmdREPORT2_err:

Exit Sub 

End Sub 
+0

Вы, вероятно, необходимо добавить ссылку на Excel в доступе. В окне кода «Инструменты», «Ссылки ...» и проверьте «Библиотека объектов Microsoft Excel 14.0». Это даст вам объекты, такие как «Excel.Application» и «Workbook» и «Worksheet» objcets для взаимодействия с Excel Файлы – Evan

+0

Измените свои declerations на 'Dim appExcel As Excel.Application' ' Dim wbkExcel As Excel.Workbok' 'Dim wstExcel As Excel.Worksheet', и вы должны быть хорошими – Evan

+0

Thanks Evan. Это очень помогло мне. Не могли бы вы рассказать мне, что еще мне нужно добавить в форматы, чтобы получить диаграмму. – Robert

ответ

0

Знаете ли вы о записи макросов в excel, поскольку это приведет к созданию кода VBA для вас. Об этом много информации в Интернете. На самом деле код, созданный «рекордером», должен быть отредактирован довольно значительно, опять же в Интернете есть помощь.

Кроме того, как указатель на обучение больше о первенствует и VBA вы можете посмотреть на канале трубки ExcelIsFun вы видите here

Примечание в приведенном выше коде, я бы рекомендовал С appExcel.ActiveWorkbook.Sheets («Detail_Report») .Cells.Font.Name = "Times New Roman" и т.д ..... конец с

With appExcel.ActiveWorkbook.Sheets("FA_Month") 
    .Tab.Color = 92 
    .Rows("1:1").RowHeight = 40 
    etc .... 
End with 

и вам не нужно использовать "appExcel.ActiveWorkbook." перед Sheets

Вы могли бы также рассмотреть возможность использования вложенной с утверждениями:

With appExcel.ActiveWorkbook.Sheets("Detail_Report") 
    .Cells.Font.Name = "Times New Roman" 
    .Tab.Color = 92 

    With .Rows("1:1") 
     .RowHeight = 40 
     etc... 
    End With 

end with 

With appExcel.ActiveWorkbook.Sheets("FA_Month") 
    .Tab.Color = 92 

    With .Rows("1:1") 
     .RowHeight = 40 
     etc... 
    End With 

    With .cells 
     .font.size = 24 
     etc... 
    End With 

End with 

Харви

+0

Спасибо Харви за ваш вклад. Просто хотел прояснить ваш последний комментарий. Поскольку у меня есть несколько листов, нужно ... С appExcel.ActiveWorkbook.Sheets («FA_Month») ... Завершить с – Robert

+0

Спасибо Харви за ваш вклад. Просто хочу уточнить ваш последний комментарий. Поскольку у меня есть mul несколько листов мне нужно ... С appExcel.ActiveWorkbook.Sheets («FA_Month») ... Завершите с помощью appExcel.ActiveWorkbook.Sheets («FA_Quarter») ... Завершите с и т. д. для каждого месяца ИЛИ напишите окончание с в конце всех 5 листов? Я знаю, что этот вопрос глупо, и да, вы правы, что в нем много сообщений, но все они считаются одним и тем же форматом, и поэтому они петлят - вот где я схожу с ума, потому что я не хожу в wana. Я хочу обрабатывать каждый лист по-разному. – Robert

+0

Ваше первое утверждение верно. «С» используется, чтобы сообщить VBA, как обрабатывать любой код, начинающийся с «.». например .Tab.Color. «преобразуется» VBA как текст после последнего предыдущего с заявлением. т.е. appExcel.ActiveWorkbook.Sheets («FA_Month»). Tab.Color – HarveyFrench

Смежные вопросы