Report object в excel

Аннотация: Чтобы использовать VBA, необходимо иметь представление об объектной модели приложения. Модель объектов показывает структуру объектов офисного приложения и их взаимосвязи.

14.1. Модель объектов

Чтобы использовать VBA, необходимо иметь представление об объектной модели приложения. Модель объектов показывает структуру объектов офисного приложения и их взаимосвязи. Каждое приложение предоставляет множество взаимосвязанных объектов. Объектами являются сами приложения Application (центральный или корневой объект) и их компоненты (встроенные объекты).

Примеры объектов

MS Excelрабочий лист Worksheet, рабочая книга Workbook, диаграмма Chart

MS Access – форма Form, отчет Report

MS Word – документ Document, абзац текста Paragraph

MS Power Point – презентация Presentation, слайд Slide

Каждый элемент меню, каждая командная кнопка, любой элемент офисного документа являются объектами MS Office, которыми можно управлять программно.

Подробно структура объектов, синтаксис свойств и методов, перечень событий рассматриваются в справочнике по VBA (Help) соответствующего приложения. Справка по Visual Basic на рис.14.1 отражает структуру справочника VBA для MS Word. Нажатие на Microsoft Word Object Model развернет структуру объектов MS Word. В MS Excel это строка Microsoft Excel Object Model, а в MS PowerPoint строка имеет название Microsoft PowerPoint Object Model.

Структура справочника VBA MS Word

Рис.
14.1.
Структура справочника VBA MS Word

На рис.14.2 представлены два фрагмента модели объектов MS Excel: фрагмент объекта Application и фрагмент объекта Range; видна иерархическая структура объекта Range, который подчинен объекту Application.

Модель объектов MS Excel

Рис.
14.2.
Модель объектов MS Excel

Модель объектов отражает иерархические связи между объектами. На нулевом уровне иерархии расположен центральный объект, представляющий само приложение, которому подчинены другие объекты, составляющие первый уровень иерархии. Каждому из объектов первого и последующих уровней могут быть подчинены объекты следующего уровня и т. д. Например, в объекте Document содержатся объекты Paragraph. Доступ к объектам любого уровня возможен, если выполняется приложение, т. е. объект Application существует.

Модель объектов содержит простые объекты и коллекции объектов. Коллекция объектов (Collection) – это объект специального типа, существующий для управления объектами группы. Например, Workbooks является коллекцией всех открытых рабочих книг – объектов Workbook, а Worksheets – коллекцией рабочих листов некоторой рабочей книги – объектов Worksheet. Количество элементов коллекции заранее не фиксируется. Новый элемент может быть добавлен в произвольное место коллекции.

Операторы языка могут обращаться как к отдельному элементу коллекции (к объекту Workbook или к объекту Worksheet), так и ко всем объектам коллекции одновременно (к объекту Workbooks или к объекту Worksheets). Коллекция объектов и объекты этой коллекции обладают различными свойствами и методами.

Коллекция объектов, объединяя группу подобных объектов, является упорядоченной совокупностью объектов. Для доступа к конкретному объекту в коллекции можно использовать его имя или порядковый номер в коллекции: например, Workbooks(1) указывает на первую рабочую книгу, а Worksheets(«Sheet2») указывает на лист с именем Sheet2. Элементы коллекции перенумеровываются при удалении или добавлении элементов в коллекцию.

Совокупность объектов приложения определяет содержимое и функциональные возможности приложения, а конкретные объекты, их свойства и методы – позволяют получить доступ к содержимому и функциональным возможностям объекта. В общем случае свойства описывают сам объект или его содержимое, а методы позволяют управлять функциональными возможностями объекта.

14.2. Просмотр объектов, их свойств и методов (Object Browser)

Средство Object Browser предоставляет возможность просмотра и поиска объектов, их свойств и методов. Это средство доступно только в редакторе VB. Object Browser вызывается нажатием на пиктограмму  Object Browser или одноименной командой из меню View. Можно нажать клавишу F2.

Окно Object Browser

Окно Object Browser (рис.14.3) отображает классы, свойства, методы, события и константы объектных библиотек и процедур проекта. Средство Object Browser не дает представления об иерархии объектов.

Окно Object Browser состоит из нескольких раскрывающихся списков и панелей (окон), каждая из которых отображает часть результата поиска. Линии разбивки, разделяющие панели этого окна, позволяют изменять их размеры.

Верхний левый список на рис.14.3 называется Projects/Libraries и содержит перечень моделей объектов и библиотек, доступных для активного проекта (рис.14.4). При выборе значения All Libraries отображаются объекты всех доступных библиотек и проектов. Объект Office этого списка содержит объекты, общие для офисных приложений.

После выбора модели объектов в окне классов появляется перечень классов. Список всегда начинается с класса globals, компоненты которого доступны во всех модулях проекта.

После выделения класса компоненты этого класса отображаются в окне справа (рис.14.3). Компоненты класса обычно упорядочены по алфавиту. Порядок сортировки изменяется командой Group Members (Компоненты группы) контекстного меню. Каждому типу компонента соответствует свой значок (см. таблицу 14.1). Подробно см. Help, статья «Icons Used in the Object Browser and Code Windows». Если для класса или для компонента класса существует программный код, соответствующая строка выделяется жирным шрифтом.

Окно Object Browser

Рис.
14.3.
Окно Object Browser

Перечень доступных библиотек

Рис.
14.4.
Перечень доступных библиотек

В окне описания (нижняя панель на рис.14.3) высвечиваются краткие сведения по выделенному компоненту. Панель описания компонента показывает синтаксис выбранного объекта. Кроме формального описания, здесь обычно содержатся гиперссылки, нажатие на которые высвечивает соответствующую статью из Help’а.

В окне классов на рис.14.3 отражена модель объектов MS Excel, выделен объект Sheets,в окне компонентов перечислены свойства, методы и события коллекции Sheets и показаны сведения о методе Add этой коллекции.

Панель инструментов Object Browser

На панели инструментов расположены кнопки, облегчающие поиск объектов приложения (см. рис.14.3).

Go BackGo Back позволяет перейти к объекту, ранее выбранному в списке компонентов класса.

Go ForwardGo Forward повторяет выбор объектов в списке компонентов класса, если осуществлялся возврат к ранее выбранному объекту.

Copy to ClipboardCopy to Clipboard копирует текст из окна описания после выделения нужного фрагмента, например, имени процедуры со списком формальных параметров. Если фрагмент не выделен, то копируется только название компонента. Допускается перетаскивание мышью текста из окна описания в окно модуля. Можно использовать команду Copy из контекстного меню окна описания.

