我创建了多个打开不同工作簿的UserForms。为了了解激活UserForm时打开的工作簿,我创建了一个ListBox ListBox2
来向用户显示打开的工作簿。这是代码:
With Me.ListBox2
For Each wkb In application.Workbooks
.AddItem wkb.Name
Next wkb
End With
但是显示的工作簿有其扩展名。这意味着.xlsx
上列出的每个工作簿中都有ListBox2
。
如何删除这些扩展程序?
答案 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