2015-09-15 51 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) 
相關問題