View DefinitionView Definition помещает курсор в окно описания выделенного класса или компонента.

SearchSearch выполняет поиск библиотек, название компонентов которых соответствует образцу текста в поисковой строке Search Text. В этой строке можно вводить или выбирать искомый текст. Запоминаются значения четырех последних поисковых строк. В строке поиска допускается использование стандартных подстановочных символов. Команда Find Whole Word Only («Только слово целиком») контекстного меню пиктограммы поиска задает поиск целых слов. Если поиск произведен успешно, то сведения о найденных компонентах размещаются на панели результатов поиска – панели Search Results. Эта панель отображает найденные библиотеки в алфавитном порядке. На рис.14.3 показан результат поиска метода Add.

Hide/Show Search ResultsHide/Show Search Results сворачивает или раскрывает окно результата поиска соответственно.

HelpHelp переключает в справочник по VBA на статью о компоненте, высвеченном в окне описания.

Выход из Object Browser

Переход к редактируемой процедуре осуществляется простым щелчком мыши, если текст процедуры виден на экране. В противном случае можно закрыть окно Object Browser нажатием на кнопку закрытия окна. При этом содержание справки сохраняется до следующего вызова Object Browser.

Можно в списке проектов/библиотек выбрать название нужного проекта, и тогда в окне классов появятся компоненты проекта (рис.14.5). Двойной щелчок на имени процедуры или названии модуля (процедурного листа) переводит в редактор VB.

Перечень процедур проекта

Рис.
14.5.
Перечень процедур проекта

Are you tired of using Excel tables in your reports? Here's a way to add some class to them while learning more about little-known features of Excel.In my (out of print) book,Dashboard Reporting With Excel, I recommended that you “steal” ideas for Excel reports from business magazines. I recently had another opportunity to follow my own advice.

A recent issue of Business Week carried an ad for Fidelity Investments. The ad largely consisted of a table showing their investor’s returns. The table consisted of a blue square with overlapping semi-transparent bright green bars.

The overlapping Excel objects generate this Excel table.

This figure shows my version of the Fidelity display. Instead of using Fidelity’s colors and data, I used brown and green colors, and I used data about the revenues of three web search companies. The data was provided by Hoovers.com.

This tutorial explains how to create this figure in Excel. Even if you don’t need a figure like this, just creating it will teach you about useful but little-used areas of Excel: the Camera object, grouped worksheets, and transparent AutoShapes.

Setting Up the Data in Excel

Start by creating a rough version of the simple table shown below.

Enter the three-word title shown in cell C2. To center it in the four columns as shown, select the range C2:F2 and chose Format, Cells. In the Format Cells dialog, specify Center Across Selection for the horizontal text alignment.

In cell B10, enter “Total” followed by three spaces. Then click on the Align Right button on your toolbar to position the label as shown.

Enter the data in every other row, as shown. To expand the row heights, first select the entire rows 2 through 10. To do so, click and drag your mouse pointer from the row header for row 2 through the row header for row 10. Then, when you hover over the border between any two of the selected rows, your mouse pointer will change shape. When it does, you can click and drag to make the rows taller.

An ordinary table in Excel.

After they are about tall enough, select rows 5 and 7 to make them shorter. To do so, select row 5; hold down your Control key; then select row 7. Now, when you click and drag the height of one of the rows, the other row adjusts to the same height.

Select all of the data and vertically align the text to the center of their rows. To do so, choose Format, Cells. In the Alignment tab, in the Vertical list, choose Center.

Indent the three company names slightly. To do so, select the range B4:B8. Choose Format, Cells. In the Alignment tab, in its Horizontal list box, choose Left (Indent). And then specify an Indent of 1.

Adjust the column widths about as shown. You’ll have the chance to adjust them again later.

Don’t worry about the precise row heights or column widths at this point. You’ll be able to adjust them later.

To assign a number format for the data, select the area with the numbers. Then choose Format, Cells. In the Number tab, choose Custom. Then select the “#,##0” format near the top of the Type list.

Set Up the Second Worksheet

You will create this display using two worksheets that have identical row heights and column widths. You will see why this is important in a few minutes.

To set up the second worksheet, you copy the first one. The easiest way to do that is to hold down your Ctrl key then click and drag the tab at the bottom of your worksheet to the right. When you do so, Excel adds a small image of a document with a plus sign to your mouse pointer. Once you see that plus sign you can release your mouse button to copy the worksheet.

Alternatively, to copy the worksheet, you can right-click on the tab, choose Move or Copy, and then complete the instructions in the Move or Copy dialog.

Name the left sheet Report and the right sheet Data. To do so, double-click the text in a tab to select it. You now can enter the label.

In the Report sheet, select all data and delete it using your Delete key.

You now have two worksheets with identical formats in your workbook. The Report sheet will contain the formatting and drawing objects, but no data. The Data sheet will contain data, but only minimal formatting.

Finally, for future convenience, assign the range name Data to your data range of data in the Data sheet. To do so, choose Insert, Name, Define. In the Define Name dialog, enter the name Data and a Refers-To reference of:

=Data!$B$2:$G$10

Set Up the Excel Drawing Objects

Before you can set up drawing objects, you need to make sure that your Drawing toolbar is displayed. Choose Tools, Customize. In the Toolbars tab, make sure that Drawing is checked. Then choose OK.

First set up the brown rectangle object. To do so, click AutoShapes in the Drawing toolbar; in the Basic Shapes menu item, choose the Rounded Rectangle object. When you do so, Excel turns your mouse pointer to a cross bar. Click and drag in the general area of the rectangle shown here.

Excel drawing objects that we use when we want to add class to our table.

To position the rectangle, hold down your Alt key then click and drag the rectangle. As you do so, notice that the object jumps from cell to cell. This makes it easy for you to position the top-left corner of the rectangle in cell C2.

After the top-left corner is in cell C2, position the bottom-right corner in cell F11. To do so, select the rectangle; hold down your Alt key, click on the selector circle near the bottom right corner of the object; then click and drag the bottom-right corner into into the bottom-right corner of cell F11.

Similarly, create a second Rounded Rectangle object and position it within the range B4:G4.

Copy the rectangle and paste it three times. Position two of the copies in B6 and B8 as shown. Position the last copy in cell B10. Then click on the last object’s center selection handle at its left side and drag the handle to the right. As you do so, you reduce the object’s width. Position the left side about as shown in the figure.

