2016-10-06 11 views
4

これが可能かどうかはわかりませんが、ウェブ全体で回答が見つからないことがあります。セルからシートを動的に参照する - VBA

personApersonBpersonCのように、テンプレートのワークブックSchedule.xlsを作成しました。私はそれをコピーしてマスターファイルMaster.xlsに貼り付けることによって各ワークブックから同じ範囲を抽出する必要があります。これにより、各人の情報をこのマスターブックに取り込むことができます。

このMaster.xlsは、記入人数がSchedule.xlsになります。

たとえば、これらの3人の人は、personA,personBpersonCの3人の人と一緒に滞在しましょう。

彼らは彼らのスケジュールを生成したら、私はその情報を取得したいとMaster.xlsにコピーしますが、別のシートにpersonApersonBpersonCを命名。私はSchedule.xlsのセルを設定することで、これをやりたい

、人々はpersonApersonBpersonCの間の値を選択することができますA1は、言います。

この方法では、シートの動的参照をMaster.xlsに作成できます。このマクロでは情報が貼り付けられます。

`Range("B2.D5").Select 
Selection.Copy 
Workbooks.Open Filename:= _ 
    "C:\My Documents\Master.xlsx" 
Sheets(*REFERENCE*).Select 
Range("B2").Select 
ActiveSheet.Paste 
Range("A1").Select 
Application.CutCopyMode = False 
ActiveWorkbook.Save 
ActiveWorkbook.Close` 

私が上書きたいシートを設定する代わりに、REFERENCEの何を書くべきですか?

ありがとうございます。

+0

'PersonX'が* Schedule.xls *に参加したとき、* Master.xls *(完全なUNCパス)を更新したとします。 * Master.xls *には基本のテンプレートシートがあります。ワークシート** personX **がマスターでない場合は、シートのコピーを作成して** personX **に名前を変更し、スケジュールから希望の範囲をコピーしますそれに。しかし、これは、人がMaster.xlsへの書き込みアクセス権を持っていることを前提としています。 – PatricK

+0

@ mmarinrこれはあなたの問題に答えるもので、コードの問題を解決するものではありません。 'Sheets(Range(" A1 ")。Value).Select'を使ってください。しかし、 'Select'、' Selection'と 'ActiveSheet'を使わないほうが良いです –

+0

' Schedule.xls'ファイルに 'ComboBox'のようなものがあります。次に、あなたの 'Workbook_Open'で、' Master.xls'にある全てのシートをコンボボックスに入れます。人が名前を見つけられない場合は、名前を入力するだけです。その後、 'Schedule.xls'の' Workbook_BeforeClose'で、 'Master.xls'を更新してください。ユーザーのシートが存在しない場合は、シートを追加して情報を追加します。 @ShaiRadoが推奨するように、 'Select'のようなものを使わないでください。 'Worksheet'やその他のExcelオブジェクトの使い方を見てください – Zac

答えて

0

私はシンプルでコードなしのアプローチを提案します。次に、あなたの特定の要求に応じたVBAコードを提供します。

簡単にするために、2つのワークブック、Carl's SlaveWB.xlsxとMaster.slxmを同じフォルダに配置します。両方のスプレッドシートで同期するワークシートを開きます(一方向コピー)。この簡単な例では、これらのシートを手動で作成します。次に、マスターシートのセルA1をクリックします。編集モードで「=」と入力し、Carlのワークシート(別のワークブック)のA1セルをクリックします。あなたのシートがリンクされました。 A1だけでなく、ワークシート全体をコピーすることもできます。セルA1をワークシート全体にコピー/ペーストするだけです。さて、カールは彼の仕事を路上で取ることができます。彼がチェックインする方法は次のとおりです。彼は単に最新のワークブックをあらかじめ指定されたフォルダにコピーします。マスターブックを開くと、自動的にCarlの「チェックイン」ブックからすべてのデータが取り込まれます。

ブックを別のブックにコピーして(書式設定をキャプチャする場合)、難しくありません。

最初に、masterの古い「Carl」ワークシートの名前を変更または削除します。ワークシートを名前で削除するコードです。マスターのシート名がCarlの "Sheet1"ワークシート、A1セルに格納されている場合は、これをWSName:Workbooks( "SlaveWB")シートの値として渡すことができます。 )。値。

'DeleteWorksheet(WSName) 
Public Function DeleteWorksheet(WSName As String) 
    'If Not IIf(IsNull(DebugMode), False, DebugMode) Then On Error GoTo FoundError 
    If Not Range("DebugMode").Value Then On Error Resume Next 

    Dim WorksheetExists As Boolean 
    DeleteWorksheet = False 

    'if no worksheet name provided, abort 
     If Len(WSName) < 1 Then Exit Function 

    'if worksheet exists, delete 
     WorksheetExists = False 
     On Error Resume Next 
     WorksheetExists = (Sheets(WSName).Name <> "") 'if worksheet exists, set WorksheetExists = True 
     On Error GoTo FoundError 
     If WorksheetExists Then Sheets(WSName).Delete 'if worksheet exists, delete 
     DeleteWorksheet = True 'function succeeded (deleted worksheet if it existed) 

    Exit Function 
FoundError: 
    On Error Resume Next 
    DeleteWorksheet = False 
    Debug.Print "Error: DeleteWorksheet(" & WSName & ") failed to delete worksheet. " 
End Function 

次に、改訂されたワークシートをCarlのワークブックからマスターにコピーします。次のコードは、srcWBNameからtgtWBNameにワークシートをコピーし、tgtWBNameに好きな名前を付けてシートに名前を付けます。あなたはコードのスプレッドシートにのみ残しておきます。すべてのユーザーが保持するすべてのコピーに同じコードを入れるのは危険です。そして、コード更新を管理するのは難しいでしょう。

Sub CopyWSBetweenWBs(srcWBName As String, srcWSName As String, _ 
        tgtWBName As String, tgtWSName As String) 

    'srcWBName - name of PersonA's workbook 
    'srcWSName - name of worksheet to copy from Person A's workbook 
    'tgtWBName - target workbook, the master 
    'tgtWSName - what you want to call the worksheet after copying it to the target/master. 
    '   If you want this sheetname to be taken from a cell, just pass the cell 
    '   reference. For example, this can be 
    '   Workbooks(srcWBName).Sheets(srcWSName).Cells(1,1).Value 

    Dim srcWB As Workbook 
    Dim srcWS As Worksheet 
    Dim tgtWB As Workbook 
    Dim tgtWS As Worksheet 

    'Create XL objects 
    Set srcWB = Workbooks(srcWBName) 
    Set srcWS = srcWB.Worksheets(srcWSName) 

    Set tgtWB = Workbooks(tgtWBName) 
    Set tgtWS = tgtWB.Worksheets(tgtWSName) 

    ' Start at the source 
    srcWB.Activate 
    srcWS.Activate 

    ' Copy to target workbook 
    srcWS.Copy Before:=tgtWB.Sheets(1) '<~~ copy to beginning of workbook 
    ' After copying the worksheet, it is active, so you can rename it now. 
    ActiveSheet.Name = tgtWSName 


End Sub 

これだけです。私はこれが役立つことを願っています

関連する問題