powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка при добавлении модуля в книгу Excel
7 сообщений из 7, страница 1 из 1
Ошибка при добавлении модуля в книгу Excel
    #39619208
Фотография simply
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый.
Добавляю модуль в книгу Excel, (файл .bas). Если я обращаюсь к файлу книги первый раз, то модуль добавляется, и процедуры этого модуля выполняются полностью. Если же я, по какой то причине не сохранил файл Excel, просто закрыл его без сохранения, то при повторной попытке проделать ту же операцию, возникает ошибка и модуль не добавляется до тех пор, пока я не закрою базу и не зайду в неё снова. Прошу помощи.
Так же хочу спросить, как можно добавить модуль в книгу Excel не через файл .bas а напрямую из базы Access.
Спасибо.

Код: vbnet
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.
Private Sub btn_Add_modulе_IN_Excel_Click()
'On Error Resume Next
Dim strFP As String
Dim strFI_60_01 As String
Dim Podrazdelenie_naim As String
Me.PatchFilesExcel = OpenDialogFileName_01
Me.PatchFilesExcel.Requery
strFP = Me.PatchFilesExcel

'---------------
Dim xlApp As Object, xlBook As Object ', xlSheet As Object
Dim Worksheets As Workbook
Dim ThisWorkbook As Object
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(strFP)
xlApp.visible = True
'-------------------------

Const sFileName As String = "r:\ASUMI_RD_Excel\Module\mod_Ssylka.bas"
 
'Добавление модуля в активную книгу.

ActiveWorkbook.VBProject.VBComponents.Import FileName:=sFileName ' Здесь ошибка: Object variable not set (Error 91) 

'Обращение к процедуре в книге
xlApp.Application.Run "Select_Insert_Column"

End Sub
...
Рейтинг: 0 / 0
Ошибка при добавлении модуля в книгу Excel
    #39619210
Фотография simply
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, получается, что срабатывает через раз. Первый вставляет модуль, второй раз нет, третий вставляет. Как то так.
...
Рейтинг: 0 / 0
Ошибка при добавлении модуля в книгу Excel
    #39619732
simplyЕсли же я, по какой то причине не сохранил файл Excel , просто закрыл его без сохранения, то при повторной попытке проделать ту же операцию, возникает ошибка и модуль не добавляется до тех пор, пока я не закрою базу и не зайду в неё снова. Ну так сохраните его методом Save сразу после импорта.

Лучше объясните, зачем вам это нужно. Ведь можно прямо из Акса выполнить почти любые действия с листом/книгой Ёкселя.
...
Рейтинг: 0 / 0
Ошибка при добавлении модуля в книгу Excel
    #39620292
Фотография simply
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев )simplyЕсли же я, по какой то причине не сохранил файл Excel , просто закрыл его без сохранения, то при повторной попытке проделать ту же операцию, возникает ошибка и модуль не добавляется до тех пор, пока я не закрою базу и не зайду в неё снова. Ну так сохраните его методом Save сразу после импорта.
.
Здесь вопрос не в сохранении книги, а в том, что после операции вставки модуля в первый файл Excel (книгу), я не могу проделать ту же операцию с другим файлом (книгой).
т.е. отработал одну книгу, сохранил, закрыл. Пытаюсь проделать такую же операцию с другой книгой, книга открывается и дальше ничего не происходит, пока не перезапущу базу. Вопрос, что мешает?
Первую книгу открыл, вставился модуль, сохранил, закрыл. Обращаюсь к следующей книге, открываю, модуль не вставился, закрыл книгу, закрыл базу, открыл базу и дальше все нормально.

В связи с этим я задал вопрос №1: ЕСТЬ ЛИ ВОЗМОЖНОСТЬ ВСТАВИТЬ МОДУЛЬ (ПРОЦЕДУРУ) В КНИГУ EXCEL НАПРЯМУЮ, МИНУЯ ФАЙЛ .bas.
БЕЗ ЭТОГО:
Код: vbnet
1.
ActiveWorkbook.VBProject.VBComponents.Import FileName:=sFileName



