2015-09-15 47 views
0

我创建了多个用户窗体,这些用户窗体打开不同的工作簿。为了知道在激活UserForm时打开的工作簿,我创建了一个ListBox ListBox2以向用户显示打开哪些工作簿。以下是代码:显示在没有.xlsx的列表框中打开的工作簿列表

With Me.ListBox2 
    For Each wkb In application.Workbooks 
     .AddItem wkb.Name 
    Next wkb 
End With 

但是,所显示的工作簿有其扩展名。这意味着在ListBox2上列出的每个工作簿中都有.xlsx

我该如何删除这些扩展名?

回答

0

两种方式找到最后一个点。这将会把所有的东西放在'。'的左边。包括如果它在那里的路径。

Sub Test() 
    Debug.Print FileNameOnly("mdl_FILE_Functions.bas") 
End Sub 

Public Function FileNameOnly(ByVal FileName As String) As String 
    FileNameOnly = Left(FileName, InStrRev(FileName, ".") - 1) 
End Function 

或者Scripting.FileSystemObject返回基名。这将只返回文件名并删除路径和扩展名。

Sub Test() 
    Debug.Print GetBaseName("mdl_FILE_Functions.bas") 
End Sub 

Public Function GetBaseName(FileName As String) As String 
    Dim FS As Object 
    Set FS = CreateObject("Scripting.FileSystemObject") 
    GetBaseName = FS.GetBaseName(FileName) 
End Function 
0

您可以使用Left函数,然后使用InStr函数查找扩展前的工作簿名称的长度。

Dim wb_name As String 
wb_name = ThisWorkbook.Name 
MsgBox (Left(wb_name, InStr(1, wb_name, ".xls") - 1)) 

在您的方案:

With Me.ListBox2 
    For Each wkb In application.Workbooks 
     .AddItem Left(wkb.Name, InStr(1, wkb.Name, ".xls") - 1) 
    Next wkb 
End With 
0

您可以用左(字符串,numChars个)函数在字符串中删除的扩展部分。

.AddItem left(wkb.Name,len(wkb.Name)-4) 

这将适用于* .xls?扩展。你可能要考虑检查最后的'。'在文件名中,因为这将帮助您消除* .xls文件(如果它们发生)。

0
.AddItem Split(wkb.Name, ".")(0) 

或FSO:

我能想到的 - 使用INSTRREV的
.AddItem CreateObject("Scripting.FileSystemObject").GetBaseName(wkb.Name) 
相关问题