5

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

これにより、グループには現在、各メンバーがそれぞれのファイルを編集しているリポジトリがあります。問題は、元のリンクを保持したまま、これらのファイルを 1 つの .xlsx ファイルに再統合する作業をどのように自動化できるかということです。

EDIT 4/2: 報奨金を開始しました // 上記のスクリプトによってリンクが「壊れた」ことは承知していますが、これが何を意味するのか正確にはわかりませんが、元のリンクを維持して再構築するのがより困難になると思います. リンクを含む元のファイルは引き続き利用可能であり、この問題を解決するために使用できる可能性があることに注意してください。

編集 4/2: Excel のバージョンは 2010 です。元のリンクは現在のファイルには存在しません。

編集 4/3: 元のリンクは現在のファイルにはありませんが、元のリンク (元の未編集のファイルから事前に分割) を再統合することで、再作成/保存することが望まれます。

4

5 に答える 5

1

SharePoint を使用している場合は、全員が同じ Excel (2003 または 2010) ブックを更新できます。

http://office.microsoft.com/en-us/excel-help/about-shared-workbooks-HP005262294.aspx

于 2013-03-15T16:22:42.880 に答える
1

元のリンクにはリンクがないため、リンクを使用した再構築は必要ないと言ったため、リンクはソリューションには実際には適用されません。

提供されたスクリプトには、「リンクを解除したい場合はこの行を使用してください:」というコメントが埋め込まれています。したがって、下の行をコメントアウトすると (行の先頭に ' を追加)、子ワークブックのリンクが保持されます。

シートを別のワークブックにコピーすることに関する前の質問への回答を使用すると、次の VBA を使用して実行できます。

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

これにより、現在開いているブックに他のブックが追加されます。

ディレクトリ内の xls ファイルを検索するコードの FileSearch 関数を置き換えます。

于 2013-04-04T00:41:54.977 に答える
0

これは、私がこれをどのように達成したかの大まかな概要です。

  1. Office 2010ではなくOffice2013 を使用する
  2. 元の .xlsx 割り当てファイルで tmp/ ディレクトリを作成します。
  3. tmp/ に source/ ディレクトリを作成
  4. 分割シート モジュール (このページにリストされています) を使用しますが、リンクを分割する行をコメント アウトします。
  5. 結果の .xlsx ファイルをすべて source/ に配置します (元の .xlsx ファイルは削除できます)。
  6. sources/ フォルダーから最初のシートをリモートし、../ に配置します。
  7. この最初のシートを開き、このページにリストされている「combinesheets」モジュールをインポート/使用します。
  8. シートを保存して再度開くと、リンクを更新するよう求められます。そうして、「ソースの変更」を選択し、手順 6 で最初のシート Re を選択します。
  9. リンクは自動的に更新されます。終わり。

注: マクロを有効にしてファイルを保存する必要があります...

于 2013-04-09T01:05:03.417 に答える
0

複数のワークブック (.xls/.xlsx) ファイルからのデータのマージに関するこの MSDN 記事をご覧ください。

http://msdn.microsoft.com/en-us/library/office/gg549168%28v=office.14%29.aspx

VBAについてはよくわかりませんが、これはあなたが探しているものだと思います。

また、ファイルを管理するためのテキスト ファイルが不要になることにも注意してください。

于 2013-04-09T01:18:34.250 に答える