【问题标题】:Create folders using 2 column values from Excel使用 Excel 中的 2 列值创建文件夹
【发布时间】:2021-02-08 20:26:14
【问题描述】:

所以我需要从电子表格中创建一大堆文件夹。 我在 A 列中有姓氏,在 B 列中有一个人的名字,我需要基于此生成文件夹。

我有found a bit of code that someone else posted,可以,但我需要在创建的文件夹中的姓名和姓氏之间添加一个空格。 原海报说他们确实设法添加了一个空间,但从未说明如何。

Sub MakeFoldersForEachRow()
Dim Rng As Range
Dim maxRows, maxCols, r, c As Integer
Dim s As String
Set Rng = Selection
maxRows = Rng.Rows.Count
maxCols = Rng.Columns.Count
For r = 1 To maxRows
    s = ""
    For c = 1 To maxCols
        s = s & Rng(r, c)
    Next c
    If Len(Dir(ActiveWorkbook.Path & "\" & s, vbDirectory)) = 0 Then
        MkDir (ActiveWorkbook.Path & "\" & s)
        On Error Resume Next
    End If
Next r

结束子

【问题讨论】:

  • 我无法理解你想用上面的代码完成什么。您是否需要从 A1 与 B1(之间的空格)、A2 与 B2 等串联获得的文件夹名称?
  • 如果您只有 2 列,请放弃 c 循环并使用 s = Rng(r, 1) & " " & rng(r,2)
  • @FaneDuru 是正确的......这就是我需要的。从你的回答来看,它似乎工作正常
  • 有没有办法只设置到选定的列?

标签: vba directory space


【解决方案1】:

请尝试下一个代码:

Sub createFoldNamesFromTwoColumns()
 Dim sh As Worksheet, lastR As Long, fldName As String, i As Long
 
 Set sh = ActiveSheet 'use here your necessary sheet
 lastR = sh.Range("A" & sh.Rows.count).End(xlUp).row
 For i = 1 To lastR
    fldName = sh.Range("A" & i) & " " & sh.Range("B" & i)
    If Dir(ActiveWorkbook.Path & "\" & fldName, vbDirectory) = "" Then
        MkDir ActiveWorkbook.Path & "\" & fldName
    End If
 Next i
End Sub

已编辑

我现在可以看到您的最后一个请求,意思是处理选定的列:

Sub createFoldNamesFromTwoSelectedColumns()
 Dim sh As Worksheet, rngSel As Range, C1 As Long, lastR As Long, fldName As String, i As Long
 
 Set sh = ActiveSheet
 Set rngSel = Selection

 If rngSel.Columns.count <> 2 Then MsgBox "You must select two columns!": Exit Sub
 C1 = rngSel.cells(1).Column: Stop
 
 lastR = sh.cells(sh.Rows.count, C1).End(xlUp).row
 For i = 1 To lastR
    fldName = sh.cells(i, C1) & " " & sh.cells(i, C1 + 1)
    If Dir(ActiveWorkbook.Path & "\" & fldName, vbDirectory) = "" Then
        MkDir ActiveWorkbook.Path & "\" & fldName
    End If
 Next i
End Sub

【讨论】:

  • @Carl Visagie:你有没有时间来测试上面的代码?如果经过测试,它没有达到您想要的效果吗?
  • 我测试了第一组代码,很快就会测试新的,只是有点被其他东西淹没了
  • 这一行的代码似乎有错误:C1 = rngSel.Cells(1).Column: Stop 但使用前面的代码我得到了我需要的最终结果。如果仅对选定的列执行此操作,它将更加高效和通用
  • @Carl Visagie:很高兴我能帮上忙! 1. 我们这里,当有人回答我们的问题时,勾选代码左侧的复选框,以使其接受答案。我们的主要目标是让人们学习。这样,搜索类似问题的其他人就会知道该代码有效。 2. 该行没有错误...Stop 命令停止该特定行的代码,以便您在尝试调试时检查结果。我只是忘记删除它,但我认为删除或评论它应该很简单。我也认为我以前的代码是最好的方法。
  • 是的,所以前面的代码完成了这项工作。但是,由于某些原因,让它只为选定的而做会好得多。感谢您的时间和帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多