2012-07-29 26 views
0

我正在尝试处理一个代码,该代码可以使我从原始文件中复制数据并更新主工作簿中原始列A中每个值的单个工作表文件。用原始文件中的数据更新主工作簿的VBA代码

背景:在原始文件的A列中提到了许多唯一ID,其他列包含与每个唯一ID相对应的数据。每个唯一ID在主工作簿中都有一个单独的工作表。

要求:

  1. 删除在原始文件
  2. 复制从原始文件中的整行的被删除表中提及的不希望的唯一的ID,定位相关的唯一ID片在主工作簿和粘贴最后一行的数据。
  3. 如果主工作簿中没有唯一的ID表,则创建它并粘贴数据。

问题:

  1. ,我有卡在主定位正确的表的代码,它是无法找到表,当它来创建一个名为新的一页它给出表格名称已经存在的错误。
  2. 如果需要为唯一ID创建新工作表,它应该继续循环并粘贴其他ID的数据。
  3. 它应该在最后给出一个消息框,提供所有新建工作表的详细信息。

请帮我解决......我一直在试图解决这个问题。

RAW文件(Excel)中: Columns in the raw file excel

主文件(Excel)中:在主文件 Columns in the master file

工作表名称: Sheet Names in Master File

代码:

Sub unique_ids() 
    Dim NewFN As String, MasterFN As String 
    Dim lrow As Long, i As Long, drow As Long, j as Long 
    Dim rngf As Range, rngv As Range 
    Dim SName As Variant 
    Dim FoundDup As Range 

    'Open the Master file 
    proceed: 
    MasterFN = Application.GetOpenFilename(FileFilter:="All files (*.*), *.*",  Title:="Please open the Master File") 
    If MasterFN = "" Then 
    MsgBox "You have not selected a file." 
    GoTo proceed 
    Else 
    Workbooks.Open Filename:=MasterFN 
    End If 
    MasterFN = ActiveWorkbook.Name 

    'Open the raw file 
    proceed1: 
    NewFN = Application.GetOpenFilename(FileFilter:="All files (*.*), *.*", Title:="Please open the raw File") 
    If NewFN = "" Then 
    MsgBox "You have not selected a file." 
    GoTo proceed1 
    Else 
    Workbooks.Open Filename:=NewFN 
    End If 

    'Save backup file 
    ActiveWorkbook.SaveAs Filename:="D:\Counts-" & Format(Date, "dd-mmm-yy") & ".xlsx", FileFormat:= _ 
    xlOpenXMLWorkbook, CreateBackup:=False 
    Workbooks("Counts-" & Format(Date, "dd-mmm-yy") & ".xlsx").Close 
    Workbooks.Open Filename:=NewFN 
    NewFN = ActiveWorkbook.Name 

    'Delete the "to be removed" IDs 
    Sheets("counts").Select 
    For Row = Range("A65536").End(xlUp).Row To 2 Step -1 

    Set FoundDup = Sheets("To be deleted").Range("A:A").Find(Cells(Row, 1), LookIn:=xlValues, lookat:=xlWhole) 

    If Not FoundDup Is Nothing Then 
     Cells(Row, 1).EntireRow.Delete 
    End If 

    Next Row 

    ‘Update Data 

    For j = 2 To lrow 
    SName = Workbooks(NewFN).Worksheets("counts").Range("K" & j).Value 
    On Error GoTo new_tab 
    Workbooks(NewFN).Worksheets("Counts").Range("A" & j & ":I" & j).Copy  Workbooks(MasterFN).Worksheets(SName).Range("B" & Rows.Count).End(xlUp).Offset(1, 0) 
    Workbooks(MasterFN).Worksheets(SName).Range("A" & Rows.Count).End(xlUp).Value = Format(Date, "dd-mmm-yy") 
    drow = Workbooks(MasterFN).Worksheets(SName).Range("K" & Rows.Count).End(xlUp).Offset(-1, 0).Row 
    Workbooks(MasterFN).Worksheets(SName).Range("K" & drow - 1 & ":S" & drow - 1).Copy Workbooks(MasterFN).Worksheets(SName).Range("K" & drow & ":S" & drow) 
    Next j 

    new_tab: 
    MsgBox "New ID encountered", vbCritical 
    Workbooks(MasterFN).Sheets.Add(after:=Workbooks(MasterFN).Sheets(Worksheets.Count)).Name = SName 
    Workbooks(NewFN).Worksheets("counts").Range("A" & j & ":I" & j).Copy  Workbooks(MasterFN).Worksheets(SName).Range("B" & Rows.Count).End(xlUp) 
    Workbooks(MasterFN).Worksheets(SName).Range("A" & Rows.Count).End(xlUp).Value = Format(Date, "dd-mmm-yy") 
    drow = Workbooks(MasterFN).Worksheets(SName).Range("K" & Rows.Count).End(xlUp) 
    Workbooks(MasterFN).Worksheets(SName).Range("K" & drow - 1 & ":S" & drow - 1).Copy Workbooks(MasterFN).Worksheets(SName).Range("K" & drow & ":S" & drow) 

    MsgBox "This work is now complete, new sheet added - " & SName 

    End Sub   
+0

编辑问题可能会有所帮助,以包含“原始文件”外观的小样本。例如,它是以逗号分隔的文本文件吗?或者“原始文件”是否意味着别的什么? – 2012-07-29 09:20:21

+0

嘿安德鲁...我试图附加示例原始和主文件,但无法弄清楚如何....原始文件中的数据在不同的列:A-唯一的ID,B-客户名称,C - I - 数据,K - 连接公式以在ID前添加“A”。我认为这个问题似乎是excel无法在主文件中找到数字表名。 – varun84 2012-07-29 10:55:03

+0

您无法附加文件。你需要*显示*他们是什么样的。你的“原始数据”是一个Excel文件吗?或者是其他东西? [查看一些数据库问题,了解数据如何在问题内的“代码块”中进行布局,例如] – 2012-07-29 12:07:54

回答

0

的我在这里可以看到的第一个潜在问题是在For j = 2 To lrow循环你继续参考变量i而不是我认为应该是j。我看不到i变量已经在任何地方初始化了?

+0

嘿马特....感谢您指出它,粘贴了旧版本的代码... 。为此而努力。我更新了代码...但是,这并不能解决问题。 – varun84 2012-07-31 16:00:10

+0

我不知道你的原始文件中你的工作表的名字是什么,所以我看不到它出错的地方。代码中的哪一行会出错?对于“计数”工作表,有时用大写字母C和小写字母书写,这可能是一个问题。我建议您参考工作表[代码名称](http://www.ozgrid.com/VBA/excel-vba-sheet-names.htm)。 – mattboy 2012-07-31 18:58:42

+0

原始文件只包含两张纸 - 计数和待删除。问题是更新主数据。它无法找到工作表,因此它将移动到新的选项卡部分,并为唯一ID创建新工作表。但是,由于具有相同唯一ID的工作表名称已经存在,因此该代码在此处给出了一个错误。这是我得到的错误 - Workbooks(MasterFN).Sheets.Add(after:= Workbooks(MasterFN).Sheets(Worksheets.Count))。Name = SName。我可能是错的,但因为我试图在两个单独的工作簿之间引用表名称,所以代码名称在这里不起作用。 – varun84 2012-08-02 18:21:00

相关问题