Открыть лист excel программно

Цитата
Сообщение от Ципихович Эндрю
Посмотреть сообщение

Неужели в ВБ не так?? проверьте, отпишитесь, ОК??

Всё так. Только я, пока, чайник и совсем недавно начал изучать язык программирования, а тут ещё по работе нужно было… Короче получилось, но открывает не из всех папок. С некоторых папок выдаёт ошибку, что нету доступа. Если знаете в чем проблема, отпишите пожалуйста. А пока, очень благодарен за помощь!!!

Добавлено через 23 минуты
В принципе разобрался с открытием, но тут проблема дальше

Visual Basic
1
2
3
4
5
6
7
8
 Private Sub Command1_Click()
Set oExcel = CreateObject("Excel.Application") 'ñîçäàòü îáúåêò Microsoft Excel
oExcel.Workbooks.Open "C:111AIC_SIP" & AIC_SIP, , , , 111, 11 '111 ýòî ïàðîëü íà îòêðûòèå ôàéëà, 11 ýòî ïàðîëü íà èçìåíåèå
oExcel.Visible = True 'False
 Windows("AIC_SIP.xls").Activate 'àêòèâàöèÿ ìîåãî ôàéëà
 Range("A1:C3").Select 'âûáèðàþ äèàïàçîí ÿ÷ååê
    Selection.Copy 'êîïèðóþ
   End Sub

Выдаёт ошибку и что хочешь делай. Подскажите пожалуйста как активизировать тот лист и работать в нём (я так понимаю, нужно WorkSheets сделать активным, а не всю книгу) . Или ещё попроще, может после открытия книги, можно как то запустить макрос написанный уже в Excel, а там уже на много проще?

Make a particular worksheet visible using a macro in Excel.

This is called activating a worksheet and is rather easy to do.

Sections:

Activate Worksheet by Name

Activate Worksheet by Index Number

Notes

Activate Worksheet by Name

Let’s navigate to, activate, the worksheet called «Sheet2».

Worksheets("Sheet2").Activate

08008f3433d614b4eb713fdcde4e01eb.jpg

Worksheets(«Shee2») is how we reference the sheet to which we want to navigate.

Sheet2 is the name of the sheet to which we want to navigate. Make sure to surround it with double quotation marks.

Activate is what actually takes the user to that worksheet.

Putting it all together, we get: Worksheets(«Sheet2»).Activate

It’s as simple as that.

Activate Worksheet by Index Number

This time, let’s navigate to the second worksheet using its index number.

All we do is to replace «Sheet2» from the last example with 2.

Worksheets(2).Activate

3e8969b16e6f131afc29445b0f9a02ac.jpg

2 is the index number of the desired worksheet and Activate is what takes us to the desired worksheet.

This example can be confusing if you are not used to using index numbers, but index numbers are really helpful when you have to do something like loop through all of the worksheets in the workbook.

Notes

Basically, just reference the desired worksheet, however you want, and then type .Activate after it.

You should not use the Activate feature to navigate to a worksheet so that you can get data from it or put data into it. This is very bad Macro/VBA design and it will make your life hell later on. To get data from separate worksheets, read this tutorial: Select Data from Separate Worksheets with Macros VBA in Excel.

This feature should be used when you want the user to end up on a specific worksheet.

Make sure to download the sample file attached to this tutorial so that you can see this macro in Excel and work with it.

Similar Content on TeachExcel

Copy and Paste Data using Macro VBA in Excel

Tutorial: How to copy and paste data using a Macro in Excel. I’ll show you multiple ways to do this,…

Select Data from Separate Worksheets with Macros VBA in Excel

Tutorial: Select data from other worksheets with Macros and VBA without navigating to those workshee…

Get the Last Row using VBA in Excel

Tutorial:
(file used in the video above)
How to find the last row of data using a Macro/VBA in Exce…

Login to a Website using a Macro

: Connect and login to a website using a macro in Excel.
This allows you to open a website a…

