2015-08-07 3 views
1

Я написал скрипт VBA, который выполняет различные функции сортировки/сопоставления/фильтрации для клиента с большим объемом данных (от 45 000 до 500 000 строк).Если расширение файла равно .xls, то MsgBox

Проблема заключается в том, что если пользователь экспортирует или сохраняет эти данные как, скажем, файл .xls, будет сохранено только 65 536 строк, что будет потенциально недостаточным. При выполнении сценария я хотел бы показать MsgBox, если пользователь «ошибочно» экспортирует данные в виде файла .xls, иначе продолжите.

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

Sub ext() 

Dim extFind As String 
Dim sFile As String 

    Dim FilePath As String 
    FilePath = Application.ActiveWorkbook.Path 
    sFile = Dir(FilePath & Filename & "*") 
    extFind = Right$(sFile, Len(sFile) - InStrRev(sFile, ".")) 
    MsgBox extFind 
End Sub 

Любые предложения будут с благодарностью.

+1

Если вы собираетесь добавить такой проверки для пользовательского опыта, я бы сказал, сначала проверьте, есть ли 65 тыс. строк данных. Если строки меньше 65k, то я бы не привел окно подтверждения, которое означает, что данные могут быть потеряны, если это не будет. –

+0

@ Grade'Eh'Bacon - отличный момент. Я должен написать это. Спасибо! – aLearningLady

+1

@ Dr.Trey Я думаю, что подходит и для excel для excel-vba, если это то, о чем идет речь. приятно встретить вас :) ps Я удаляю их, поскольку мы их читаем –

ответ

2

FileSystemObject библиотека имеет GetExtensionName() функцию, чтобы сделать жизнь проще:

With CreateObject("Scripting.FileSystemObject") 
    strExt = .GetExtensionName(ActiveWorkbook.Path) 
End With 

If StrComp(strExt, "xls", vbTextCompare) = 0 Then 
    ' Display error 
End If 

Или, вы можете просто проверить количество строк в книге:

If ActiveSheet.Rows.Count = 65536 Then 
    ' Display error 
End If 
1

Вы пропустите слэш между FilePath и Filename:

sFile = Dir(FilePath & "\" & Filename & "*") 

Кстати, где вы присвоить значение переменной Filename? Если вы хотите использовать имя активной книги, вы должны использовать ActiveWorkbook.Name.

+0

Я знал, что это что-то простое. Благодаря! – aLearningLady

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