显示ListBox中打开的工作簿列表,而不包含.xlsx

时间:2015-09-15 08:38:30

标签: excel vba excel-vba

我创建了多个打开不同工作簿的UserForms。为了了解激活UserForm时打开的工作簿,我创建了一个ListBox ListBox2来向用户显示打开的工作簿。这是代码:

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

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

如何删除这些扩展程序?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用字符串上的left(String,numChars)函数删除扩展部分。

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

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

答案 2 :(得分:0)

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

或FSO:

.AddItem CreateObject("Scripting.FileSystemObject").GetBaseName(wkb.Name)

答案 3 :(得分:0)

我能想到的两种方法 - 使用INSTRREV来找到最后一个点。这将是'左边的所有内容。'包括路径,如果它在那里。

select id,
       max(case when code = 100 then value end) as value1,
       max(case when code = 150 then value end) as value2,
       max(case when code = 200 then value end) as value3
from table t
group by id;

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

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