VBA环境|如何在VBA Excel中使用环境功能?

Excel VBA ENVIRON(环境)

VBA环境 功能(代表 环境)(可以归类为信息功能),因为此函数返回操作系统环境变量的值。环境(操作系统)变量包含有关所有用户的配置文件,用户名,用户配置文件,用户的主文件夹等信息。此函数返回字符串值。

句法

此函数只有一个参数“表达‘。我们可以指定 数字位置 (整数值)代表环境变量在环境变量表中的数字位置,或 变量名称 本身。

如果我们指定数字位置,则该函数将返回环境变量及其值,两者之间均带有等号。

如果我们指定变量名,则该函数将返回唯一的值。

输出:

如何在VBA中使用环境功能?

您可以在此处下载此VBA ENVIRON Excel模板– VBA ENVIRON Excel模板

范例#1

在VBA中使用ENVIRON功能打开命令提示符.

为此,步骤将是:

使用以下命令插入命令按钮 '插入' 可用的命令 “控件” 分组 “开发人员” 标签或使用快捷键excel键(Alt + F11).

如果 “开发人员” 选项卡不可见,然后使用以下步骤使选项卡可见。

点击 '文件' 然后选择 '选项' 从列表中。

选择 “自定义功能区” 从左侧菜单中,选中 “开发人员” 标签并点击 '好的'.

现在 “开发者标签” 是可见的。

在插入命令按钮时,如果我们持续按下 ALT键,那么命令按钮的边缘将与单元格边框一起出现。使用上下文菜单更改插入的命令按钮的属性,我们可以通过右键单击 “命令按钮”.

属性窗口

要为命令按钮编写VBA代码,我们需要选择命令按钮,然后选择 “查看代码” 从上下文菜单中。

编写代码如下:

我们已经打电话给 '壳' 键入命令以运行程序的函数(在我们的示例中是命令提示符)。

我们已经使用 “ ComSpec”,代表 “命令说明符”.

现在退出VBE,然后单击命令按钮。我们已经显示了一个命令提示符。

范例#2

假设我们要提取所选文件夹的文件名和详细信息,如下所示。

要执行相同的步骤是:

用浅橙色填充单元格B2:H9。

使用创建标签 '插入' 在命令 “控件” 分组 “开发人员”。

请在下面显示的标签上创建并编辑以下属性 标题, 背景色, BackStyle, 边框样式, 阴影

使用以下步骤创建组合框 组合框 命令(ActiveX控件之一)可用于 插入 命令输入 控制项 分组 开发人员。

按如下所示在excel中创建组合框后,我们可以更改属性。

我们将使用 查看代码 上下文菜单中的命令。

这是一个代码 “选择文件夹” 组合框。

这是“排序方式” 组合框。

这是一个代码 “选择订单” 组合框。

我们将创建一个包含所有文件类型的列表框,以便用户可以选择它们以在结果中仅获取该类型的文件。为此,请选择“列表框(ActiveX控件)“ 来自 ”插入“”中的“控制项“”组中的“开发者“ 标签。

拖动列表框,如下所示。

更改列表框的属性,如下所示。

要将文件类型添加到列表框中,请使用以下代码。

将代码写在“本工作簿”中。

