2015-12-15 3 views
1

Я пытаюсь реализовать кнопку команды на моем листе excel, которая предложит пользователю выбрать файлы, которые он хочет загрузить, прежде чем загружать выбранные файлы в указанные ячейки. До сих пор я пытался использовать следующий код, но безрезультатно. Я получаю ошибку type 13Импортировать имена файлов в ячейки Excel

Sub check11() 
Dim FileName() As Variant 
Dim f As String 
Dim i As Variant 
Dim j As Variant 
Dim rng As Variant 

rng = ActiveCell.Address 
f = Application.GetOpenFilename("TXT File (*.txt), *.txt") 
For i = 0 To 1 
    FileName(f) = j 
    Range(rng).Value = j 
    ActiveCell.Offset(1, 0).Select 
Next i 

End Sub 
+0

В вашем коде есть много ошибок. Первое и самое главное: с Application.GetOpenFilename («TXT-файл (* .txt), * .txt») вы НЕ можете выбрать несколько файлов, насколько я знаю. Таким образом, вся остальная часть вашего кода не имеет смысла вообще (даже если это будет правильно). – cboden

+0

@cboden, если вы указываете Multiselect: = true, вы можете выбрать несколько файлов. Больше информации в моем ответе –

ответ

0

GetOpenFileName не работает так, как вы кодированной его. Вы не можете выбрать несколько файлов (насколько мне известно), поэтому цикл, который вы запускаете, избыточен. Функция вернет либо False, если пользователь нажмет Отмена или имя файла в виде строки. Вы должны проверить для случая «Отмена» в своем коде.

Я не вижу цели вашего цикла или почему вы выбираете ячейку смещения. Я думаю, что это может быть ошибка разработки, поэтому я просто проигнорировал ее.

Ниже приведен код, который показывает, как функция GetOpenFileName может работать в вашем контексте:

Sub check11() 
    Const TARGET_COL As String = "A" 'adjust letter for your column 
    Dim ws As Worksheet 
    Dim selectedFile As Variant 
    Dim cell As Range 

    'Find the next blank cell in target column 
    Set ws = ThisWorkbook.Worksheets("Sheet1") 
    Set cell = ws.Cells(ws.Rows.Count, TARGET_COL).End(xlUp).Offset(1) 

    'Open the file dialog window 
    selectedFile = Application.GetOpenFilename("Text Files (*.txt), *.txt") 

    'Check if user hit cancel 
    If selectedFile = False Then Exit Sub 

    'Write the file name 
    cell.Value = selectedFile 

End Sub 
0

Вы inccorect-доступ к Application.GetOpenFilename в первую очередь вам необходимо установить MultiSelect к истине, так что вы сможете выберите несколько файлов. Затем эта функция вернет массив, который вы можете выполнить. В цикле i, разбивая путь к файлу на «\», и ​​со знанием того, что имя файла всегда является последним, я просто пишу имя файла в ячейку.

Sub check11() 

Dim filePath() As Variant 
Dim i As Long 

filePath = Application.GetOpenFilename("TXT File (*.txt), *.txt", MultiSelect:=True) 
For i = 1 To UBound(filePath) 

    Sheets("Sheet2").Cells(1 + i, 1).Value = Split(filePath(i), "\")(UBound(Split(filePath(i), "\"))) 
Next i 

End Sub 
+0

спасибо Lubos! теперь код работает нормально с некоторыми незначительными изменениями. – UTVBA

+0

однако ошибка несоответствия типа возникает, когда я пытаюсь отменить выбор файлов. – UTVBA

+0

, так что просто добавьте небольшое обновление. после присвоения значения filePath просто проверьте значение, а затем выйдите из под. это не так сложно –

Смежные вопросы