Get the Name of a Worksheet in Macros VBA in Excel

Tutorial: How to get the name of a worksheet in Excel using VBA and Macros and also how to store tha…

Guide to Creating Charts with a Macro in Excel

Tutorial: How to add, edit, and position charts in Excel using VBA.
This tutorial covers what to do …

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

   misha122062

09.02.09 — 15:00

Надо выгрузить данные в эксель. Но там много листов, мне нужно получить нужный. Ънаю как перебором, а как просто найти по имени?

Gbie

Екс= НОвый  COMОбъект(«Excel.Application») ;

НашФайл = Екс.Workbooks.Open(путьКФайлу);

Лист = НашФайл.Sheets.Name(«ВП»);

не идет, да и сам чую наверно неверно, но как?

   Heckfy

1 — 09.02.09 — 15:03

*******************************

Открытие книги (файла):

Книга = Эксель.WorkBooks.Open(ПутьКФайлу);

ПутьКФайлу — полный путь к файлу книги Excel.

Выбор листа книги для работы с ним:

Лист = Книга.WorkSheets(НомерЛиста);

или

Лист = Книга.WorkSheets(ИмяЛиста);

НомерЛиста — номер листа в книге, ИмяЛиста — имя листа в книге.

Получение значения ячейки листа:

Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;

НомерСтроки, НомерКолонки — номер строки и номер колонки, на пересечении которых находится ячейка.

Важно: не забывайте поле выполнения нужных действий добавлять код Эксель.Quit(); , иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.

*********************************************

   Kolyasik

2 — 09.02.09 — 15:05

Лист = НашФайл.Sheets.Item(«ВП»);

   Kolyasik

3 — 09.02.09 — 15:06

мульен вариантов ;)

   misha122062

4 — 09.02.09 — 15:06

спасибо

   misha122062

5 — 09.02.09 — 16:06

И еще, уж извените в тему.

Как записать измененый файл, наверно типа

НашФайл.Save();  правильно?

А вот как его показать пользователю? Наверно что то типа Visible…?

   Heckfy

6 — 09.02.09 — 16:12

   Тиль

7 — 09.02.09 — 16:12

а как можно выбрать только строчки? скажем все строчки по столбец ВВ?

   Heckfy

8 — 09.02.09 — 16:17

(7)

Для Х=1 по Лист.UsedRange.Row.Count Цикл

Сообщить(«»+Лист.Cells(Х, НомерКолонки).Value );

КонецЦикла;

На вскидку, как то так. :):):)

   Тиль

9 — 09.02.09 — 16:21

Row.Count в листе 65000:)) все не выкинет?

   Heckfy

10 — 09.02.09 — 16:27

(9) Что не выкинет? Куда не выкинет? Кто здесь?

   dk

11 — 09.02.09 — 16:28

(9) читай справку по UsedRange

   Тиль

12 — 09.02.09 — 16:28

Row.Count в листе Эксель 65000:))

не получится такого цикла от 1 до 65000?

   Тиль

13 — 09.02.09 — 16:29

а..понял..по смыслу догадался

   Тиль

14 — 09.02.09 — 17:39

на Лист.UsedRange.Row.Count ругается

   Тиль

15 — 10.02.09 — 07:23

ап

   skunk

16 — 10.02.09 — 07:27

попытка

       олеЕксель = новый COMОбъект(«Excel.Application»);

   исключение

       Предупреждение(«Не удалось создать объект автоматизации для работы с MS Excel!»);

       возврат;

   конецпопытки;

   попытка

       олеКнига = олеЕксель.Workbooks.Open(стрИсточник);

   исключение

       Предупреждение(«Не удалось открыть для чтения выбранный файл!»);

       возврат;

   конецпопытки;

   олеЛист = олеКнига.Worksheets.Item(1);

   чисСтрок = олеЛист.UsedRange.Rows.Count;

   Тиль

17 — 10.02.09 — 07:45

(16) а как цикл запустить чтобы вывелись строчки с первой строки по столбец ВВ например? можно использовать запрос?

   skunk

18 — 10.02.09 — 07:47

(17)сам то хоть понял чего спросил … с первой строки по столбец… это как ты себе представляешь?

   Mikeware

19 — 10.02.09 — 07:49

(18) А что? «Копать от забора и до обеда»….

   Heckfy

20 — 10.02.09 — 07:49

(16) Ну конечно же Rows. :):) Досадная очепятка.

   Тиль

21 — 10.02.09 — 07:49

с ячейки А1 по последюю ячейку столбца ВВ

   Тиль

22 — 10.02.09 — 07:50

может запрос можно использовать? что нибудь (select * from олеЛист)? проканает?

   Heckfy

23 — 10.02.09 — 07:52

(21)

Для Х=1 по Лист.UsedRange.Rows.Count Цикл

Для У=1 По Лист.UsedRange.Columns.Count Цикл

Сообщить(«»+Лист.Cells(Х, У).Value );

КонецЦикла;

КонецЦикла;

   Тиль

24 — 10.02.09 — 07:56

(23)нормально выводит…только значения в столбик…а как чтобы строка в строку выводилась?

   Heckfy

25 — 10.02.09 — 08:02

(24) Эээ, ну посмотри в СП: ТабличныйДокумент; Присоединить…. ну, и т.д.

   Тиль

26 — 10.02.09 — 08:11

блин…жалко запросом нельзя сделать…..

блин а вопрос в офф- можно конвертировать файл эксель в дбф4?

   skunk

27 — 10.02.09 — 08:14

ADO … и хоть за запрашивайся

   Тиль

28 — 10.02.09 — 08:24

(27)пример есть?

   Тиль

29 — 10.02.09 — 08:48

ап

  

skunk

30 — 10.02.09 — 10:34

Задача по объединению данных из нескольких Excel-файлов, или подгрузка доп.данных из внешнего файла решается достаточно просто: создается объект Excel, который можно скрыть визуально, затем открывается необходимый файл и выполняются нужные действия. Просто приведу несколько примеров.

Открытие файла Excel

Set objExcel = New Excel.Application
objExcel.Visible = False
Set wb = objExcel.Workbooks.Open(fname)
Set ws = wb.Sheets(1)

В первой строке запускаем новый Excel, затем делаем его невидимым, в 3-й строке открываем файл fname. В последней строке получаем первый лист открытого excel-кого файла.

Альтернативный вариант открытия файла

Set objExcel = New Excel.Application
Set wb = objExcel.Workbooks
wb.Open fname, local:=True
Set ws = wb.Item(1).ActiveSheet

При открытии файла можно использовать доп.параметры (приведу некоторые):

UpdateLinks — обновлять или нет внешние ссылки при открытии файла;
ReadOnly — открытие в режиме только для чтения;
Format — используемый при открытии разделитель (1 — символ tab, 2 — запятые, 3 — пробелы, 4 — точка с запятой, 5 — без разделителя, 6 — пользовательский разделитель, заданный в Delimiter);
Delimiter — пользовательский разделитель (в случае, если Format = 6);
Origin — тип операционной системы (xlMacintosh, xlWindows или xlMSDOS);
Local — использование в Excel языка такого же, как в открываемом файле.

Теперь можно выполнять какие-то действия с открытым файлом, просто обращаясь через wb и ws.

ws.Cells(1, 1).Value = "Test"
ws.Cells(1, 1).Font.Size = 18 ' Поменять размер шрифта
ws.Cells(1, 1).HorizontalAlignment = xlCenter ' 

Записать книгу и закрыть

wb.Save ' Записать с тем же именем
wb.SaveAs Filename:="имя_нового_файла", FileFormat:=xlOpenXMLWorkbookMacroEnabled ' Записать в новый файл
wb.Close ' Закрыть книгу

Для записи текущей книги (где находится макрос), можно использовать:

ActiveWorkbook.SaveAs 