代码:

 私人子Workbook_Open()Dim ArrFileType(25)作为变体ArrFileType(0)=“ Microsoft Excel 97-2003 Worksheet(.xls)” ArrFileType(1)=“ Microsoft Office Excel Worksheet(.xlsx)” ArrFileType(2)=“ Microsoft Excel启用宏的工作表(.xlsm)“ ArrFileType(3)=” Word文档97-2003(.doc)“ ArrFileType(4)=” Word文档2007-2010(.docx)“ ArrFileType(5)=”文本Document(.txt)“ ArrFileType(6)=” Adob​​e Acrobat Document(.pdf)“ ArrFileType(7)=”压缩(压缩)文件夹(.Zip)“ ArrFileType(8)=” WinRAR archive(.rar)“ ArrFileType (9)=“配置设置(.ini)” ArrFileType(10)=“ GIF File(.gif)” ArrFileType(11)=“ PNG File(.png)” ArrFileType(12)=“ JPG File(.jpg) “” ArrFileType(13)=“ MP3格式的声音(.mp3)” ArrFileType(14)=“ M3U File(.m3u)” ArrFileType(15)=“富文本格式(.rtf)” ArrFileType(16)=“ MP4视频(.mp4)“ ArrFileType(17)=”视频剪辑(.avi)“ ArrFileType(18)=” Windows Media Player(.mkv)“ ArrFileType(19)=” SRT File(.srt)“ ArrFileType(20)= “ PHP File(.php)” ArrFileType(21)= “ Firefox HTML文档(.htm,.html)” ArrFileType(22)=“级联样式表文档(.css)” ArrFileType(23)=“ JScript脚本文件(.js)” ArrFileType(24)=“ XML文档( .xml)“ ArrFileType(25)=” Windows批处理文件(.bat)“ Sheet2.FileTypesListBox.List = ArrFileType End Sub 

使用相同的“插入“”中的“控制项“”中的“开发者”标签,并更改要插入的属性 “复选框” 使用 '特性' 选择对象后,同一组中的命令可用。

使用 '插入' 同一组中可用的命令,并像 标题 和其他属性。

我们已经形成了整个结构。现在我们需要编写代码。

激活 “设计模式” 然后右键点击“获取所有文件详细信息”按钮选择“查看代码”,从上下文菜单中添加按钮的代码。

我们将首先在模块中声明一些变量。

以下是添加到“获取所有文件详细信息“ 按钮。

代码:

 私有子项FetchFilesBtnCommandButton_Click()iRow = 14 fPath = Environ(“ H​​OMEPATH”)&“ \”&SelectTheFolderComboBox.Value如果fPath“”则设置FSO = New Scripting.FileSystemObject如果FSO.FolderExists(fPath)False然后设置SourceFolder = FSO。 GetFolder(fPath)如果Sheet2.In includedSubFoldersCheckBox.Value = True,则IsSubFolder = True,否则IsSubFolder = False,如果SourceFolder.Files.Count = 0,则MsgBox“此文件夹中没有文件”&vbNewLine&vbNewLine&“检查您的文件夹路径,然后尝试再次!!“,vbInformation退出子结束如果结束如果调用ClearResult如果FetchAllTypesOfFilesCheckBox.Value = True,则调用ListFilesInFolder(SourceFolder,IsSubFolder)调用ResultSorting(xlAscending,” C14“,” D14“,” E14“)其他调用ListFilesInFolderXtn( ,IsSubFolder)调用ResultSorting(xlAscending,“ C14”,“ D14”,“ E14”)如果FilesCountLabel.Caption = iRow-14其他MsgBox“所选路径不存在!!”结束&vbNewLine&vbNewLine&“选择正确的一个并重试!!”,如果其他MsgBox“文件夹路径不能为空!!”,则vbInformation结束。 &vbNewLine&vbNewLine&“”,vbInformation End If End Sub 

定义 “ ClearResult” 模块中的功能。要插入模块,请选择 “ ThisWorkbook” 然后 '插入' 接着 '模块”'。

在模块中编写以下代码。

ClearResult的代码

还有更多子例程,例如 ‘ListFilesInFolder’, ‘ListFilesInFolderXtn’, “结果排序”,我们将在模块中定义所有这些子例程。

‘ListFilesInFolder’

