2014-11-11 3 views
0

У меня есть сценарий, который способен выбрать файл excel с моего компьютера и вывести имя файла в ячейку, расположенную на вкладке «Контрольный лист».VBA - Расширение файла

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

Proper Filename: ExcelSheet 2014.xlsm <-- This is what I am wanting as the output 
Output Filename: Excelsheet 20141 <-- This is the output I am getting. 

Я пропустил что-то здесь или есть конкретный код, чтобы получить желаемый результат выше? Код ниже

EDIT:

я, возможно, нашел мой ответ, но я не комфортно с ним, и хотел бы мнение о нем. Каталог файла сохраняется в строке с именем «fpath», и имя файла сохраняется в строке с именем «filename». Строка «fname» закодирована, чтобы забрать директорию варианта WBA, однако она возвращает имя файла вместо пути. Строка пути файла (fpath) ничего не выводит, что же происходит с этим кодом?

Sub CopyWorkbookName() 

Dim WBA As Variant 
Dim WBA1 As Workbook 
Dim WB2 As Workbook 
Dim fname As String 
Dim fpath As String 

Set WB2 = ThisWorkbook 

WBA = Application.GetOpenFilename(_ 
       FileFilter:="Excel Files (*.XLSM), *.XLSM", _ 
       Title:="Select File To Be Opened") 
If WBA = False Then 
MsgBox "You have not selected a file, stopping script" 
Exit Sub 
End If 
Set WBA1 = Workbooks.Add(WBA) 

fname = Dir(WBA) 
fpath = WBA1.Path 

WB2.Activate 
With WB2.Worksheets("Control Sheet") 
    .Cells(3, 2).Value = fpath 
    .Cells(8, 4).Value = fname 
End With 


WBA1.Close Savechanges:=False 

End Sub() 
+0

Попробуйте WBA1.FullName вместо WBA1.Name –

+0

все еще получаю тот же результат – PootyToot

+1

Try: FPATH = Left (WBA, InStrRev (WBA, "\")) –

ответ

0

Найдено ответ, разрешенное с помощью Workbooks.Open, а не Workbooks.Add, последняя не дает значение пути для записи в строку.

Sub CopyWorkbookName() 

Dim WBA As Variant 
Dim WBA1 As Workbook 
Dim WB2 As Workbook 
Dim fname As String 
Dim fpath As String 

Set WB2 = ThisWorkbook 

WBA = Application.GetOpenFilename(_ 
       FileFilter:="Excel Files (*.XLSM), *.XLSM", _ 
       Title:="Select File To Be Opened") 
If WBA = False Then 
MsgBox "You have not selected a file, stopping script" 
Exit Sub 
End If 
Set WBA1 = Workbooks.Open(WBA) <-- changed this line and all was well 

fname = Dir(WBA) 
fpath = WBA1.Path 

WB2.Activate 
With WB2.Worksheets("Control Sheet") 
    .Cells(3, 2).Value = fpath 
    .Cells(8, 4).Value = fname 
End With 


WBA1.Close Savechanges:=False 

End Sub() 
Смежные вопросы