Format the Rounded Rectangles

Let’s assign a standard Excel color to the first object.

To do so, select the object, right-click it, and choose Format AutoShape. In the Colors and Lines tab, in the Fill dropdown list, choose the Brown color, which is the darkest orange color. In the Line dropdown list, choose No Line.

You can format the other objects in one step. To do so, you first select them. The Select Objects tool makes this easy to do. To launch the tool, click on the arrow shown here, which is on your Drawing toolbar. When you do so, your mouse pointer takes the shape of the arrow shown.

Now you can click a cell in your spreadsheet and drag the selection grid to surround the four rectangles that you need to format. When you release your pointer, Excel selects all objects that are entirely within the selection grid.

To dismiss the Select Objects tool, press the Esc key.

With the other four selected (the ones that are dark green), begin as you did before. Right-click any of the selected objects, choose Format AutoShape. In the Colors and Lines tab, in the Fill dropdown list, choose the Dark Green color. In the Line dropdown list, choose No Line. Also, however, slide the Transparency slider to 50%. Then choose OK.

Excel drawing objects that we use when we want to add class to our table.

You have one more adjustment to make.

The rounded corners of your brown rectangle probably will be much larger than the ones shown above. To make the rounded corners smaller, click on the object. When you do so, you’ll see a yellow handle in the top-left corner of the object. Drag the yellow handle up and to the left to make the corners smaller. (You could drag the handle down and to the right to make the rounded corners larger.)

Your five objects now should look somewhat like they do in this figure, but your colors will be different.

Add Excel’s Camera Object

Excel’s Camera object returns a picture of the range that it references. It works great for this application.

(Warning: Do not use the Camera object to display charts. A bug in Excel could resize your charts if you point a Camera object at them.)

You can use Camera objects without using the Camera icon. But if you intend to use the Camera tool a lot (which I do), you can set up its icon on one of your Excel toolbars. To do so, choose Tools, Customize. In the Commands tab, select Tools in the Categories list. In the Commands list, scroll about 60% of the way down the list, where you’ll see the Camera icon:Use the camera tool to create the classy table.

Click and drag this icon to any convenient toolbar in Excel.

To set up the Camera tool for this report, first create a Camera object on your Report sheet. To do so, temporarily enter any character in cell A1.

To create the object with the Camera tool, first select cell A1. Click on the Camera icon, then click on any nearby cell. When you do so, Excel drops a live picture of cell A1 wherever you clicked.

To create the object without using the Camera tool, copy cell A1 and then select a nearby cell. Hold down your Shift key and then choose Edit, Paste Picture Link. When you do so, Excel copies the Camera tool object to the active cell.

Select the Camera object if necessary. Notice the formula =$A$1 in the formula bar. To get the Camera object to display the data in the Data sheet, this formula needs to reference the range that contains those numbers, which is named Data.

To modify the formula, select it in your formula bar and enter:

=Data

When you press Enter, the camera object should display a picture of your data from your Data sheet.

Now you can erase the character you entered in cell A1 of the Report sheet.

Format Excel’s Camera Object

Initially, the next step might look like you’ve made a mistake. You need to move the Camera object into position on top of your colored rectangles. To do so, first select the Camera object. Hold down your Alt key. Then click and drag the object so that its top-left corner is positioned in the top-left corner of cell B2.

If you used the Camera tool to create your Camera object, the object will obscure your colored rectangles, and it will have a border line. To remove those settings, right-click the object and choose Format Picture. In the Colors and Lines tab, set the fill color to No Fill and the line color to No Line.

Format Your Data

Because the rounded rectangles have a dark color, the black font doesn’t show up very well against them. You therefore need to change the font color to white.

To do so, first select the data range. To do so quickly press the F5 function key to launch the Go To dialog, type Data in the Reference box, then press Enter.

With the Data range selected, assign a white font using the Font Color icon on your Excel toolbar.

Now, when you activate the Report sheet, you should see your report’s white fonts displayed on top of your colored rectangles.

Adjust the Figure

It’s likely that the rows and columns in your figure need to be adjusted. Here’s a trick that allows you to do it easily:

Select your Report sheet; hold down the Shift key then click on the Data tab. When you do so, both sheets will be selected. Also, in the title bar, Excel displays “[Group]”. Now, any adjustment you make to the Report sheet also will be made to the Data sheet.

That is, when you click and drag to adjust the rows and columns in your report, you also adjust the rows and columns in the Data sheet. Normally this wouldn’t be important. But because we’re using the Camera object, we need to keep the positioning of the two sheets exactly in sync, and this trick will do it for us.

If you need to select one of the rectangles for any reason, you might run into two problems.

First, notice that Excel won’t let you select one of the rectangles when both sheets are selected. Therefore, if your Report sheet is active, select the Data sheet (or some other sheet in your workbook) to ungroup your worksheets. Then select the Report sheet again. Now you can activate the objects on your Report sheet.

Second, because the Camera object covers your colored rectangles, you probably will have a difficult time selecting them with your mouse pointer. To do so easily, you can use the Select Objects tool. As described above, use it to encircle only the objects that you want to select.

Another version the class table that uses overlapping drawing objects.

One final adjustment that you might want to make is to apply different colors to the figure. To illustrate, here’s the same figure in blue and gray. Whatever colors you choose, keep in mind that you can adjust their intensity by adjusting the degree of transparency for any of the five colored objects.

This tutorial will cover the ways to import data from Excel into an Access Table and ways to export Access objects (Queries, Reports, Tables, or Forms) to Excel.

Import Excel File Into Access

To import an Excel file to Access, use the acImport option of DoCmd.TransferSpreadsheet :

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "Table1", "C:TempBook1.xlsx", True

Or you can use DoCmd.TransferText to import a CSV file:

DoCmd.TransferText acLinkDelim, , "Table1", "C:TempBook1.xlsx", True

Import Excel to Access Function

This function can be used to import an Excel file or CSV file into an Access Table:

Public Function ImportFile(Filename As String, HasFieldNames As Boolean, TableName As String) As Boolean
' Example usage: call ImportFile ("Select an Excel File",  "Excel Files", "*.xlsx",  "C:" , True,True, "ExcelImportTest", True, True,false,True)

    On Error GoTo err_handler
  
    If (Right(Filename, 3) = "xls") Or ((Right(Filename, 4) = "xlsx")) Then
                DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, TableName, Filename, blnHasFieldNames
            End If
    If (Right(Filename, 3) = "csv") Then
                DoCmd.TransferText acLinkDelim, , TableName, Filename, True
    End If
    