代码:

 公共子ListFilesInFolder(SourceFolder作为Scripting.Folder,IncludeSubfolders作为布尔值)在SourceFolder.Files的每个文件项的错误继续下一个显示文件属性Cells(iRow,2).Formula = iRow-13 Cells(iRow,3).Formula = FileItem.Name Cells(iRow,4).Formula = FileItem.Path Cells(iRow,5).Formula = Int(FileItem.Size / 1024)Cells(iRow,6).Formula = FileItem.Type Cells(iRow,7) .Formula = FileItem.DateLastModified Cells(iRow,8).Select Selection.Hyperlinks.Add锚点:=选择,地址:= _ FileItem.Path,TextToDisplay:=“点击此处打开”'Cells(iRow,8).Formula =“ = HYPERLINK(”“”&FileItem.Path&“”“,”“”&“单击此处打开”&“”“)” iRow = iRow +1'下一行编号Next FileItem If IncludeSubfolders然后对于每个子文件夹在SourceFolder.SubFolders ListFilesInFolder子文件夹中,如果设置FileItem = Nothing,则为True下一个子文件夹结束Set SourceFolder = Nothing设置FSO = Nothing End Sub 

‘ListFilesInFolderXtn’

 Public Sub ListFilesInFolderXtn(SourceFolder As Scripting.Folder,IncludeSubfolders As Boolean)错误恢复下一个Dim FileArray为SourceFolder.Files中每个文件项的变体FileArray = Get_File_Type_Array调用ReturnFileType(FileItem.Type,FileArray)如果IsFileTypeExists = True 2).Formula = iRow-13个单元格(iRow,3).Formula = FileItem.Name单元格(iRow,4).Formula = FileItem.Path Cells(iRow,5).Formula = Int(FileItem.Size / 1024)单元格(iRow,6)。公式= FileItem.Type单元格(iRow,7).Formula = FileItem.DateLastModified单元格(iRow,8)。选择Selection.Hyperlinks.Add锚点:=选择,地址:= _ FileItem.Path,TextToDisplay :=“单击此处打开”'Cells(iRow,8).Formula =“ = HYPERLINK(”“”&FileItem.Path&“”“,”“”&“单击此处打开”&“”“)” iRow = iRow + 1'下一行编号如果下一个文件项包含IncludeSubfolders,则结束,然后对于SourceFolder.SubFolders ListFilesInFolderXtn SubFolder中的每个子文件夹,如果设置FileItem = Nothing,则返回下一个子文件夹结束= Nothing Set FSO = Nothing End Sub 

“结果排序”

 Sub ResultSorting(xlSortOrder作为字符串,sKey1作为字符串,sKey2作为字符串,sKey3作为字符串)Range(“ C13”)。Select Range(Selection,Selection.End(xlDown))。Select Range(Selection,Selection.End(xlToRight) )。选择Selection.Sort Key1:= Range(sKey1),Order1:= xlSortOrder,Key2:= Range(sKey2 _),Order2:= xlAscending,Key3:= Range(sKey3),Order3:= xlSortOrder,标头_:= xlGuess,OrderCustom:= 1,MatchCase:= False,方向:= xlTopToBottom _,DataOption1:= xlSortNormal,DataOption2:= xlSortNormal,DataOption3:= _ xlSortNormal范围(“ B14”)。选择End Sub 

‘ListFilesInFolderXtn’ 子程序,我们调用了一个名为 ‘ReturnFileType’“ GetFileTypeArray”,我们需要在同一模块中定义功能。

‘ReturnFileType’

代码:

 公共函数ReturnFileType(fileType为String,FileArray为Variant)作为Boolean Dim i作为整数IsFileTypeExists = False对于i = 1到UBound(FileArray)+1如果FileArray(i-1)= fileType然后IsFileTypeExists =真退出,否则IsFileTypeExists =假结束,如果下一个结束功能 

“ GetFileTypeArray”

代码:

