powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как вставить задаваемый путь?
11 сообщений из 11, страница 1 из 1
Как вставить задаваемый путь?
    #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
Как вставить задаваемый путь?
    #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
Как вставить задаваемый путь?
    #34594577
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"=IF(ISERROR(VLOOKUP(RC[-1],'" & путь & "Лист1'!R4C2:R450C25,2,FALSE))=TRUE,0,VLOOKUP(RC[-1]," & путь & "'!R4C2:R450C25,2,FALSE))"
...
Рейтинг: 0 / 0
Как вставить задаваемый путь?
    #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
Как вставить задаваемый путь?
    #34595489
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ты выбери файл в окошке.... а потом так для разнообразия сделай
MsgBox OFN.lpstrFile
Столько интересного увидишь :)

Antonariy спасибо за код... а то я вечно за собой этот commondialog таскаю :)
...
Рейтинг: 0 / 0
Как вставить задаваемый путь?
    #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
Как вставить задаваемый путь?
    #34596106
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опечатка вышла. Sorry
Теперь осталось превратить:
D:\qqq\qqq\qqq\Книга1.xls
в
D:\qqq\qqq\qqq\[Книга1.xls]
...
Рейтинг: 0 / 0
Как вставить задаваемый путь?
    #34596249
Фотография gjghjc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну еще немного подумать и поискать по форуму по таким словам
SPLIT INSTRREV RIGHT LEFT. Вобщем полистать документацию по работе со строками.
Тебе просто нужно разрезать строку по последнему "\" втулить туда "[" и приклеить "]" в конце строки. Это типа алгоритма. Дерзай! :)
...
Рейтинг: 0 / 0
Как вставить задаваемый путь?
    #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
Как вставить задаваемый путь?
    #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
Как вставить задаваемый путь?
    #34602607
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что нужно отрезать у OFN.lpstrFile лишние нули в конце.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как вставить задаваемый путь?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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