已为非IT相关类分配了一个组项目,其中将存储的工作是单个.xlsx文件。成员们决定协作编辑所述文件的最佳方式是将其拆分为组成表,将每个* .xlsx表上传到SVN存储库,并使用锁和.txt文件来组织工作表/成员职责。
该小组已经用VB脚本(由这个精彩的网站提供)完成了对所述文件的拆分,具体如下:
Sub SaveSheets()
Dim strPath As String
Dim ws As Worksheet
Application.ScreenUpdating = False
strPath = ActiveWorkbook.Path & "\"
For Each ws In ThisWorkbook.Sheets
ws.Copy
'Use this line if you want to break any links:
BreakLinks Workbooks(Workbooks.Count)
Workbooks(Workbooks.Count).Close True, strPath & ws.Name & ".xlsx"
Next
Application.ScreenUpdating = True
End Sub
Sub BreakLinks(wb As Workbook)
Dim lnk As Variant
For Each lnk In wb.LinkSources(xlExcelLinks)
wb.Breaklink lnk, xlLinkTypeExcelLinks
Next
End Sub
因此,该组现在有一个存储库,其中每个成员当前正在编辑其各自的文件。那么问题是,我们如何自动将这些文件重新统一为一个.xlsx文件,保存原始链接。
编辑4/2:开始赏金//我知道链接被上面的脚本“破坏”但是我不确定这意味着什么,但我怀疑它会重新组装与保存原始链接更加困难。应该注意的是,具有链接的原始文件仍然可用,可能可用于帮助解决此问题。
EDIT 4/2:Excel版本为2010年 - 当前文件中不存在原始链接。
编辑4/3:原始链接不在当前文件中,但是需要重新统一原始链接(来自原始未编辑文件,预分割)重新创建/保留。
答案 0 :(得分:1)
如果您拥有SharePoint,则可以更新相同的Excel(2003或2010)书籍。
http://office.microsoft.com/en-us/excel-help/about-shared-workbooks-HP005262294.aspx
答案 1 :(得分:1)
我们可能需要更多详细信息才能为您提供帮助,但您可以按照以下方式完成您的需求(也许这可以启动解决方案):
下面是一个示例(基于您的SaveSheets代码)。如果您尝试这样做,请务必先备份所有内容。我们显然不知道如何布置电子表格以及如何使用它们。如果它搞砸了,那真是太糟糕了。此外,还有一些假设:
如果这些假设是错误的,您需要根据需要进行修改(确定要复制的特定范围和/或向例程添加更强大的逻辑)。
请注意,执行此操作的实际代码非常短。我添加了注释和基本错误处理,显着增加了代码量。
此代码将添加到原始工作簿中。
Sub RetrieveSheets()
Dim strPath As String
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim wbk As Workbook
Dim rng As Range
Application.ScreenUpdating = False
strPath = ActiveWorkbook.Path & "\"
For Each ws In ThisWorkbook.Sheets
'Open the xlsx file (read only)
Set wbk = Nothing
On Error Resume Next
Set wbk = Workbooks.Open(strPath & ws.Name & ".xlsx", ReadOnly:=True)
On Error GoTo 0
'Continue if xlsx file was successfully opened
If Not wbk Is Nothing Then
Set ws2 = Nothing
On Error Resume Next
Set ws2 = wbk.Worksheets(ws.Name)
On Error GoTo 0
'Continue if appropriate sheet was found
If Not ws2 Is Nothing Then
'Identify cells to copy over (cells that are constants)
For Each rng In ws2.Cells.SpecialCells(xlCellTypeConstants)
'set the cell value equal to the identical cell location in the xlsx file
If (Left(ws.Range(rng.Address).Formula, 1)) <> "=" Then
ws.Range(rng.Address) = rng
End If
Next
Set ws2 = Nothing
End If
'Close the xlsx file
wbk.Close False
End If
Next
Set wbk = Nothing
Application.ScreenUpdating = True
End Sub
答案 2 :(得分:1)
然后链接并不真正适用于解决方案,因为您说原始链接没有任何链接,因此不需要重新组装链接。
提供的脚本甚至嵌入了一条注释,如果你想打破任何链接,请使用此行:“。因此,如果您对下面的行进行注释(在行前加上'),它将保留子工作簿中的链接。
使用以下VBA可以完成对copying sheets to another workbook重新组装的上一个问题的回答:
Sub CombineSheets()
Dim strPath As String
Dim ws As Worksheet
Dim targetWorkbook As Workbook
Set targetWorkbook = ActiveWorkbook
Application.ScreenUpdating = False
'Adjust path location of split files
strPath = "C:\code\xls-split"
Dim str As String
'This can be adjusted to suit a filename pattern.
str = Dir(strPath & "\*.xl*")
Do Until str = ""
'Open Workbook x and Set a Workbook variable to it
Set wbResults = Workbooks.Open(strPath & "\" & str, UpdateLinks:=0)
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy After:=targetWorkbook.Sheets(targetWorkbook.Sheets.Count)
Next Sheet
wbResults.Close SaveChanges:=False
str = Dir()
Loop
Application.ScreenUpdating = True
End Sub
这会将其他工作簿附加到当前打开的工作簿中。
源代码Replacing FileSearch function,用于在目录中查找xls文件的代码。
答案 3 :(得分:0)
这是我如何完成这个的大致概述:
注意:您必须将文件保存为启用宏,...
答案 4 :(得分:0)
看看这篇关于合并来自多个工作簿(.xls / .xlsx)文件的数据的MSDN文章
http://msdn.microsoft.com/en-us/library/office/gg549168%28v=office.14%29.aspx
我对VBA了解不多,但我认为这正是你要找的。 p>
另请注意,它确实不需要文本文件来管理文件