当前位置: 首页 > 知识库问答 >
问题:

循环浏览工作簿以创建新工作簿,并将其与单元格值一起保存为标题,否则复制/粘贴到现有工作簿

谢典
2023-03-14

我有一个Excel工作簿,上面有日期和姓名列表。工作簿有500行。日期在A列,名称在B列。工作簿中所有500行的日期都相同,每个名称都是唯一的。

我的目标是最终得到一些工作簿,并根据它们的名称保存在一个单独的目录中。每个工作簿都有相同的标题(A列:日期,B列:名称),行按照A列中的日期排列。

我有其他行数不同但列数相同的工作簿。

>

如果单元格B2中不存在具有值的文件,请复制行,在单元格B2中创建一个名称为值且标题位于行1的文件,粘贴行并另存为新工作表的单元格B2中的值名称。

如果在Cell B2中具有值的文件(例如David)已经存在,则复制整行,打开该文件,将行(包含日期)粘贴到第一个可用的空白行。(我曾想根据日期值插入行,但无法这样做,并将根据标头对数据进行排序)

工作簿新工作簿的创建、复制、粘贴命名和工作正常。

我遇到的问题是该过程似乎忽略了第一个IF语句,导致excel给出问题:“名称为David的文件存在于此位置,您想覆盖它吗?”

以下是我迄今为止所做的工作,如果我不清楚,请告诉我,真诚感谢您的帮助:

Option Explicit  
Sub CreateNewWorkBook()  
    Dim ThisPath As String  
    Dim ActivePath As String  
    Dim rRange As Range  
    Dim rCell As Range  
    Application.ScreenUpdating = False  
    ThisPath = ThisWorkbook.Path  
    ActivePath = ActiveWorkbook.Path  
    Set File1 = ThisWorkbook  
    Set File2 = ActiveWorkbook  
    Set rRange = Range("B2", Range("B655365").End(xlUp))  
    Set rCell = cell.Value  
For Each rCell In rRange.Cells  
    If Dir(ThisPath & "\" & "Names" & "\" & rCell) = "" Then  
    rCell.EntireRow.Copy  
    Workbooks.Add  
    Range("2:2").PasteSpecial xlPasteAll  
    ActiveWorkbook.SaveAs Filename:=ThisPath & "\" & "Names" & "\" & Range("B2").Value  
    Range("A1").Value = "Date"  
    Range("B1").Value = "Name"  
    ActiveWorkbook.Close SaveChanges:=True  
Else: rCell.EntireRow.Copy  
    Workbooks.Open Filename:=(ThisPath & "\" & "Names" & " \ " & "rCell")  
    UsedRange.Columns(1).Offset(1, 0).PasteSpecial xlPasteValues  
    ActiveWorkbook.Close SaveChanges:=True  
    End If  
    Next rCell  
    Exit For  
    End Sub  

共有1个答案

元叶秋
2023-03-14

问题似乎是您的IF语句正在查找文件夹,而不是文件。除非您的名称列包含文件扩展名,否则您还没有为您的IF语句提供足够的信息来检查文件。

您输入If语句的路径如下所示:

"C:\Users\Workbook Folder\Names\Joe Smith"

由于没有文件扩展名,IF语句认为“Joe Smith”是一个文件夹。

要解决此问题,可以向代码中添加文件扩展名,如下所示:

If Dir(ThisPath & "\" & "Names" & "\" & rCell & ".xls*") = "" Then

请注意,使用通配符检查以“.xls”开头的所有文件扩展名。

 类似资料:
  • 我写了下面的代码,并不断地看到。我试图克服这个问题,但似乎没有任何效果。我正试图从一个工作簿复制整个工作表,并将其粘贴到另一个工作簿中:

  • 我有一段巧妙的代码,它根据指定单元格中的特定文本输入隐藏/隐藏表。在Book1中的Sheet1中(比方说),如果我改变单元格A1中的文本(比方说文本是苹果、橘子等),我会在同一本书中的sheet2上得到某些表格(让我们称之为答题卡)。 现在,在另一本书中,我有一个表,其中包含所有可能的文本值(Apple,oranges,等等)。我想写一个代码,首先通过这个表,使值在book1.sheet1(“sh

  • 作为预先警告,我是使用VBA的新手。 我已经拼凑了以下代码来执行以下操作:1。找到工作表“intrastat”2。复制此工作表3的使用范围。作为值粘贴到新工作簿4中。重新格式化B5栏中的日期。将工作簿保存在原始工作簿的位置。 然而,只有当我将宏保存在原始工作簿中时,这才起作用。我需要的是能够有宏保存在一个不同的工作簿和运行宏,我需要能够选择“原始”工作簿从一个文件位置在我的硬盘。 有什么想法吗?

  • 所以在问这个之前,我搜索并发现了一些与我在这里想要做的相似的事情。 基本上我有工作簿AlphaMaster。这个工作簿是一个模板,我想用它来创建每周的新工作簿。 在本工作簿中,有名为“周一至周六”的工作表,以及带有相应日期的周一、周二等其他工作表。 我创建了一个在打开工作簿时加载的表单。我想要的是当我单击表单运行时,它将: > 将代码保存模板作为新工作簿运行 根据userform1的输入重命名工作

  • 我使用这段代码将工作簿中的每一张工作表复制到一个新的工作簿中,它工作得很好,但它颠倒了工作表的顺序,是否有任何办法阻止它这样做? 我正在复制所有的工作表,这样我就可以将它保存为不同的文件扩展名,这是我发现唯一有效的方法。

  • 这应该真的很简单,但我一直在拖网论坛和答案数小时来寻找答案,但没有运气,所以我(不情愿地)创造了一个我自己的问题。 我要做的只是简单地创建一个新工作簿,并将另一个工作簿的范围粘贴到该工作簿中。听起来很简单..? 我原来的工作簿,让我们叫Book1。我试图创建一个新的工作簿,Book2,我将把单元格A1:B10的值复制到其中。 以下是我代码的一个版本(从第一册打开开始): 这会给出一个“Range类