Exit_Thing:

    'Clean up
    'Check if our linked in Excel table already exists... and delete it if so
    If ObjectExists("Table", TableName) = True Then DropTable (TableName)
    Set colWorksheets = Nothing

    Exit Function
    
err_handler:
    If (Err.Number = 3086 Or Err.Number = 3274 Or Err.Number = 3073) And errCount < 3 Then
        errCount = errCount + 1

    ElseIf Err.Number = 3127 Then
        MsgBox "The fields in all the tabs are the same. Please make sure that each sheet has the exact column names if you wish to import mulitple", vbCritical, "MultiSheets not identical"
        ImportFile = False
        GoTo Exit_Thing
    Else
        MsgBox Err.Number & " - " & Err.Description
        ImportFile = False
        GoTo Exit_Thing
        Resume
    End If
End Function

You can call the function like this:

Private Sub ImportFile_Example()
 Call VBA_Access_ImportExport.ImportFile("C:TempBook1.xlsx", True, "Imported_Table_1")
End Sub

Access VBA Export to New Excel File

To export an Access object to a new Excel file, use the DoCmd.OutputTo method or the DoCmd.TransferSpreadsheet method:

Export Query to Excel

This line of VBA code will export a Query to Excel using DoCmd.OutputTo:

DoCmd.OutputTo acOutputQuery, "Query1", acFormatXLSX, "c:tempExportedQuery.xls"

Or you can use the DoCmd.TransferSpreadsheet method instead:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "Query1", "c:tempExportedQuery.xls", True

Note: This code exports to XLSX format. Instead you can update the arguments to export to a CSV or XLS file format instead (ex. acFormatXLSX to acFormatXLS).

Export Report to Excel

This line of code will export a Report to Excel using DoCmd.OutputTo:

DoCmd.OutputTo acOutputReport, "Report1", acFormatXLSX, "c:tempExportedReport.xls"

Or you can use the DoCmd.TransferSpreadsheet method instead:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "Report1", "c:tempExportedReport.xls", True

Export Table to Excel

This line of code will export a Table to Excel using DoCmd.OutputTo:

DoCmd.OutputTo acOutputTable, "Table1", acFormatXLSX, "c:tempExportedTable.xls"

Or you can use the DoCmd.TransferSpreadsheet method instead:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "Table1", "c:tempExportedTable.xls", True

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!

automacro

Learn More

Export Form to Excel

This line of code will export a Form to Excel using DoCmd.OutputTo:

DoCmd.OutputTo acOutputForm, "Form1", acFormatXLSX, "c:tempExportedForm.xls"

Or you can use the DoCmd.TransferSpreadsheet method instead:

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel8, "Form1", "c:tempExportedForm.xls", True

Export to Excel Functions

These one line commands work great to export to a new Excel file. However, they will not be able to export into an existing workbook.  In the section below we introduce functions that allow you to append your export to an existing Excel file.

Below that, we’ve included some additional functions to export to new Excel files, including error handling and more.

Export to Existing Excel File

The above code examples work great to export Access objects to a new Excel file.  However, they will not be able to export into an existing workbook.

To export Access objects to an existing Excel workbook we’ve created the following function:

Public Function AppendToExcel(strObjectType As String, strObjectName As String, strSheetName As String, strFileName As String)

    Dim rst As DAO.Recordset
    Dim ApXL As Excel.Application
    Dim xlWBk As Excel.Workbook
    Dim xlWSh As Excel.Worksheet
    Dim intCount As Integer
    Const xlToRight As Long = -4161
    Const xlCenter As Long = -4108
    Const xlBottom As Long = -4107
    Const xlContinuous As Long = 1
      
    Select Case strObjectType

    Case "Table", "Query"
        Set rst = CurrentDb.OpenRecordset(strObjectName, dbOpenDynaset, dbSeeChanges)
    Case "Form"
        Set rst = Forms(strObjectName).RecordsetClone
    Case "Report"
        Set rst = CurrentDb.OpenRecordset(Reports(strObjectName).RecordSource, dbOpenDynaset, dbSeeChanges)
    End Select

    If rst.RecordCount = 0 Then
        MsgBox "No records to be exported.", vbInformation, GetDBTitle
    Else
        On Error Resume Next
        Set ApXL = GetObject(, "Excel.Application")
        If Err.Number <> 0 Then
            Set ApXL = CreateObject("Excel.Application")
        End If
        Err.Clear

        ApXL.Visible = False
        
        Set xlWBk = ApXL.Workbooks.Open(strFileName)
        Set xlWSh = xlWBk.Sheets.Add
        xlWSh.Name = Left(strSheetName, 31)

        
        xlWSh.Range("A1").Select
        Do Until intCount = rst.fields.Count
            ApXL.ActiveCell = rst.fields(intCount).Name
            ApXL.ActiveCell.Offset(0, 1).Select
            intCount = intCount + 1
        Loop

        rst.MoveFirst
        
        xlWSh.Range("A2").CopyFromRecordset rst

        With ApXL
            .Range("A1").Select
            .Range(.Selection, .Selection.End(xlToRight)).Select
            .Selection.Interior.Pattern = xlSolid
            .Selection.Interior.PatternColorIndex = xlAutomatic
            .Selection.Interior.TintAndShade = -0.25
            .Selection.Interior.PatternTintAndShade = 0
            .Selection.Borders.LineStyle = xlNone
            .Selection.AutoFilter
            .Cells.EntireColumn.AutoFit
            .Cells.EntireRow.AutoFit
            .Range("B2").Select
            .ActiveWindow.FreezePanes = True
            .ActiveSheet.Cells.Select
            .ActiveSheet.Cells.WrapText = False
            .ActiveSheet.Cells.EntireColumn.AutoFit
            xlWSh.Range("A1").Select
            .Visible = True
        End With

        'xlWB.Close True
        'Set xlWB = Nothing
        'ApXL.Quit
        'Set ApXL = Nothing
    End If
End Function

You can use the function like this:

Private Sub AppendToExcel_Example()
    Call VBA_Access_ImportExport.ExportToExcel("Table", "Table1", "VBASheet", "C:TempTest.xlsx")
End Sub

Notice you are asked to define:

  • What to Output? Table, Report, Query, or Form
  • Object Name
  • Output Sheet Name
  • Output File Path and Name.