Анатолий ( Киев )Лучше объясните, зачем вам это нужно. Ведь можно прямо из Акса выполнить почти любые действия с листом/книгой Ёкселя.

Объясняю, зачем мне это нужно:

Я уже задавал этот вопрос здесь: http://www.sql.ru/forum/1284005/vernut-pri-importe-iz-excel-format-yacheyki
но как то не пошло.
У меня есть файл ексель с несколькими уровнями группировки, допустим их четыре как в моем случае.
Мне нужно вернуть содержимое книги в базу Access вместе иерархией группировки.
Что я делаю:
1. Вставляю файл модуля .bas с функцией, при помощи которой возвращаю номер уровня в группировке, т.е кол- отступов

Код: vbnet
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.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
Attribute VB_Name = "mod_Ssylka"

' Функция возвращает кол-во отступов, т.е номер уровня в группировке
Function КолОтступов(Ssylka As Range)
КолОтступов = Ssylka.IndentLevel
End Function


Sub Select_Insert_Column()
Dim MyRange As Object
Dim lLastRow As Long
Dim lLastCol As Long
 
' определяем  ПОСЛЕДНЮЮ ЯЧЕЙКУ НА ЛИСТЕ
    lLastRow = Cells(Rows.Count, 1).End(xlUp).Row


' добавляем колонку. Так как у нас из за форматирования выделяется и добавляется больше колонок то лишние удаляем
    
    ' Store the selected range in a variable.
    Set MyRange = Selection
    ' Select the entire column.
    Selection.EntireColumn.Select
    ' Insert Columns in all selected sheets.
    Selection.Insert
    ' Reselect the previously selected cells.
    MyRange.Select
    
' лишние удаляем
    Columns("A:I").Select
    Selection.Delete Shift:=xlToLeft
    
' Заполняем пустые ячейки значением "0"
    Range("B3").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B5").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("B6:K6").Select
    
 ' Копируем в первую ячейку формулу
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "=КолОтступов(RC[1])"
    
 ' Размножаем формулу из первой ячейки до последней
    Range("A1").Select
    Selection.Copy
    Range("$A$2:$A$" & lLastRow).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
 
MsgBox "Модуль добавлен"
End Sub



Анатолий ( Киев ) , я не часто проделываю операции Excel, опыта мало. Если это можно сделать красивее, буду признателен.
...
Рейтинг: 0 / 0
Ошибка при добавлении модуля в книгу Excel
    #39620293
Фотография simply
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Ошибка при добавлении модуля в книгу Excel
    #39620564
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
simply,

Эко у вас как всё хітр0...

Может просче сразу спрашівать то, что нужно? Вам нужно не коллічество отступов, а уровень в іерархіі для соответствуюсчей строкі, вот её і спрашівайте, можно прямо із Акса, я так думаю.

Код: vbnet
1.
debug.print Worksheets("Sheet1").Rows(13).OutlineLevel
...
Рейтинг: 0 / 0
Ошибка при добавлении модуля в книгу Excel
    #39622035
Если отказаться от применения функции КолОтступов, а просто пройти в цикле по ячейкам в этой колонке и присвоить им OutlineLevel (IndentLevel не надежно), то весь ваш код можно (и нужно) выполнить из Акса. Естественно, код нужно "причесать" для работы с Excel извне.
В любом случае использование Select и Selection не рекомендуется (если только вы не собираетесь развлекать юзеров).

По коду есть вопросы:
Код: vbnet
1.
    Set MyRange = Selection

Какая ячейка выделена. Это 100% одна и та же?
Код: vbnet
1.
2.
    Columns("A:I").Select
    Selection.Delete Shift:=xlToLeft

Что вы удаляете? Судя по файлу - все, что в нем есть, включая добавленный столбец.

И главный вопрос - зачем это всё? ИМХО, нужно в цикле по строкам анализировать инфу и при OutlineLevel, указывающему на данные из акта, добавлять запись в Recordset, открытый на таблице-получателе.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка при добавлении модуля в книгу Excel
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]