公共函数Get_File_Type_Array()作为变体Dim i,j,TotalSelected作为整数Dim arrList()作为字符串TotalSelected = 0对于i = 0至Sheet2.FileTypesListBox.ListCount-1如果Sheet2.FileTypesListBox.Selected(i)= True,则TotalSelected = TotalSelected +1如果下一个ReDim结束arrList(0 to TotalSelected-1)As String j = 0 i = 0 For i = 0 To Sheet2.FileTypesListBox.ListCount-1 If Sheet2.FileTypesListBox.Selected(i)= True然后arrList(j )= Left(Sheet2.FileTypesListBox.List(i),InStr(1,Sheet2.FileTypesListBox.List(i),“(”)-1)j = j + 1如果下一个Get_File_Type_Array = arrList结束函数结束 

我们有一个命令按钮,标题为 “导出到Excel文件”,我们需要为此按钮编写代码,如下所示:

在模块中,定义名为 ‘Export_to_excel’.

代码:

 Sub Export_to_excel()发生错误GoTo err将Dim xlApp作为新Excel.Application Dim xlWB作为新工作簿设置xlWB = xlApp.Workbooks.Add'xlWB.Add xlApp.Visible = False ThisWorkbook.Activate Range(“ B13”)。Select Range( Selection,Selection.End(xlDown))。Select Range(Selection,Selection.End(xlToRight))。Select Selection.Copy xlApp.Visible = True xlWB.Activate xlWB.Sheets(“ Sheet1”)。Select xlWB.Sheets(“ Sheet1“)。Range(” B2“)。PasteSpecial Paste:= xlPasteValues xlWB.Sheets(” Sheet1“)。Cells.Select xlWB.Sheets(” Sheet1“)。Cells.EntireColumn.AutoFit xlWB.Sheets(” Sheet1“) .Range(“ B2”)。选择Exit Sub err:MsgBox(“导出时发生错误。请重试”。)End Sub 

我们还有一个命令按钮标题为 “导出到文本文件”。我们将为命令按钮编写代码,如下所示:

在此代码中,我们可以看到我们有一个用户表单,需要使用以下步骤进行设计:

右键点击 ‘Sheet2(Example2)’ 工作表并选择 '插入' 接着 “用户表格” 从菜单中。

使用工具箱中的工具设计UserForm。

我们已经使用 '标签', '组合框', '文本框'“命令按钮” 为了 用户表格 并更改了所有组件的标题和名称。

为了第一 命令按钮(确定),我们必须编写如下代码:

代码:

 私有子CommandButton1_Click()将iSeperator设置为字符串,如果ComboBox1.Value =“ Other”,则将iSeperator = TextBox1.Value否则,如果iSeperator =“”,则iSeperator = ComboBox1.Value结束,如果MsgBox(“ Hello您尚未选择任何定界符。” &vbNewLine&vbNewLine&_“如果没有特定的分隔符,将很难读取文本文件”,vbYesNo)= vbYes然后调用textfile(iSeperator)Else Exit Sub End If Else Select Case ComboBox1.ListIndex Case 0:iSeperator =“ ,“情况1:iSeperator =” |“情况2:iSeperator =“ vbTab”情况3:iSeperator =“;”结束选择呼叫文本文件(iSeperator)卸载我如果结束则结束 

我们已经打电话给 '文本文件' 命令按钮子例程中的函数,这就是为什么我们需要定义 '文本文件' 模块中的功能。

代码:

 Sub textfile(iSeperator As String)Dim iRow,iCol Dim iLine,f ThisWorkbook.Activate Range(“ B13”)。Select TotalRowNumber = Range(Selection,Selection.End(xlDown))。Count-12如果iSeperator“ vbTab”然后打开ThisWorkbook.Path&“ \ File1.txt”用于输出为#1打印#1,“”关闭#1打开ThisWorkbook.Path&“ \ File1.txt”用于附加为#1对于iRow = 13至TotalRowNumber iLine =“”对于iCol = 2到7 iLine = iLine&iSeperator和Cells(iRow,iCol).Value,下一步,打印#1,iLine,下一步,关闭#1,否则,打开ThisWorkbook.Path和“ \ File1.txt”,输出为#1,打印#1 ,“”关闭#1打开ThisWorkbook.Path&“ \ File1.txt”追加为#1对于iRow = 13到TotalRowNumber iLine =“”对于iCol = 2到7 iLine = iLine&vbTab和Cells(iRow,iCol) .Value下一步打印#1,iLine下一步关闭#1结束如果f = Shell(“ C:\ WINDOWS \ notepad.exe”&ThisWorkbook.Path&“ \ File1.txt”,vbMaximizedFocus)MsgBox“您的文件保存在” &ThisWorkbook.Path和“ \ File1.txt”结束子 

为了 命令按钮2(取消),我们需要编写以下代码。双击取消按钮以编写代码。

对于用于选择说明符的组合框,编写以下代码。

对于用户窗体,编写以下代码。

为了 “获取所有类型的文件” 复选框,编写以下代码。

为了 '列表框' 对于文件类型,请编写以下代码。

为了 ‘SelectTheOrder’ 组合框,编写以下代码。

代码:

 私有子类SelectTheOrderComboBox_Change()选择大小写(SelectTheOrderComboBox.Value)大小写“升序”如果SortByComboBox.Value =“文件名”,则调用ResultSorting(xlAscending,“ C14”,“ E14”,“ G14”)如果If SortByComboBox.Value =如果SortByComboBox.Value =“文件大小”,则调用“文件类型”,然后调用ResultSorting(xlAscending,“ F14”,“ E14”,“ C14”)结束,然后调用ResultSorting(xlAscending,“ E14”,“ C14”,“ G14” )如果If SortByComboBox.Value =“ Last Modified”,则结束,然后调用ResultSorting(xlAscending,“ G14”,“ C14”,“ E14”)如果大小写为“ Descending”,则结束,“ C14”,“ E14”,“ G14”)如果SortByComboBox.Value =“文件类型”,则结束,然后调用ResultSorting(xlDescending,“ F14”,“ E14”,“ C14”)如果SortByComboBox.Value =“,结束文件大小”,然后调用ResultSorting(xlDescending,“ E14”,“ C14”,“ G14”)如果If SortByComboBox.Value =“ Last Modified” End,则调用ResultSorting(xlDescending,“ G14”,“ C14”,“ E14”)如果案例默认退出子结束则结束选择结束子结束 

