Страницы: 1
RSS
VBA Создание глобальных переменных с адресами файлов при подключении надстройки
 
Привет всем. Помогите, пожалуйста, в следующей ситуации. Я сделал надстройку, которая строит сводные в екселе, базируясь на запросах базы Access. Вот код подключения этой надстройки:  
Public Sub Auto_open()  
 
Dim MyBar As CommandBar  
Dim GetIMS As CommandBarButton  
Dim GetPivot As CommandBarButton  
Dim GetPivotFcst As CommandBarButton  
Dim cbc As CommandBarControl  
 
On Error Resume Next  
Set MyBar = Application.CommandBars("Data Base")  
If Err Then Set MyBar = Application.CommandBars.Add("Data Base", msoBarTop, False, False)  
For Each cbc In MyBar.Controls  
cbc.Delete  
Next  
On Error GoTo 0  
 
With MyBar.Controls  
Set GetIMS = .Add(msoControlButton, 1, , , False)  
Set GetPivot = .Add(msoControlButton, 2, , , False)  
Set GetPivotFcst = .Add(msoControlButton, 3, , , False)  
End With  
With GetIMS  
.FaceId = 3987  
.Caption = "Get IMS"  
.Style = msoButtonCaption  
.OnAction = "ShowForm"  
End With  
With GetPivot  
.FaceId = 3987  
.BeginGroup = True  
.Caption = "Get Pivot Table"  
.Style = msoButtonCaption  
.OnAction = "ShowFormPivot"  
End With  
With GetPivotFcst  
.FaceId = 3987  
.BeginGroup = True  
.Caption = "Forecast Analysis"  
.Style = msoButtonCaption  
.OnAction = "ShowFormPivotFcst"  
End With  
 
MyBar.Visible = True  
 
End Sub  
 
Хочется сделать, чтобы при подключении надстройки создавались глобальные переменные с полными адресами баз данных (типа после подключения надстройки полюзователю предлагается выбрать те базы Access, с которыми он будет работать).  
 
На кнопке Get Pivot Table панели, которая создается после подключения надстройки, повешен код создания сводной. Вот часть кода:  
 
   With ActiveWorkbook.PivotCaches.Add(SourceType:=xlExternal)  
       .Connection = "ODBC;DSN=MS Access Database;DBQ=С:\Program Files\1.mdb;DefaultDir=С:\Program Files;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"  
       .CommandType = xlCmdSql  
       .CommandText = Array("бла-бла-бла")  
       .CreatePivotTable TableDestination:=Range(Pivot_cell.Value), TableName:="aaa" DefaultVersion:=xlPivotTableVersion10  
   End With  
 
Здесь вместо DBQ=С:\Program Files\1.mdb и DefaultDir=С:\Program Files должны быть те адреса, которые пользователь выберет после подключения надстройки.  
 
Надеюсь, выразился понятливо. Буду очень благодарен за любую помощь.
 
Приблизился к решению.Вот код:  
fileToOpen1 = Application.GetOpenFilename()  
 
После этого fileToOpen1 = "C:\Program Files\1.mdb"  
Следующая проблема в том, что я таким способом получаю имя базы в модуле обычном и надо, чтобы эта переменная хранилась постоянно в модуле формы, поскольку код на создание сводной хранится в модуле формы. Как можно сделать это?
 
И ещё вопрос.Из переменной fileToOpen1 (в которой хранится имя файла) нужно выделить папку. В даном случае это должна быть переменная  
Dir = "C:\Program Files\"  
Как трансформировать fileToOpen1 в Dir?
 
{quote}{login=yavorsky90}{date=10.02.2011 06:26}{thema=}{post}И ещё вопрос.Из переменной fileToOpen1 (в которой хранится имя файла) нужно выделить папку. В даном случае это должна быть переменная  
Dir = "C:\Program Files\"  
Как трансформировать fileToOpen1 в Dir?{/post}{/quote}  
 
поройтесь тут  
http://www.script-coding.com/WSH/WshShell.html
Спасибо
 
{quote}{login=R Dmitry}{date=10.02.2011 06:46}{thema=Re: }{post}{quote}{login=yavorsky90}{date=10.02.2011 06:26}{thema=}{post}И ещё вопрос.Из переменной fileToOpen1 (в которой хранится имя файла) нужно выделить папку. В даном случае это должна быть переменная  
Dir = "C:\Program Files\"  
Как трансформировать fileToOpen1 в Dir?{/post}{/quote}  
 
поройтесь тут  
http://www.script-coding.com/WSH/WshShell.html{/post}{/quote}  
Это что-то очень сложное. Я думаю над тем, чтобы просто розложить строку имени файла fileToOpen1 на то что после последней \ и все, что до. То, что будет до последней \ и есть нужная папка
 
The_Prist,  
Спасибо, работает.  
 
подскажите, пожалуйста, ещё по теории. Как надо обьявить переменную, чтобы задать ее значение в одном модуле, а доступным оно было в другом, причем значение должно хранится после закрытия файла. И вообще, возможно ли такое?
 
а как на счёт Static?  
 
и как записывать значение переменной в реестр. В моем проекте переменная получает значение только однажды (его задает сам пользователь), а использовать эту переменную нужно в других модулях форм большое количество раз даже после закрытия процесса Ексель (мой проект - надстройка). Что делать?
 
Получается, мне в модуле формы надо создать Static переменную, а в обычном модуле - обычную. А можно как-то передать значение обычной переменной обычного модуля Static переменной модуля формы?
 
сохраните значения в надстройке - прямо на листе или под именем..
Живи и дай жить..
 
сделал простенький файл с проблемой. Помогите, а то сам никак не разберусь.
 
{quote}{login=yavorsky90}{date=11.02.2011 05:16}{thema=}{post}сделал простенький файл с проблемой. Помогите, а то сам никак не разберусь.{/post}{/quote}  
так Выже объявили в листе, объявите в модуле 1 и будет Вам счастье
Спасибо
 
ДААА, вышло. Спасибо.
Страницы: 1
Читают тему
Наверх