Чтобы сохранить или перезаписать книгу Excel без вопросов, можно применить такой вариант:

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="c:Temp001.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
Application.DisplayAlerts = True

У метода SaveAs есть несколько параметров сохранения, с ними можно ознакомиться на сайте Microsoft.

Если нужно, можно закрыть книгу Excel без сохранения изменений таким образом:

wb.Close False

Получить доступ к листу Excel и прочитать данные — Visual Basic .NET

http://www.cyberforum.ru/vb-net/thread453716.html

Module mdlExcel

Dim SelectedSheet As String

Public Sub OpenSheet(ByVal Grid As DataGridView)

Dim OpenDialog As New OpenFileDialog, FileName As String = «»

With OpenDialog

.Title = «Открыть документ Excel»

.Filter = «Документы Excel|*.xls;*.xlsx»

If .ShowDialog = Windows.Forms.DialogResult.OK Then

FileName = .FileName : Application.DoEvents()

Else

Return

End If

End With

‘ Подключение к Excel.

Dim connection As OleDb.OleDbConnection, connectionString As String

Try

‘Для Excel 12.0

connectionString = «Provider=Microsoft.ACE.OLEDB.12.0; Data Source=» + FileName + «; Extended Properties=»»Excel 12.0 Xml;HDR=YES»»;»

connection = New OleDb.OleDbConnection(connectionString)

connection.Open()

Catch ex12 As Exception

Try

‘Для более ранних версий

connectionString = «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=» + FileName + «; Extended Properties=»»Excel 8.0;HDR=Yes;IMEX=1″»;»

connection = New OleDb.OleDbConnection(connectionString)

connection.Open()

Catch ex11 As Exception

MsgBox(«Неизвестная версия Excel или файл имеет неизвестный формат!», MsgBoxStyle.Exclamation)

Return

End Try

End Try

‘Отобразить форму выбора листов

ShowSelectForm(GetExcelSheetNames(connection), FileName)

If SelectedSheet Is Nothing Then Return

‘Выборка данных

Dim command As OleDb.OleDbCommand = connection.CreateCommand()

command.CommandText = «Select * From [» & SelectedSheet & «$]»

Dim Adapter As New OleDb.OleDbDataAdapter(command), Table As New DataTable

Adapter.Fill(Table) : connection.Close()

With Grid

.Visible = False : .Parent.Cursor = Cursors.WaitCursor

.DataSource = Table : SetGridSettings(Grid)

.Visible = True : .Parent.Cursor = Cursors.Default

End With

End Sub

Private Function GetExcelSheetNames(ByVal connection As OleDb.OleDbConnection) As String()

Dim Table As DataTable

Try

Table = connection.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, «TABLE»})

If Table Is Nothing Then Return Nothing

With Table

Dim i As Integer = 0, SheetsArray() As String = Nothing, s As String

For n As Integer = 0 To .Rows.Count — 1

s = .Rows(n).Item(«TABLE_NAME»).ToString.Trim(New Char() {«‘»})

If Strings.Right(s, 1) = «$» Then

ReDim Preserve SheetsArray(i)

SheetsArray(i) = s.Trim(New Char() {«$»})

i += 1

End If

Next

Table.Dispose() : Return SheetsArray

End With

Catch ex As Exception

MsgBox(ex.Message, MsgBoxStyle.Exclamation)

Return Nothing

End Try

End Function

Private Sub ShowSelectForm(ByVal Sheets() As String, ByVal FileName As String)

If Sheets Is Nothing Then SelectedSheet = Nothing : Return

Dim F As New Form, T As New TreeView, I As New ImageList, P As New Panel, B1, B2 As New Button

With I

.ColorDepth = ColorDepth.Depth32Bit

.ImageSize = New Size(16, 16)

.Images.Add(«Книга», My.Resources.Images16x16.Excel) ‘рисунок 16×16 px для названия файла excel

.Images.Add(«Документ», My.Resources.Images16x16.Документ) ‘рисунок 16×16 px для названия листа excel

