将动态行复制到新工作簿并保存它
我是新来的。我有一个解决方案,但我可以找到我需要的东西。将动态行复制到新工作簿并保存它
,我发现我的答案的一部分,在这个帖子: Copying Dynamic Cells/Rows Into New Sheet or Workbook
但有2个,我需要更具体的行动,我不能弄明白的一个好办法。 首先我想将新工作簿与“原始文件”的名称保存在原始文件的相同位置。 第二件事是将第一行复制到每个新的工作簿。 这里我举的例子: 在我的数据库,重点进行排序,这样所有的字母都在一起,布拉沃和休息...
原始数据库(DB):
Name Position Key
Bruce 1 Alpha
Bruce 2 Alpha
Alfred 2 Alpha
Alfred 3 Bravo
Robin 1 Bravo
Robin 1 Bravo
在第一个工作簿我想:
Name Position Key
Bruce 1 Alpha
Bruce 2 Alpha
Alfred 2 Alpha
,我想这个工作簿是保存为“Alpha.xlsx”在同一目录中的原始数据库(在桌面上的文件),然后,他关闭窗口
然后第二个工作簿将
Name Position Key
Alfred 3 Bravo
Robin 1 Bravo
Robin 1 Bravo
保存的名称为“Bravo.xlsx”也是在我的桌面上接近相同的文件,并保持与400个键
这里从代码去我在论坛上找到了帖子: 原代码被写了chiliNUT我做了更新,以适应我的DB
Sub grabber()
Dim thisWorkbook As Workbook
Set thisWorkbook = ActiveWorkbook
last = 1
For i = 1 To 564336 'my DB had 500K rows
If Range("A" & i) <> Range("A" & (i + 1)) Then
Range("A" & last & ":N" & i).Copy
Set NewBook = Workbooks.Add
NewBook.Sheets("Feuil1").Range("A1").PasteSpecial xlPasteValues
last = i + 1
thisWorkbook.Activate
End If
Next i
End Sub
这VBA完美的作品但它不会每次复制第一行,也不保存它。我有大约400个“键”,因此手动处理变得困难。 我不是专家。
能否请您在答案中复制完整的代码,以便我能够弄清楚? 非常感谢您的帮助。 我读了很多帖子,你总是想出来帮助别人。所以也为此感谢你。
你可能明白英语不是我的第一语言。对不起,错误和错误的语法。
提前致谢!
你可以这样做(在我的电脑上工作的数据示例)。记得添加Microsoft脚本运行时,使字典工作:
Sub grabber()
Dim thisWs As Worksheet: Set thisWs = ActiveWorkbook.ActiveSheet
'To make dictionaries work, and the line to make sense, you need to reference Microsoft Scripting Runtime, Tools-> References, and check of "Microsoft Scripting Runtime"
Dim myDict As New Scripting.Dictionary
Dim pathToNewWb As String
Dim currentPath, columnWithKey, numCols, numRows, uniqueKeys, uKey
'to avoid the screenupdating being false in case of unforseen errors, I want the program to jump to unfreeze if errors occur
On Error GoTo unfreeze
'with 400 keys it would end up with a lot of flicker + speeds it up:
Application.ScreenUpdating = False
'get the path of the active workbook
currentPath = Application.ActiveWorkbook.Path
'I hardcode the reference to the key column
columnWithKey = 3
'And assume that the worksheet is "just" data, why the number of used rows and columns can be used to identify the data
numCols = thisWs.UsedRange.Columns.Count
'extract the index of the last used row in the active sheet of the active workbook
numRows = thisWs.UsedRange.Rows.Count
'use a dictionary to get a list of unique keys by running over the key column in the used rows
For i = 2 To numRows
vKey = thisWs.Cells(i, columnWithKey)
If Not myDict.exists(vKey) Then
myDict.Add vKey, 1
End If
Next i
uniqueKeys = myDict.keys()
For Each uKey In uniqueKeys
pathToNewWb = currentPath & "/" & uKey & ".xlsx"
'Filter the keys column for a unique key
thisWs.Range(thisWs.Cells(1, 1), thisWs.Cells(numRows, numCols)).AutoFilter field:=columnWithKey, Criteria1:=uKey
'copy the sheet
thisWs.UsedRange.Copy
'Open a new workbook, chang the sheets(1) name and paste as values, before saveas and close
Set NewBook = Workbooks.Add
With NewBook
.Sheets(1).Name = "Feuil1"
.Sheets(1).Range("A1").PasteSpecial xlPasteValues
.SaveAs pathToNewWb
.Close
End With
'remove autofilter (paranoid parrot)
thisWs.AutoFilterMode = False
Next
Set myDict = Nothing
unfreeze:
Application.ScreenUpdating = True
End Sub
在适应您提供的代码,我用下面的帖子:
的字典:(Does VBA have Dictionary Structure?)
的自动筛选:( VBA for filtering columns)
为另存为&关闭:(Excel VBA Open workbook, perform actions, save as, close)
每时间我对你们印象深刻。似乎没有问题,没有答案给你!谢谢。 但有些东西我不能这样做是在工具选项卡中激活参考。这是灰色的,我不能有acces所以我不能尝试你的杰作。 关于这方面的任何线索? – Newbie2000 2014-10-09 13:41:01
也许这是有点复杂(至少对我来说) 因为我尝试了我引用的第一个代码,并且它似乎即使使用400个键也能完成这项工作。所以我的问题是,如果你有时间,你可以向我解释SaveAs action是否取第3列的名称,并且你的代码是否每次都为每个“提取”复制第一行?“如果你没有任何时间谢谢你为你的答案,我会尽力弄清楚 – Newbie2000 2014-10-09 13:49:54
关于灰色的引用,你不能在调试模式。如果问题在未调试时仍然存在,则无法回答。 代码复制每次迭代的标题。代码在键列上应用过滤器,复制整个工作表并将其粘贴为值。结果是只有未过滤的值才被粘贴到新工作簿中。新工作簿的名称在pathToNewWb中设置,并且只是从原始工作簿的路径和唯一键组成的字符串。尝试添加几个断点并检查当地人(查看 - >本地窗口) – 2014-10-09 14:05:21