VBA Programming | Code Generator does work for you!

Export SQL Query to Excel

Instead you can export an SQL query to Excel using a similar function:

Public Function AppendToExcelSQLStatemet(strsql As String, strSheetName As String, strFileName As String)
    Dim strQueryName As String
    Dim ApXL As Excel.Application
    Dim xlWBk As Excel.Workbook
    Dim xlWSh As Excel.Worksheet
    Dim intCount As Integer
    Const xlCenter As Long = -4108
    Const xlBottom As Long = -4107
    Const xlVAlignCenter = -4108
    Const xlContinuous As Long = 1
    Dim qdf As DAO.QueryDef
    Dim rst As DAO.Recordset
    
    strQueryName = "tmpQueryToExportToExcel"

    If ObjectExists("Query", strQueryName) Then
        CurrentDb.QueryDefs.Delete strQueryName
    End If
    Set qdf = CurrentDb.CreateQueryDef(strQueryName, strsql)
    Set rst = CurrentDb.OpenRecordset(strQueryName, dbOpenDynaset)

    If rst.RecordCount = 0 Then
        MsgBox "No records to be exported.", vbInformation, GetDBTitle
    Else
        On Error Resume Next
        Set ApXL = GetObject(, "Excel.Application")
        If Err.Number <> 0 Then
            Set ApXL = CreateObject("Excel.Application")
        End If
        Err.Clear

        ApXL.Visible = False
        
        Set xlWBk = ApXL.Workbooks.Open(strFileName)
        Set xlWSh = xlWBk.Sheets.Add
        xlWSh.Name = Left(strSheetName, 31)

        
        xlWSh.Range("A1").Select
        Do Until intCount = rst.fields.Count
            ApXL.ActiveCell = rst.fields(intCount).Name
            ApXL.ActiveCell.Offset(0, 1).Select
            intCount = intCount + 1
        Loop

        rst.MoveFirst
        
        xlWSh.Range("A2").CopyFromRecordset rst

        With ApXL
            .Range("A1").Select
            .Range(.Selection, .Selection.End(xlToRight)).Select
            .Selection.Interior.Pattern = xlSolid
            .Selection.Interior.PatternColorIndex = xlAutomatic
            .Selection.Interior.TintAndShade = -0.25
            .Selection.Interior.PatternTintAndShade = 0
            .Selection.Borders.LineStyle = xlNone
            .Selection.AutoFilter
            .Cells.EntireColumn.AutoFit
            .Cells.EntireRow.AutoFit
            .Range("B2").Select
            .ActiveWindow.FreezePanes = True
            .ActiveSheet.Cells.Select
            .ActiveSheet.Cells.WrapText = False
            .ActiveSheet.Cells.EntireColumn.AutoFit
            xlWSh.Range("A1").Select
            .Visible = True
        End With


        'xlWB.Close True
        'Set xlWB = Nothing
        'ApXL.Quit
        'Set ApXL = Nothing
    End If
End Function

Called like this:

Private Sub AppendToExcelSQLStatemet_Example()
    Call VBA_Access_ImportExport.ExportToExcel("SELECT * FROM Table1", "VBASheet", "C:TempTest.xlsx")
End Sub

Where you are asked to input:

  • SQL Query
  • Output Sheet Name
  • Output File Path and Name.

Function to Export to New Excel File

These functions allow you to export Access objects to a new Excel workbook. You might find them more useful than the simple single lines at the top of the document.

Public Function ExportToExcel(strObjectType As String, strObjectName As String, Optional strSheetName As String, Optional strFileName As String)

    Dim rst As DAO.Recordset
    Dim ApXL As Object
    Dim xlWBk As Object
    Dim xlWSh As Object
    Dim intCount As Integer
    Const xlToRight As Long = -4161
    Const xlCenter As Long = -4108
    Const xlBottom As Long = -4107
    Const xlContinuous As Long = 1

    On Error GoTo ExportToExcel_Err
    DoCmd.Hourglass True

    Select Case strObjectType

    Case "Table", "Query"
        Set rst = CurrentDb.OpenRecordset(strObjectName, dbOpenDynaset, dbSeeChanges)
    Case "Form"
        Set rst = Forms(strObjectName).RecordsetClone
    Case "Report"
        Set rst = CurrentDb.OpenRecordset(Reports(strObjectName).RecordSource, dbOpenDynaset, dbSeeChanges)
    End Select

    If rst.RecordCount = 0 Then
        MsgBox "No records to be exported.", vbInformation, GetDBTitle
        DoCmd.Hourglass False
    Else
        On Error Resume Next
        Set ApXL = GetObject(, "Excel.Application")
        If Err.Number <> 0 Then
            Set ApXL = CreateObject("Excel.Application")
        End If
        Err.Clear
        On Error GoTo ExportToExcel_Err

        Set xlWBk = ApXL.Workbooks.Add
        ApXL.Visible = False

        Set xlWSh = xlWBk.Worksheets("Sheet1")
        If Len(strSheetName) > 0 Then
            xlWSh.Name = Left(strSheetName, 31)
        End If

        xlWSh.Range("A1").Select
        Do Until intCount = rst.fields.Count
            ApXL.ActiveCell = rst.fields(intCount).Name
            ApXL.ActiveCell.Offset(0, 1).Select
            intCount = intCount + 1
        Loop

        rst.MoveFirst
        
        xlWSh.Range("A2").CopyFromRecordset rst

        With ApXL
            .Range("A1").Select
            .Range(.Selection, .Selection.End(xlToRight)).Select
            .Selection.Interior.Pattern = xlSolid
            .Selection.Interior.PatternColorIndex = xlAutomatic
            .Selection.Interior.TintAndShade = -0.25
            .Selection.Interior.PatternTintAndShade = 0
            .Selection.Borders.LineStyle = xlNone
            .Selection.AutoFilter
            .Cells.EntireColumn.AutoFit
            .Cells.EntireRow.AutoFit
            .Range("B2").Select
            .ActiveWindow.FreezePanes = True
            .ActiveSheet.Cells.Select
            .ActiveSheet.Cells.WrapText = False
            .ActiveSheet.Cells.EntireColumn.AutoFit
            xlWSh.Range("A1").Select
            .Visible = True
        End With

retry:
        If FileExists(strFileName) Then
            Kill strFileName
        End If
        If strFileName <> "" Then
            xlWBk.SaveAs strFileName, FileFormat:=56
        End If
        
        rst.Close
        Set rst = Nothing
        DoCmd.Hourglass False
    End If

