Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 显示在没有.xlsx的列表框中打开的工作簿列表_Vba_Excel - Fatal编程技术网

Vba 显示在没有.xlsx的列表框中打开的工作簿列表

Vba 显示在没有.xlsx的列表框中打开的工作簿列表,vba,excel,Vba,Excel,我创建了多个用户表单,它们打开不同的工作簿。为了了解激活UserForm时打开的工作簿,我创建了一个ListBox ListBox2,向用户显示打开的工作簿。代码如下: With Me.ListBox2 For Each wkb In application.Workbooks .AddItem wkb.Name Next wkb End With 但显示的工作簿有其扩展。这意味着ListBox2上列出的每个工作簿中都有.xlsx 如何删除这些扩展 您可以使用L

我创建了多个用户表单,它们打开不同的工作簿。为了了解激活UserForm时打开的工作簿,我创建了一个ListBox ListBox2,向用户显示打开的工作簿。代码如下:

With Me.ListBox2
    For Each wkb In application.Workbooks
        .AddItem wkb.Name
    Next wkb
End With
但显示的工作簿有其扩展。这意味着ListBox2上列出的每个工作簿中都有.xlsx

如何删除这些扩展

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

Dim wb_name As String
wb_name = ThisWorkbook.Name
MsgBox (Left(wb_name, InStr(1, wb_name, ".xls") - 1))
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
在您的场景中:

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

可以通过对字符串使用leftString、numChars函数来删除扩展部分

.AddItem left(wkb.Name,len(wkb.Name)-4)
这是否适用于*.xls?扩展。您可能需要考虑在文件名中检查最后的“.'”,因为这将帮助您消除*.xLS文件,如果它们发生的话,

.AddItem Split(wkb.Name, ".")(0)
或FSO:

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

我可以想到两种方法——使用INSTRREV查找最后一个点。这将显示“.”左侧的所有内容,包括路径(如果存在)

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返回基名称。这将只返回文件名并删除路径和扩展名

Dim wb_name As String
wb_name = ThisWorkbook.Name
MsgBox (Left(wb_name, InStr(1, wb_name, ".xls") - 1))
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