Сообщение от Ципихович Эндрю
Неужели в ВБ не так?? проверьте, отпишитесь, ОК??
Всё так. Только я, пока, чайник и совсем недавно начал изучать язык программирования, а тут ещё по работе нужно было… Короче получилось, но открывает не из всех папок. С некоторых папок выдаёт ошибку, что нету доступа. Если знаете в чем проблема, отпишите пожалуйста. А пока, очень благодарен за помощь!!!
Добавлено через 23 минуты
В принципе разобрался с открытием, но тут проблема дальше
Visual Basic | ||
|
Выдаёт ошибку и что хочешь делай. Подскажите пожалуйста как активизировать тот лист и работать в нём (я так понимаю, нужно 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
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
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!
09.02.09 — 15:00
Надо выгрузить данные в эксель. Но там много листов, мне нужно получить нужный. Ънаю как перебором, а как просто найти по имени?
Gbie
Екс= НОвый COMОбъект(«Excel.Application») ;
НашФайл = Екс.Workbooks.Open(путьКФайлу);
Лист = НашФайл.Sheets.Name(«ВП»);
не идет, да и сам чую наверно неверно, но как?
1 — 09.02.09 — 15:03
*******************************
Открытие книги (файла):
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
ПутьКФайлу — полный путь к файлу книги Excel.
Выбор листа книги для работы с ним:
Лист = Книга.WorkSheets(НомерЛиста);
или
Лист = Книга.WorkSheets(ИмяЛиста);
НомерЛиста — номер листа в книге, ИмяЛиста — имя листа в книге.
Получение значения ячейки листа:
Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;
НомерСтроки, НомерКолонки — номер строки и номер колонки, на пересечении которых находится ячейка.
Важно: не забывайте поле выполнения нужных действий добавлять код Эксель.Quit(); , иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.
*********************************************
2 — 09.02.09 — 15:05
Лист = НашФайл.Sheets.Item(«ВП»);
3 — 09.02.09 — 15:06
мульен вариантов
4 — 09.02.09 — 15:06
спасибо
5 — 09.02.09 — 16:06
И еще, уж извените в тему.
Как записать измененый файл, наверно типа
НашФайл.Save(); правильно?
А вот как его показать пользователю? Наверно что то типа Visible…?
6 — 09.02.09 — 16:12
7 — 09.02.09 — 16:12
а как можно выбрать только строчки? скажем все строчки по столбец ВВ?
8 — 09.02.09 — 16:17
(7)
Для Х=1 по Лист.UsedRange.Row.Count Цикл
Сообщить(«»+Лист.Cells(Х, НомерКолонки).Value );
КонецЦикла;
На вскидку, как то так. :):):)
9 — 09.02.09 — 16:21
Row.Count в листе 65000:)) все не выкинет?
10 — 09.02.09 — 16:27
(9) Что не выкинет? Куда не выкинет? Кто здесь?
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
ап
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) а как цикл запустить чтобы вывелись строчки с первой строки по столбец ВВ например? можно использовать запрос?
18 — 10.02.09 — 07:47
(17)сам то хоть понял чего спросил … с первой строки по столбец… это как ты себе представляешь?
19 — 10.02.09 — 07:49
(18) А что? «Копать от забора и до обеда»….
20 — 10.02.09 — 07:49
(16) Ну конечно же Rows. :):) Досадная очепятка.
21 — 10.02.09 — 07:49
с ячейки А1 по последюю ячейку столбца ВВ
22 — 10.02.09 — 07:50
может запрос можно использовать? что нибудь (select * from олеЛист)? проканает?
23 — 10.02.09 — 07:52
(21)
Для Х=1 по Лист.UsedRange.Rows.Count Цикл
Для У=1 По Лист.UsedRange.Columns.Count Цикл
Сообщить(«»+Лист.Cells(Х, У).Value );
КонецЦикла;
КонецЦикла;
24 — 10.02.09 — 07:56
(23)нормально выводит…только значения в столбик…а как чтобы строка в строку выводилась?
25 — 10.02.09 — 08:02
(24) Эээ, ну посмотри в СП: ТабличныйДокумент; Присоединить…. ну, и т.д.
26 — 10.02.09 — 08:11
блин…жалко запросом нельзя сделать…..
блин а вопрос в офф- можно конвертировать файл эксель в дбф4?
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