Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: RefreshAll не работает
 
 автор: scandal   (12.03.2012 в 13:08)   личное сообщение
 
 

Здравствуйте!
Пожалуйста, подскажите, почему следующий код не обновляет сводные таблицы, указанного файла MS Excel:

Private Sub btnExcelRefresh_Click()
Dim xlsReportPath As String, xlsReportFile As String
Dim exclApp As Object, sourceWB As Workbook
Dim result As Variant

xlsReportPath = "x:\Reports\"
xlsReportFile = "test.xlsx"

Set exclApp = CreateObject("Excel.Application")
With exclApp
    Set sourceWB = .Workbooks.Open(xlsReportPath & xlsReportFile)
    sourceWB.RefreshAll
    sourceWB.Close SaveChanges:=True
End With
exclApp.Quit
Set exclApp = Nothing

End Sub

  Ответить  
 
 автор: snipe   (12.03.2012 в 13:32)   личное сообщение
 
 

Сам ексель пишет так

ActiveWorkbook.RefreshAll

а у вас книга не активная - просто Workbook.RefreshAll

  Ответить  
 
 автор: sCandal   (12.03.2012 в 13:51)   личное сообщение
 
 

А как сделать книгу активной?
И вообще как правильно все это сделать и закрыть.
Спасибо!

  Ответить  
 
 автор: Анатолий (Киев)   (12.03.2012 в 13:55)   личное сообщение
 
 

Что является источником данных сводной таблицы?
При открытии файла на экране запрашивает обновление связей? Может вам нужно при вызове метода Open указывать аргумент UpdateLinks?
Если файл открыт на экране, выполнение в окне отладки ActiveWorkBook.RefreshAll приводит к желаемому результату?

  Ответить  
 
 автор: sCandal   (12.03.2012 в 14:35)   личное сообщение
 
 

Пункт 1. Имеется БД Reports.accdb в Аксес 2007. Ежедневно (раз в день, утром) в эту БД заносятся данные, что-то вручную, что-то программно из файлов Эксел.
Пункт 2. После ввода данных в Reports.accdb открывается файл test.xlsx, нажимается кнопка «Обновить все», затем «Сохранить», затем test.xlsx закрывается. Данные в test.xlsx берутся из Reports.accdb.

Данные в Reports.accdb заносить только один человек, назовем его Администратором БД. Другим этот файл просто недоступен.
Доступ на запись к файлу test.xlsx есть только Администратора БД. У других только на чтение.

В Reports.accdb нужно создать подпрограмму, которая будет выполнять пункт 2.

Как это сделать?

  Ответить  
 
 автор: snipe   (12.03.2012 в 15:10)   личное сообщение
 
 

Dim xlsReportPath As String
Dim exclApp As Object

xlsReportPath = "C:\Users\Сергей\Desktop\test.xlsx"

Set exclApp = CreateObject("Excel.Application")
exclApp.Workbooks.Open (xlsReportPath)
exclApp.ActiveWorkbook.RefreshAll
exclApp.ActiveWorkbook.Save
exclApp.Quit
Set exclApp = Nothing

  Ответить  
 
 автор: sCandal   (12.03.2012 в 15:33)   личное сообщение
 
 

Появляется окно "Файл 'RESUME.XLW' уже существует в данном месте. Заменить?". Отвечаю Yes. Процедура проходит. Открываю файл Эксел, а там ничего не обновилось.

Set exclApp = CreateObject("Excel.Application")
exclApp.Workbooks.Open xlsFile
MsgBox exclApp.ActiveWorkbook.Name
exclApp.ActiveWorkbook.RefreshAll
exclApp.Save
exclApp.Quit
Set exclApp = Nothing

Тут MsgBox выдает имя моего файла Excel. То есть не работает либо RefrashAll, либо Save

  Ответить  
 
 автор: snipe   (12.03.2012 в 16:20)   личное сообщение
 
 

я исправил код
попробуйте еще раз


Dim xlsReportPath As String
Dim exclApp As Object

xlsReportPath = "C:\Users\Сергей\Desktop\test.xlsx"

Set exclApp = CreateObject("Excel.Application")
exclApp.Workbooks.Open (xlsReportPath)
exclApp.ActiveWorkbook.RefreshAll
exclApp.ActiveWorkbook.Save
exclApp.Quit
Set exclApp = Nothing

  Ответить  
 
 автор: sCandal   (12.03.2012 в 16:49)   личное сообщение
 
 

Заметил, что иногда сохраняется обновление. Между обновлением и записью добавил задержку в 5 секунд. Вроде теперь записывает.
Вопрос. Как проверить, что обновление закончилось и потом запустить запись, а не как сейчас после задержки?
Нужно как-то перехватить какое-нибудь событие наподобие AfterRefreshAll. Но как это сделать?
Или выключить фоновое обновление что-ли? Как это сделать?

  Ответить  
 
 автор: sCandal   (13.03.2012 в 08:20)   личное сообщение
 
 

Решил для себя проблему тем, что снял галочку "Фоновое обновление" в свойствах подключений.
Спасибо! Вопрос закрыт.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList