社区首页 >问答首页 >VBA Excel:将每个结果转换成单元格?计数器不工作了吗?

VBA Excel:将每个结果转换成单元格?计数器不工作了吗?
EN

Stack Overflow用户
提问于 2017-12-10 08:23:35
回答 1查看 60关注 0票数 0

我正在创建一个宏,它爬行到子文件夹中,并检索一些文件的名称。我使用this answer中的代码来回答另一个问题,可以很好地将结果放入“即时”窗口,但我希望将结果放入单元格,作为列表。我得到的只是第一次迭代的结果。

我想要做的可能是显而易见的,但我发誓我试过了,但我自己找不到答案。顺便说一句,我才刚刚开始编程。

我的代码在这里。最重要的部分在子ListFiles中(fld作为对象,Mask作为字符串)。

代码语言:javascript
代码运行次数:0
复制
Option Explicit

Sub Retrieve_Info()

Dim strPath As Variant
Dim pasta_destino As Range
Dim fle As String
Dim fso As Object 'FileSystemObject
Dim fldStart As Object 'Folder
Dim fld As Object 'Folder
Dim fl As Object 'File
Dim Mask As String

Set pasta_destino = ThisWorkbook.Worksheets("VINCULATOR").Range("pasta_destino")
strPath = Application.GetOpenFilename _
(Title:="Selecione o arquivo.xlsx", _
FileFilter:="Excel Files *.xlsx* (*.xlsx*),")

If Not strPath = False Then
pasta_destino = strPath
fle = Dir(strPath)

Set fso = CreateObject("scripting.FileSystemObject") ' late binding
'Set fso = New FileSystemObject 'or use early binding (also replace Object types)

Set fldStart = fso.GetFolder(Replace(strPath, fle, ""))
Mask = "*.xlsx"
For Each fld In fldStart.SubFolders
ListFiles fld, Mask
Next
End If
End Sub

Sub ListFiles(fld As Object, Mask As String)
    Dim fl As Object 'File
    Dim vrow As Integer
    Dim vinculadas As Range
    Dim n_vinc As Range
    Set vinculadas = ThisWorkbook.Worksheets("VINCULATOR").Range("vinculadas")
    Set n_vinc = ThisWorkbook.Worksheets("VINCULATOR").Range("n_vinc")
    vrow = 0
    For Each fl In fld.Files
       If fl.Name Like Mask And InStr(fl.Name, "completo") = 0 Then
       vrow = vrow + 1
            vinculadas.Cells(vrow, 1) = fld.Path & "\" & fl.Name
        End If
    Next
   n_vinc = vrow
End Sub

求求你救命!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-10 11:38:34

我采用了一种稍微不同的方法,除了执行速度更快之外,它可能更容易让您遵循。请试一下这个。

代码语言:javascript
代码运行次数:0
复制
Sub SpecifyFolder()
    ' 10 Dec 2017

    Dim Fd As FileDialog
    Dim PathName As String
    Dim Fso As Object
    Dim Fold As Object, SubFold As Object
    Dim i As Long

    Set Fd = Application.FileDialog(msoFileDialogFolderPicker)
    With Fd
        .ButtonName = "Select"
        .InitialView = msoFileDialogViewList
        .InitialFileName = "C:\My Documents\"       ' set as required
        .Show

        If .SelectedItems.Count Then
            PathName = .SelectedItems(1)
        Else
            Exit Sub                                ' user cancelled
        End If
    End With
    Set Fd = Nothing

    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set Fold = Fso.GetFolder(PathName)
    ListFiles Fold, "*.xlsx"
    For Each SubFold In Fold.SubFolders
            ListFiles SubFold, "*.xlsx"
    Next SubFold
    Set Fso = Nothing
End Sub