ExportToExcel_Exit:
    DoCmd.Hourglass False
    Exit Function

ExportToExcel_Err:
    DoCmd.SetWarnings True
    MsgBox Err.Description, vbExclamation, Err.Number
    DoCmd.Hourglass False
    Resume ExportToExcel_Exit

End Function

The function can be called like this:

Private Sub ExportToExcel_Example()
 Call VBA_Access_ImportExport.ExportToExcel("Table", "Table1", "VBASheet")
End Sub

Термин Объекты Excel (понимаемый в широком смысле, как объектная модель Excel) включает в себя элементы, из которых состоит любая рабочая книга Excel. Это, например, рабочие листы (Worksheets), строки (Rows), столбцы (Columns), диапазоны ячеек (Ranges) и сама рабочая книга Excel (Workbook) в том числе. Каждый объект Excel имеет набор свойств, которые являются его неотъемлемой частью.

Например, объект Worksheet (рабочий лист) имеет свойства Name (имя), Protection (защита), Visible (видимость), Scroll Area (область прокрутки) и так далее. Таким образом, если в процессе выполнения макроса требуется скрыть рабочий лист, то достаточно изменить свойство Visible этого листа.

В Excel VBA существует особый тип объектов – коллекция. Как можно догадаться из названия, коллекция ссылается на группу (или коллекцию) объектов Excel. Например, коллекция Rows – это объект, содержащий все строки рабочего листа.

Доступ ко всем основным объектам Excel может быть осуществлён (прямо или косвенно) через объект Workbooks, который является коллекцией всех открытых в данный момент рабочих книг. Каждая рабочая книга содержит объект Sheets – коллекция, которая включает в себя все рабочие листы и листы с диаграммами рабочей книги. Каждый объект Worksheet состоит из коллекции Rows – в неё входят все строки рабочего листа, и коллекции Columns – все столбцы рабочего листа, и так далее.

В следующей таблице перечислены некоторые наиболее часто используемые объекты Excel. Полный перечень объектов Excel VBA можно найти на сайте Microsoft Office Developer (на английском).

Объект Описание
Application Приложение Excel.
Workbooks Коллекция всех открытых в данный момент рабочих книг в текущем приложении Excel. Доступ к какой-то конкретной рабочей книге может быть осуществлён через объект Workbooks при помощи числового индекса рабочей книги или её имени, например, Workbooks(1) или Workbooks(«Книга1»).
Workbook Объект Workbook – это рабочая книга. Доступ к ней может быть выполнен через коллекцию Workbooks при помощи числового индекса или имени рабочей книги (см. выше). Для доступа к активной в данный момент рабочей книге можно использовать ActiveWorkbook.

Из объекта Workbook можно получить доступ к объекту Sheets, который является коллекцией всех листов рабочей книги (рабочие листы и диаграммы), а также к объекту Worksheets, который представляет из себя коллекцию всех рабочих листов книги Excel.

Sheets Объект Sheets– это коллекция всех листов рабочей книги. Это могут быть как рабочие листы, так и диаграммы на отдельном листе. Доступ к отдельному листу из коллекции Sheets можно получить при помощи числового индекса листа или его имени, например, Sheets(1) или Sheets(«Лист1»).
Worksheets Объект Worksheets – это коллекция всех рабочих листов в рабочей книге (то есть, все листы, кроме диаграмм на отдельном листе). Доступ к отдельному рабочему листу из коллекции Worksheets можно получить при помощи числового индекса рабочего листа или его имени, например, Worksheets(1) или Worksheets(«Лист1»).
Worksheet Объект Worksheet – это отдельный рабочий лист книги Excel. Доступ к нему можно получить при помощи числового индекса рабочего листа или его имени (см. выше).

Кроме этого Вы можете использовать ActiveSheet для доступа к активному в данный момент рабочему листу. Из объекта Worksheet можно получить доступ к объектам Rows и Columns, которые являются коллекцией объектов Range, ссылающихся на строки и столбцы рабочего листа. А также можно получить доступ к отдельной ячейке или к любому диапазону смежных ячеек на рабочем листе.

Rows Объект Rows – это коллекция всех строк рабочего листа. Объект Range, состоящий из отдельной строки рабочего листа, может быть доступен по номеру этой строки, например, Rows(1).
Columns Объект Columns – это коллекция всех столбцов рабочего листа. Объект Range, состоящий из отдельного столбца рабочего листа, может быть доступен по номеру этого столбца, например, Columns(1).
Range Объект Range – это любое количество смежных ячеек на рабочем листе. Это может быть одна ячейка или все ячейки листа.

Доступ к диапазону, состоящему из единственной ячейки, может быть осуществлён через объект Worksheet при помощи свойства Cells, например, Worksheet.Cells(1,1).

По-другому ссылку на диапазон можно записать, указав адреса начальной и конечной ячеек. Их можно записать через двоеточие или через запятую. Например, Worksheet.Range(«A1:B10») или Worksheet.Range(«A1», «B10») или Worksheet.Range(Cells(1,1), Cells(10,2)).