为了 '排序方式' 组合框,我们将编写以下代码。

代码:

 私有子类SortByComboBox_Change()选择大小写(SelectTheOrderComboBox.Value)大小写“升序”如果SortByComboBox.Value =“文件名”,则调用ResultSorting(xlAscending,“ C14”,“ E14”,“ G14”)如果If SortByComboBox.Value =如果“ SortByComboBox.Value =”文件大小”,则调用“文件类型”,然后调用ResultSorting(xlAscending,“ F14”,“ E14”,“ C14”) )如果If SortByComboBox.Value =“ Last Modified”,则结束,然后调用ResultSorting(xlAscending,“ G14”,“ C14”,“ E14”)如果大小写为“ Descending”,则结束,“ C14”,“ E14”,“ G14”)如果SortByComboBox.Value =“文件类型”,则结束,然后调用ResultSorting(xlDescending,“ F14”,“ E14”,“ C14”)如果SortByComboBox.Value =“,结束文件大小”,然后调用ResultSorting(xlDescending,“ E14”,“ C14”,“ G14”)如果If SortByComboBox.Value =“ Last Modified” End,则调用ResultSorting(xlDescending,“ G14”,“ C14”,“ E14”)如果案例默认退出子结束则结束选择结束子结束 

现在,我们已经编写了完整的代码。现在,我们可以选择所需的文件夹和文件类型,并找到文件列表,我们可以按“文件名”,“文件类型”,“文件大小”或“最后修改时间”对文件进行排序,并将列表导出到excel或文本文件。

要记住的事情

如果是我们指定的值 “ envstring” 参数不在环境字符串表中,则ENVIRON函数将返回长度为零的字符串。