Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Работа с книгой которая не создана на накопителе

Ответить
Настройки темы
VBA - Работа с книгой которая не создана на накопителе

Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Приветствую всех. Подскажите, как работать с книгой, которую не сохранили ещё. В Excel нажали создать книгу, и работают с ней. Теперь надо отработать макрос, но тк макрос работает с книгами которые уже созданы на жёстком диске/накопителе, о выдает ошибку, тк не находит файл.

-------
Забудем боль, забудем страх -
И только ветер в парусах!


Отправлено: 08:25, 10-02-2021

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


blackeangel, какой именно макрос?

Отправлено: 20:45, 10-02-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Iska, перенос всего содержимого листа в БД Access. Суть в том что всё падает, на том, если файл открывается из письма почты outlook, то есть путь к файлу как бы есть, но видимо доступа к нему нет. Поэтому и падает. Решил клонированием активной книги в теме, и брать данные из неё. Однако это костыль. Вот и думаю, как взять данные с листа быстро и без обращения к жёсткому диску.

-------
Забудем боль, забудем страх -
И только ветер в парусах!


Отправлено: 22:05, 10-02-2021 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата blackeangel:
если файл открывается из письма почты outlook, то есть путь к файлу как бы есть »
Не «как бы есть», а точно есть — файл извлекается в каталог временных файлов и оттуда открывается приложением.

Покажите код макроса. Где он хранится. Как вызывается.

Отправлено: 22:48, 10-02-2021 | #4


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Iska,
Код: Выделить весь код
Sub ExceltoAccessList()
    Worktable = CreateObject("WScript.Shell").SpecialFolders("Desktop")
    BaseName = Worktable & "\" & ActiveWorkbook.Name & ".mdb"
    tmppath = Environ("TEMP")
    Select Case CLng(Split(Application.Version, ".")(0))
        Case Is < 12
            dbConnectStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & BaseName & ";"
        Case Is >= 12
            dbConnectStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BaseName & ";"
    End Select
    On Error Resume Next
    Set oAccess = GetObject(, "Access.Application")
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Err.Number = 429 Then
        On Error GoTo 0
        If fso.FileExists(BaseName) Then fso.DeleteFile BaseName, True
        If fso.FileExists(tmppath & "\" & ActiveWorkbook.Name) Then fso.DeleteFile tmppath & "\" & ActiveWorkbook.Name, True
        ActiveWorkbook.SaveCopyAs tmppath & "\" & ActiveWorkbook.Name
        Set Catalog = CreateObject("ADOX.Catalog")
        Catalog.Create dbConnectStr
        Set Catalog = Nothing
        Set cnt = New ADODB.Connection
        cnt.Open dbConnectStr
        sSQL = "SELECT * INTO [" & ActiveSheet.Name & "] FROM [Excel 12.0;HDR=YES;IMEX=1;DATABASE=" & tmppath & "\" & ActiveWorkbook.Name & "].[" & ActiveSheet.Name & "$]"
        cnt.Execute sSQL
        cnt.Close
        Set sAccess = CreateObject("Access.Application")
        sAccess.Visible = True
        sAccess.UserControl = True
        sAccess.OpenCurrentDataBase (BaseName)
    Else
        basepath = oAccess.CurrentDb.Name
        If fso.FileExists(tmppath & "\" & ActiveWorkbook.Name) Then fso.DeleteFile tmppath & "\" & ActiveWorkbook.Name, True
        ActiveWorkbook.SaveCopyAs tmppath & "\" & ActiveWorkbook.Name
        If Err.Number = 91 Then
            On Error GoTo 0
            Set fso = CreateObject("Scripting.FileSystemObject")
            If fso.FileExists(BaseName) Then fso.DeleteFile BaseName, True
            Set Catalog = CreateObject("ADOX.Catalog")
            Catalog.Create dbConnectStr
            Set Catalog = Nothing
            Set oAccess = GetObject(, "Access.Application")
            oAccess.OpenCurrentDataBase (BaseName)
        End If
        On Error GoTo 0
        oAccess.CurrentProject.Connection.Execute "SELECT * INTO [" & ActiveSheet.Name & "] FROM [Excel 12.0;HDR=YES;IMEX=1;DATABASE=" & tmppath & "\" & ActiveWorkbook.Name & "].[" & ActiveSheet.Name & "$]"
        oAccess.RefreshDataBaseWindow
    End If
    If fso.FileExists(tmppath & "\" & ActiveWorkbook.Name) Then fso.DeleteFile tmppath & "\" & ActiveWorkbook.Name, True
End Sub
Хранится в надстройке
Вызывается кнопкой надстройки

Ошибка в строке
SELECT * INTO [" & ActiveSheet.Name & "] FROM [Excel 12.0;HDR=YES;IMEX=1;DATABASE=" & tmppath & "\" & ActiveWorkbook.Name & "].[" & ActiveSheet.Name & "$]"
Текст ошибки примерно такой - лист2$ недопустимое имя. Назовите по другому или убедитесь что оно есть.
Если файл из почты сохранить в другое место, всё работает без проблем. Но, тк это правленый вариант, то этой ошибки вы не увидите.
Ошибка была когда вместо tmppath & "\" & ActiveWorkbook.Name было ActiveWorkbook.FullName

-------
Забудем боль, забудем страх -
И только ветер в парусах!


Отправлено: 10:59, 11-02-2021 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата blackeangel:
Хранится в надстройке
Вызывается кнопкой надстройки »
В Excel, так?

Отправлено: 17:20, 11-02-2021 | #6


Аватара для blackeangel

Старожил


Сообщения: 329
Благодарности: 3

Профиль | Отправить PM | Цитировать


Iska, да, в Excel

-------
Забудем боль, забудем страх -
И только ветер в парусах!


Отправлено: 17:24, 11-02-2021 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Работа с книгой которая не создана на накопителе

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
HDD - Не видит файлы на внешнем накопителе. delorun Накопители (SSD, HDD, USB Flash) 1 30-08-2016 13:59
Интерфейс - Как включить кеширование(предпросмотр фото) на сетевом накопителе? HarrysFerrarievich Microsoft Windows 7 0 23-02-2014 03:08
MySQL - Как подключиться к MySql на сетевом накопителе данных andrystepa Программирование и базы данных 1 02-05-2009 23:58
как обезопасить данные на флеш накопителе, если на компьютере клиента вирусы? crayon1981 Защита компьютерных систем 10 13-04-2009 05:48
Доступ - Приложение не обнаруживает ключ доступа к нему, записанный на USB-накопителе 1AIV Microsoft Windows Vista 1 20-09-2007 15:09




 
Переход