End With

With T

.Name = «T»

.ImageList = I : .Font = New Font(«Arial», 10, FontStyle.Bold)

.ShowPlusMinus = False : .ShowLines = False : .ShowRootLines = False

Dim N As TreeNode = .Nodes.Add(«Книга», FileIO.FileSystem.GetName(FileName), 0, 0)

Dim nn As TreeNode

For ni As Int16 = 0 To Sheets.Length — 1

nn = N.Nodes.Add(«Лист» & ni.ToString, Sheets(ni), 1, 1)

nn.NodeFont = New Font(.Font, FontStyle.Regular)

Next

.ExpandAll()

End With

With F

.Text = » Документ Excel»

.ShowInTaskbar = False

.StartPosition = FormStartPosition.CenterParent

.FormBorderStyle = FormBorderStyle.FixedToolWindow

.Height = .Height * 1.3

.AcceptButton = B1 : .CancelButton = B2

With P

.Name = «P» : .Parent = F

.Dock = DockStyle.Bottom

End With

With T

.Parent = F

.Dock = DockStyle.Fill

.BringToFront()

AddHandler .NodeMouseDoubleClick, AddressOf T_NodeDoubleClick

End With

With B2

.Name = «B2»

.Text = «Отмена»

.Parent = P : .Top = 5

.Left = P.Width — .Width — 5

AddHandler .Click, AddressOf B2_Click

End With

With B1

.Name = «B1»

.Text = «Открыть»

.Parent = P : .Top = 5

.Left = B2.Left — .Width — 5

.Font = New Font(.Font, FontStyle.Bold)

AddHandler .Click, AddressOf B1_Click

End With

P.Height = B1.Height + 10

AddHandler .Load, AddressOf F_Load

.ShowDialog()

End With

End Sub

Private Sub SetGridSettings(ByVal Grid As DataGridView)

With Grid

.ReadOnly = False : .MultiSelect = False

.SelectionMode = DataGridViewSelectionMode.CellSelect

.RowTemplate.Resizable = DataGridViewTriState.False

.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing

For n As Integer = 0 To .ColumnCount — 1

With .Columns(n)

.Resizable = DataGridViewTriState.False

.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells

.SortMode = DataGridViewColumnSortMode.NotSortable

End With

Next

End With

End Sub

Private Sub F_Load(ByVal sender As Form, ByVal e As EventArgs)

Dim T As TreeView = sender.Controls(«T»)

With T

.Select()

If .Nodes(0).Nodes.Count > 0 Then .SelectedNode = .Nodes(0).Nodes(0)

End With

SelectedSheet = Nothing

End Sub

Private Sub B1_Click(ByVal sender As Button, ByVal e As EventArgs)

Dim F As Form = sender.Parent.Parent, T As TreeView = F.Controls(«T»)

Application.DoEvents()

If Strings.Left(T.SelectedNode.Name, 4) = «Лист» Then

F.DialogResult = DialogResult.OK

SelectedSheet = T.SelectedNode.Text : F.Close()

Else

MsgBox(«Необходимо выбрать лист.», MsgBoxStyle.Exclamation)

T.Select()

End If

End Sub

Private Sub B2_Click(ByVal sender As Button, ByVal e As EventArgs)

Dim F As Form = sender.Parent.Parent

F.DialogResult = DialogResult.Cancel

SelectedSheet = Nothing : F.Close()

End Sub

Private Sub T_NodeDoubleClick(ByVal sender As TreeView, ByVal e As TreeNodeMouseClickEventArgs)

If e.Node.Name = «Книга» Then sender.ExpandAll()

B1_Click(sender.Parent.Controls(«P»).Controls(«B1»), Nothing)

End Sub

End Module

Понравилась статья? Поделить с друзьями:
  • Открыть лист excel по имени
  • Открыть лист excel по дате
  • Открыть книгу excel с ошибками
  • Открыть книгу excel онлайн
  • Открыть книгу excel как текст