Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как вставить задаваемый путь? / 11 сообщений из 11, страница 1 из 1
14.06.2007, 13:16
    #34594448
redsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить задаваемый путь?
Есть код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Sub ВПР()

    ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-1],'C:\[Книга4.xls]Лист1'!R4C2:R450C25,2,FALSE))=TRUE,0,VLOOKUP(RC[-1],'C:\[Книга4.xls]Лист1'!R4C2:R450C25,2,FALSE))"
      
    ActiveCell.Offset( 1 ,  0 ).Range("A1").Select
End Sub
Значение
Код: plaintext
C:\[Книга4.xls]
должно меняться. Т.е. должно появляться окошко для выбора книги.
Как это сделать?
...
Рейтинг: 0 / 0
14.06.2007, 13:39
    #34594561
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить задаваемый путь?
Option Explicit
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

Public Function ShowOpen() As String
Dim OFN As OPENFILENAME
Dim mFileTitle As String
Dim sTemp As String
Dim iDelim As Integer
Dim RetValue As Long
With OFN
.hInstance = Application.hInstance
.lStructSize = Len(OFN)
.hwndOwner = Application.hwnd
.lpstrFile = String$(255, 0)
.nMaxFile = 255
.lpstrFileTitle = String$(255, 0)
.nMaxFileTitle = 255
.lpstrFilter = "Книго Microsoft Excel (*.xls)" + Chr$(0) + "*.xls" + Chr$(0) + Chr$(0)
End With
RetValue = GetOpenFileName(OFN)
If RetValue > 0 Then
iDelim = InStr(OFN.lpstrFileTitle, vbNullChar)
If iDelim Then mFileTitle = Left$(OFN.lpstrFileTitle, iDelim - 1)
iDelim = InStr(OFN.lpstrFile, vbNullChar)
If iDelim Then mFileTitle = Left$(OFN.lpstrFile, iDelim - 1)
ShowOpen = mFileTitle
End If
End Function
...
Рейтинг: 0 / 0
14.06.2007, 13:42
    #34594577
AndreyMp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить задаваемый путь?
"=IF(ISERROR(VLOOKUP(RC[-1],'" & путь & "Лист1'!R4C2:R450C25,2,FALSE))=TRUE,0,VLOOKUP(RC[-1]," & путь & "'!R4C2:R450C25,2,FALSE))"
...
Рейтинг: 0 / 0
14.06.2007, 16:46
    #34595355
redsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить задаваемый путь?
To Antonariy: только открывается окно с поиском для доков .xls
To AndreyMp: выдаёт ошибку.

Сокращу немного:
Код: plaintext
1.
2.
3.
4.
Sub ВПР()
    ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-1],'C:\[Книга4.xls]Лист1'!R4C2:R450C25,2,FALSE)"
End Sub
Повторюсь: должно появляться окошко для выбора книги. После выбора книги, её путь автоматически присваивается какой-то стринговой переменной и она вставляется в формулу.
Как это слепить?
...
Рейтинг: 0 / 0
14.06.2007, 17:17
    #34595489
gjghjc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить задаваемый путь?
а ты выбери файл в окошке.... а потом так для разнообразия сделай
MsgBox OFN.lpstrFile
Столько интересного увидишь :)

Antonariy спасибо за код... а то я вечно за собой этот commondialog таскаю :)
...
Рейтинг: 0 / 0
14.06.2007, 22:01
    #34596091
redsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить задаваемый путь?
Спасибо Antonariy и gjghjc.
Правда не знаю сильных отличий, но можно и так:
Код: plaintext
1.
2.
3.
4.
Sub qqq()
    Fil = Application.GetOpenFilename(" Файлы Excel (*.xls),*.xls",  1 , "Ищем файлик")
    If Fil <> False Then MsgBox Fil
End Sub
Теперь осталось превратить:
D:\qqq\qqq\qqq\qqq.xls
в
D:\qqq\qqq\qqq\[Книга1.xls]
...
Рейтинг: 0 / 0
14.06.2007, 22:08
    #34596106
redsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить задаваемый путь?
Опечатка вышла. Sorry
Теперь осталось превратить:
D:\qqq\qqq\qqq\Книга1.xls
в
D:\qqq\qqq\qqq\[Книга1.xls]
...
Рейтинг: 0 / 0
14.06.2007, 23:51
    #34596249
gjghjc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить задаваемый путь?
Ну еще немного подумать и поискать по форуму по таким словам
SPLIT INSTRREV RIGHT LEFT. Вобщем полистать документацию по работе со строками.
Тебе просто нужно разрезать строку по последнему "\" втулить туда "[" и приклеить "]" в конце строки. Это типа алгоритма. Дерзай! :)
...
Рейтинг: 0 / 0
15.06.2007, 10:59
    #34596824
redsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить задаваемый путь?
Всем БОЛЬШОЕ СПАСИБО. Результат таков:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub ВПР_full()
    Dim v_Arr() As String
    Dim v_File As String
    Dim v_FileName As String
    Dim sdf As String

 'Выбираем файл с данными    
    v_File = Application.GetOpenFilename(" Файлы Excel (*.xls),*.xls",  1 , "Ищем файлик")

 'превращаем результат вида: D:\qqq\qqq\qqq\Книга1.xls в результат вида: 
 'D:\qqq\qqq\qqq\[Книга1.xls]
    v_Arr = Split(v_File, "\")
    v_FileName = v_Arr(UBound(v_Arr))
    sdf = Mid(v_File,  1 , Len(v_File) - Len(v_FileName)) & "[" & v_FileName & "]"

 'Рассчитываем формулу 
    ActiveCell.FormulaR1C1 = _
"=IF(ISERROR(VLOOKUP(RC[-1],'" & sdf & "Лист1'!R4C2:R450C25,2,FALSE))=TRUE,0,VLOOKUP(RC[-1],'" & sdf & "Лист1'!R4C2:R450C25,2,FALSE))"
      
    ActiveCell.Offset( 1 ,  0 ).Range("A1").Select
 End Sub
...
Рейтинг: 0 / 0
18.06.2007, 16:41
    #34602520
redsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить задаваемый путь?
to antonariy

Код: plaintext
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.
53.
54.
55.
56.
57.
Option Explicit
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type

Public Function ShowOpen() As String
Dim OFN As OPENFILENAME
Dim mFileTitle As String
Dim sTemp As String
Dim iDelim As Integer
Dim RetValue As Long
With OFN
.hInstance = Application.hInstance
.lStructSize = Len(OFN)
.hwndOwner = Application.Hwnd
.lpstrFile = String$( 255 ,  0 )
.nMaxFile =  255 
.lpstrFileTitle = String$( 255 ,  0 )
.nMaxFileTitle =  255 
.lpstrFilter = "Книга Microsoft Excel (*.xls)" + Chr$( 0 ) + "*.xls" + Chr$( 0 ) + Chr$( 0 )
End With
RetValue = GetOpenFileName(OFN)
If RetValue >  0  Then
iDelim = InStr(OFN.lpstrFileTitle, vbNullChar)
If iDelim Then mFileTitle = Left$(OFN.lpstrFileTitle, iDelim -  1 )
iDelim = InStr(OFN.lpstrFile, vbNullChar)
If iDelim Then mFileTitle = Left$(OFN.lpstrFile, iDelim -  1 )
ShowOpen = mFileTitle
End If

Dim sdf As String
  
sdf = Replace(OFN.lpstrFile, Dir(OFN.lpstrFile), "[" & Dir(OFN.lpstrFile) & "]")

Range("A21") = sdf

  ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],'" & sdf & "Лист1'!R4C2:R450C25,2,FALSE)"
 End Function

Почему выдается ошибка на предпоследней строке?
Хотя в ячейке "А21" появляется то, что надо вида:
D:\xxxxx\[xxxxx xxxxx xxxxx.xls]
...
Рейтинг: 0 / 0
18.06.2007, 17:09
    #34602607
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вставить задаваемый путь?
Потому что нужно отрезать у OFN.lpstrFile лишние нули в конце.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как вставить задаваемый путь? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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