Обратите внимание, если в адресе Range вторая ячейка не указана (например, Worksheet.Range(«A1») или Worksheet.Range(Cells(1,1)), то будет выбран диапазон, состоящий из единственной ячейки.

Приведённая выше таблица показывает, как выполняется доступ к объектам Excel через родительские объекты. Например, ссылку на диапазон ячеек можно записать вот так:

Workbooks("Книга1").Worksheets("Лист1").Range("A1:B10")

Содержание

  1. Присваивание объекта переменной
  2. Активный объект
  3. Смена активного объекта
  4. Свойства объектов
  5. Методы объектов
  6. Рассмотрим несколько примеров
  7. Пример 1
  8. Пример 2
  9. Пример 3

Присваивание объекта переменной

В Excel VBA объект может быть присвоен переменной при помощи ключевого слова Set:

Dim DataWb As Workbook
Set DataWb = Workbooks("Книга1.xlsx")

Активный объект

В любой момент времени в Excel есть активный объект Workbook – это рабочая книга, открытая в этот момент. Точно так же существует активный объект Worksheet, активный объект Range и так далее.

Сослаться на активный объект Workbook или Sheet в коде VBA можно как на ActiveWorkbook или ActiveSheet, а на активный объект Range – как на Selection.

Если в коде VBA записана ссылка на рабочий лист, без указания к какой именно рабочей книге он относится, то Excel по умолчанию обращается к активной рабочей книге. Точно так же, если сослаться на диапазон, не указывая определённую рабочую книгу или лист, то Excel по умолчанию обратится к активному рабочему листу в активной рабочей книге.

Таким образом, чтобы сослаться на диапазон A1:B10 на активном рабочем листе активной книги, можно записать просто:

Смена активного объекта

Если в процессе выполнения программы требуется сделать активной другую рабочую книгу, другой рабочий лист, диапазон и так далее, то для этого нужно использовать методы Activate или Select вот таким образом:

Sub ActivateAndSelect()

   Workbooks("Книга2").Activate
   Worksheets("Лист2").Select
   Worksheets("Лист2").Range("A1:B10").Select
   Worksheets("Лист2").Range("A5").Activate

End Sub

Методы объектов, в том числе использованные только что методы Activate или Select, далее будут рассмотрены более подробно.

Свойства объектов

Каждый объект VBA имеет заданные для него свойства. Например, объект Workbook имеет свойства Name (имя), RevisionNumber (количество сохранений), Sheets (листы) и множество других. Чтобы получить доступ к свойствам объекта, нужно записать имя объекта, затем точку и далее имя свойства. Например, имя активной рабочей книги может быть доступно вот так: ActiveWorkbook.Name. Таким образом, чтобы присвоить переменной wbName имя активной рабочей книги, можно использовать вот такой код:

Dim wbName As String
wbName = ActiveWorkbook.Name

Ранее мы показали, как объект Workbook может быть использован для доступа к объекту Worksheet при помощи такой команды:

Workbooks("Книга1").Worksheets("Лист1")

Это возможно потому, что коллекция Worksheets является свойством объекта Workbook.

Некоторые свойства объекта доступны только для чтения, то есть их значения пользователь изменять не может. В то же время существуют свойства, которым можно присваивать различные значения. Например, чтобы изменить название активного листа на «Мой рабочий лист«, достаточно присвоить это имя свойству Name активного листа, вот так:

ActiveSheet.Name = "Мой рабочий лист"

Методы объектов

Объекты VBA имеют методы для выполнения определённых действий. Методы объекта – это процедуры, привязанные к объектам определённого типа. Например, объект Workbook имеет методы Activate, Close, Save и ещё множество других.

Для того, чтобы вызвать метод объекта, нужно записать имя объекта, точку и имя метода. Например, чтобы сохранить активную рабочую книгу, можно использовать вот такую строку кода:

Как и другие процедуры, методы могут иметь аргументы, которые передаются методу при его вызове. Например, метод Close объекта Workbook имеет три необязательных аргумента, которые определяют, должна ли быть сохранена рабочая книга перед закрытием и тому подобное.

Чтобы передать методу аргументы, необходимо записать после вызова метода значения этих аргументов через запятую. Например, если нужно сохранить активную рабочую книгу как файл .csv с именем «Книга2», то нужно вызвать метод SaveAs объекта Workbook и передать аргументу Filename значение Книга2, а аргументу FileFormat – значение xlCSV:

ActiveWorkbook.SaveAs "Книга2", xlCSV

Чтобы сделать код более читаемым, при вызове метода можно использовать именованные аргументы. В этом случае сначала записывают имя аргумента, затем оператор присваивания «:=» и после него указывают значение. Таким образом, приведённый выше пример вызова метода SaveAs объекта Workbook можно записать по-другому:

ActiveWorkbook.SaveAs Filename:="Книга2", [FileFormat]:=xlCSV

В окне Object Browser редактора Visual Basic показан список всех доступных объектов, их свойств и методов. Чтобы открыть этот список, запустите редактор Visual Basic и нажмите F2.

Рассмотрим несколько примеров

Пример 1

Этот отрывок кода VBA может служить иллюстрацией использования цикла For Each. В данном случае мы обратимся к нему, чтобы продемонстрировать ссылки на объект Worksheets (который по умолчанию берётся из активной рабочей книги) и ссылки на каждый объект Worksheet отдельно. Обратите внимание, что для вывода на экран имени каждого рабочего листа использовано свойство Name объекта Worksheet.

'Пролистываем поочерёдно все рабочие листы активной рабочей книги
'и выводим окно сообщения с именем каждого рабочего листа

Dim wSheet As Worksheet

For Each wSheet in Worksheets
   MsgBox "Найден рабочий лист: " & wSheet.Name
Next wSheet

Пример 2

В этом примере кода VBA показано, как можно получать доступ к рабочим листам и диапазонам ячеек из других рабочих книг. Кроме этого, Вы убедитесь, что если не указана ссылка на какой-то определённый объект, то по умолчанию используются активные объекты Excel. Данный пример демонстрирует использование ключевого слова Set для присваивания объекта переменной.

В коде, приведённом ниже, для объекта Range вызывается метод PasteSpecial. Этот метод передаёт аргументу Paste значение xlPasteValues.

'Копируем диапазон ячеек из листа "Лист1" другой рабочей книги (с именем Data.xlsx)
'и вставляем только значения на лист "Результаты" текущей рабочей книги (с именем CurrWb.xlsm)

Dim dataWb As Workbook

Set dataWb = Workbooks.Open("C:Data")

'Обратите внимание, что DataWb – это активная рабочая книга.
'Следовательно, следующее действие выполняется с объектом Sheets в DataWb.

Sheets("Лист1").Range("A1:B10").Copy

'Вставляем значения, скопированные из диапазона ячеек, на рабочий лист "Результаты"
'текущей рабочей книги. Обратите внимание, что рабочая книга CurrWb.xlsm не является
'активной, поэтому должна быть указана в ссылке.

Workbooks("CurrWb").Sheets("Результаты").Range("A1").PasteSpecial Paste:=xlPasteValues

Пример 3

Следующий отрывок кода VBA показывает пример объекта (коллекции) Columns и демонстрирует, как доступ к нему осуществляется из объекта Worksheet. Кроме этого, Вы увидите, что, ссылаясь на ячейку или диапазон ячеек на активном рабочем листе, можно не указывать этот лист в ссылке. Вновь встречаем ключевое слово Set, при помощи которого объект Range присваивается переменной Col.

Данный код VBA показывает также пример доступа к свойству Value объекта Range и изменение его значения.

'С помощью цикла просматриваем значения в столбце A на листе "Лист2",
'выполняем с каждым из них арифметические операции и записываем результат
'в столбец A активного рабочего листа (Лист1)

Dim i As Integer
Dim Col As Range
Dim dVal As Double

'Присваиваем переменной Col столбец A рабочего листа "Лист2"

Set Col = Sheets("Лист2").Columns("A")
i = 1

'Просматриваем последовательно все ячейки столбца Col до тех пор
'пока не встретится пустая ячейка

Do Until IsEmpty(Col.Cells(i))

   'Выполняем арифметические операции со значением текущей ячейки

   dVal = Col.Cells(i).Value * 3 - 1

   'Следующая команда записывает результат в столбец A
   'активного листа. Нет необходимости указывать в ссылке имя листа,
   'так как это активный лист рабочей книги.

   Cells(i, 1).Value = dVal
   i = i + 1

Loop

Оцените качество статьи. Нам важно ваше мнение:

1239 / 1049 / 293

Регистрация: 07.03.2012

Сообщений: 3,245

1

16.04.2012, 16:50. Показов 5109. Ответов 8


Студворк — интернет-сервис помощи студентам

В reportViewer’e есть кнопка по нажатии которой можно экспортировать в Excel, а как мне повесить на свою кнопку код, по нажатии которой будет происходить экспорт в Excel из reportViewer’a?



0



dimasamchenko

336 / 269 / 21

Регистрация: 30.03.2009

Сообщений: 500

17.04.2012, 10:48

2

Монфрид, Вот таким образом

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
this.MainTBLTableAdapter.FillBy(this.Customer.MainTBL, SF);//Заполняем отчет Здесь Ваши данные !!!
      this.reportViewer1.RefreshReport(); //обновляем его
 
      Warning[] warnings;
      string[] streamids;
      string mimeType;
      string encoding;
      string extension;
 //PDF Экспорт
      byte[] bytes = reportViewer1.LocalReport.Render(
         "Pdf", null, out mimeType, out encoding,
          out extension,
         out streamids, out warnings);
 
      FileStream fs = new FileStream(@"output.pdf",
         FileMode.Create);
      fs.Write(bytes, 0, bytes.Length);
      fs.Close();
 
 
 // Excel  Экспорт
      byte[] bytes1 = reportViewer1.LocalReport.Render(
                "Excel", null, out mimeType, out encoding,
                 out extension,
                out streamids, out warnings);
 
      FileStream fs1 = new FileStream(@"output.xls",
         FileMode.Create);
      fs1.Write(bytes1, 0, bytes1.Length);
      fs1.Close();

весь выше указаный код поместите в обработчик кнопки или в отдельную функцию вызываемую из обработчика кнопки



2



Монфрид

1239 / 1049 / 293

Регистрация: 07.03.2012

Сообщений: 3,245

17.04.2012, 18:29

 [ТС]

3

если что, то я решил вот так:

C#
1
2
if (reportViewer1.ExportDialog(reportViewer1.LocalReport.ListRenderingExtensions()[0]) == System.Windows.Forms.DialogResult.OK)
                    MessageBox.Show("Документ был сохранён");



2



Sanek911

6 / 6 / 1

Регистрация: 04.12.2009

Сообщений: 42

26.09.2013, 10:49

4

Цитата
Сообщение от Монфрид
Посмотреть сообщение

если что, то я решил вот так:

C#
1
2
if (reportViewer1.ExportDialog(reportViewer1.LocalReport.ListRenderingExtensions()[0]) == System.Windows.Forms.DialogResult.OK)
                    MessageBox.Show("Документ был сохранён");

Монфрид, можешь кусок кода побольше выложить, ато не особо понимаю куда эту строку притулить



1



1239 / 1049 / 293

Регистрация: 07.03.2012

Сообщений: 3,245

26.09.2013, 11:24

 [ТС]

5

Sanek911, тут уж полней куска кода нет. Куда хочешь (на кнопку например) туда и вешай этот код. Главное чтобы репортвьювер был на форме



0



Sanek911

6 / 6 / 1

Регистрация: 04.12.2009

Сообщений: 42

26.09.2013, 11:32

6

Операция является недопустимой из-за текущего состояния объекта.

вот такая ошибка у меня

ReportViewer есть на форме

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
       public FormReportView(Object DataTable, String ReportDataSetname, String NameReport, String NameReportRDLC) {
            InitializeComponent();
 
            Microsoft.Reporting.WinForms.ReportDataSource
                reportDataSource1 = SetParameters(ReportDataSetname, DataTable, NameReportRDLC);
            rpview.RefreshReport();
            if (rpview.ExportDialog(rpview.LocalReport.ListRenderingExtensions()[0]) == System.Windows.Forms.DialogResult.OK)
                MessageBox.Show("Документ был сохранён");
 
            this.Close();
        }
 
        private Microsoft.Reporting.WinForms.ReportDataSource SetParameters(
            String ReportDataSourceName, Object DataTable, String ReportName) 
        {
            Microsoft.Reporting.WinForms.ReportDataSource 
                reportDataSource1 = new Microsoft.Reporting.WinForms.ReportDataSource();
 
            reportDataSource1.Name = ReportDataSourceName;
            reportDataSource1.Value = DataTable;
            this.rpview.LocalReport.DataSources.Add(reportDataSource1);
            this.rpview.LocalReport.ReportEmbeddedResource = ReportName;
            return reportDataSource1;
        }



0



1239 / 1049 / 293

Регистрация: 07.03.2012

Сообщений: 3,245

26.09.2013, 11:51

 [ТС]

7

так, ну вы в конструктор напихали всё что можно.
вынесите код экспорта на отдельную кнопку



0



6 / 6 / 1

Регистрация: 04.12.2009

Сообщений: 42

26.09.2013, 12:17

8

Я не знаю как вы сделали, но используя ваш вариант я подразумевал, что форма содержащая ReportViewer не будет отображаться.
С вашим вариантом необходимо отображать форму.
Я сделал как предлагали ранее. Спасибо за уделенное время.



0



3 / 3 / 6

Регистрация: 31.05.2014

Сообщений: 177

01.08.2016, 18:00

9

dimasamchenko, подскажите пожалуйста, мне нужно авто генерация отчета в excel и отправкой его на почту, но отчет написанный в report builder, Вы можете что то посоветовать? Может написать небольшое приложение на c# используя вашу часть кода и переписать отчет в reportviewer ? Но смогу ли я потом поставить эту программу на планировщик?



0



Like this post? Please share to your friends:
  • Report manager for excel
  • Report making in excel
  • Report in word formation
  • Report in excel vba
  • Report in excel template