Sub ListFiles(Fold As Object, _
              Mask As String)
    ' 10 Dec 2017

    Dim Fun() As String                             ' file list
    Dim Rng As Range
    Dim Fn As String                                ' file name
    Dim i As Long                                   ' array index

    ReDim Fun(1 To 1000)                            ' maximum number of expected files in one folder
    Fn = Dir(Fold.Path & "\")
    Do While Len(Fn)
        If Fn Like Mask And InStr(Fn, "completo") = 0 Then
            i = i + 1
            Fun(i) = Fold.Path & "\" & Fn
        End If
        Fn = Dir
    Loop

    If i Then
        ReDim Preserve Fun(1 To i)
        With ThisWorkbook.Worksheets("VINCULATOR")
            ' specify the column in which to write (here "C")
            i = .Cells(.Rows.Count, "C").End(xlUp).Row
            Set Rng = .Cells(i + 1, "C").Resize(UBound(Fun), 1)
            Application.ScreenUpdating = False
            Rng.Value = Application.Transpose(Fun)
            Application.ScreenUpdating = True
        End With
    End If
End Sub

正如您所看到的,我没有指定目标范围,只指定了工作表和列(我选择了列C;请根据需要在ListFiles子中进行更改)。请注意,代码将新列表追加到所指示列的现有内容。

有两件事是代码做不到让我完全满意的。其一,它不会写入空列C的第一行,而是将第一行保留为空。你可能真的会喜欢。第二,它不执行子文件夹。文件名仅从选定的文件夹及其直接子文件夹中提取。如果需要,任何一个额外的功能都需要额外的编程。

最后,我承认我没有测试列表到工作表的正确传输。我认为它工作正常,但您应该检查您的工作表列中是否列出了名字和姓氏。它们是从文件夹中提取出来的,但可能在写入工作表时遗漏了它们,这是在这种特定方法中发生的典型错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47737106

复制
相关文章
Excel与Python:将VBA宏转换成Python
在本文的示例中,将从头开始创建两个表:乘法表和随机数表,然后对这些数字应用条件格式。
fanjy
2023/08/29
8930
Excel与Python:将VBA宏转换成Python
VBA代码:将垂直单元格区域转换成水平单元格区域
有时候,我们想将垂直列表中的数据转换为水平列表,通常可以使用数据透视表来完成。假设数据是唯一ID,并且客户端可以附加到相同的唯一ID,如下图1所示。
fanjy
2022/11/16
3640
VBA代码:将垂直单元格区域转换成水平单元格区域
VBA代码:将水平单元格区域转换成垂直单元格区域
下图1所示是一个常见的需求,在多个列中放置着每个月份的数据,需要将月份移到单个列中,同时保留报表中的所有描述性信息。
fanjy
2022/11/16
1.4K0
VBA代码:将水平单元格区域转换成垂直单元格区域
使用VBA将工作簿中所有的数据转换成值
通常,工作簿中会包含很多工作表,而工作表中的数据有些是单纯的数值,而有些是公式的结果。如果我们想要将工作簿中所有的数据都转换为值,也就是说,公式转换为其结果值,如何快速实现呢?
fanjy
2022/11/16
1.4K0
Excel中如何批量重命名工作表与将每个工作表导出到单独Excel文件
Step 1: 打开Developer Tab找到VBA (快捷键 Alt+F11)
繁华是客
2023/03/03
3.9K0
Excel VBA解读(137): 让使用用户定义函数的数组公式更快
Excel数组公式能够做很多令人惊讶的事情。除了在输入完后要按Ctrl+Shift+Enter组合键外,与普通公式一样。本文主要研究使用用户定义函数的数组公式。
fanjy
2019/07/19
3.4K0
VBA代码:拆分工作簿示例——将工作簿中的每个工作表保存为单独的工作簿
只需在要拆分的工作簿中运行上述代码,就可将该工作簿中的所有工作表全部保存为单独的工作簿。
fanjy
2022/06/04
4.1K0
VBA代码:拆分工作簿示例——将工作簿中的每个工作表保存为单独的工作簿
Excel VBA取白色单元格内容黄色的单元格的Address
哆哆Excel
2023/09/09
3460
Excel VBA取白色单元格内容黄色的单元格的Address
js 数组去除重复数据-当WPS开始像支持VBA一样支持JS语言时,微软又该何去何从?
  有朋友留言说,微软早就在Office里也支持JS了,比如Script Lab……其实关于Script Lab,二年前我们就聊过一次。今天就再大家详细聊一下,这主要包含了以下内容:
宜轩
2022/12/26
2.6K0
VBA: 将数组输出到工作表
文章背景:工作中,有时需要获取数据源的信息,临时存储在数组中,然后再将数组中的数据传递到目标工作表中。其中主要用到Resize函数,WorksheetFunction.transpose函数和WorksheetFunction.Index函数。
Exploring
2022/09/20
4.2K0
VBA: 将数组输出到工作表
excel转xml工具_怎样将xml转换成excel
C:\Users\lenovo>java -version java version “1.8.0_40” Java(TM) SE Runtime Environment (build 1.8.0_40-b25) Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)
全栈程序员站长
2022/09/23
1.3K0
excel转xml工具_怎样将xml转换成excel
VBA: 不连续单元格区域复制粘贴为数值
文章背景: 处理表格时,有时需要选中单元格区域,将区域内单元格的公式复制粘贴为数值。如果是连续的单元格区域,这样的操作是可行的。如果是不连续的单元格区域,这样的操作会报错。
Exploring
2022/09/20
1.5K0
VBA: 不连续单元格区域复制粘贴为数值
VBA专题10-1:使用VBA操控Excel界面之设置单元格格式
本文主要讲解设置工作表单元格或单元格区域格式的VBA代码,包括设置字体、数字格式、文本对齐、填充单元格背景色、设置单元格边框等。
fanjy
2020/06/24
7.2K0
Excel VBA编程
在Excel中,数据只有文本,数值,日期值,逻辑值和错误值五种类型。但是在VBA中,数据类型跟Excel不完全相同。根据数据的特点,VBA将数据分为布尔型(boolean),字节型(byte),整数型(integer),单精度浮点型(single),双精度浮点型(double),货币型(currency),小数型(decimal),字符串型(string),日期型(date),对象型等等
全栈程序员站长
2022/08/11
45.8K0
Excel VBA编程
VBA循环结构没过瘾,那就再来一篇
这是免费教程《Excel VBA:办公自动化》的第10节,介绍while循环结构。
猴子数据分析
2021/03/14
1.6K0
EXCEL必备工具箱17.0免费版
今天逛论坛,无意中发现一个好用的小工具,我试过啦,确实挺不错的,和大家分享一下! 这个是免费版的,不会收费的,只有增强版的才收费
星泽V社
2022/03/02
5.3K0
EXCEL必备工具箱17.0免费版
Excel-VBA复制工作表到新工作簿方法
如:在文件“自动工具.xlsx”中有一个工作表为“模板”。我想在“模板”工作表中输入数据,再另存为一个新的文件为“小龙女.xlsx”
哆哆Excel
2022/10/31
11.7K0
将查询结果保存到excel中
<?php //****************连接数据库*************** $localhost=”localhost”; $root=”root”; // 用户 $databasen
苦咖啡
2018/05/07
1.7K0
常见的复制粘贴,VBA是怎么做的
引言:本文学习整理自powerspreadsheets.com,非常清晰透彻地讲解如何使用VBA进行复制粘贴操作。
fanjy
2022/03/04
12.2K0
常见的复制粘贴,VBA是怎么做的
划重点!告诉你什么是Excel VBA对象模型及如何引用对象
要编写Excel VBA程序,必须知道对象。可以认为,VBA基于面向对象编程,这意味着VBA程序主要是在处理(或操控)对象。因此,我们要掌握ExcelVBA编程,必须理解:
fanjy
2022/03/04
4.6K0
划重点!告诉你什么是Excel VBA对象模型及如何引用对象

相似问题

计数器不工作了吗?

20

vba excel AutoFit单元格高度不工作

166

每个工作表上每个单元格的Excel VBA平均值

25

VBA Excel: If语句不工作

15

Excel VBA逻辑不工作

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文