2017-12-08 13 views
0

VBAがApplication.GetOpenFilenameで挿入する別のタブ(タブBとタブC)へのリンクを持つブック(タブA)がブックにあります。私がマクロを実行すると、そのタブの数式(タブが挿入されたタブ、すなわちタブBとタブCを参照する)のために、タブAに#REF!が得られます。これを防止し、タブAの数式をそのまま維持するにはどうすればよいですか?私はちょうどREFエラーまたはシートの挿入を導入しているWB2開くかはわからない内部リンクが#REFにならないようにするにはどうすればよいですか?

Sub Data_Tab() 
    ' 
    ' Data Tab Macro 
    Dim ws As Worksheet 
    Dim LastCell As Range 
    Dim LastCellRowNumber As Long 
    Dim sourceSheet As Worksheet 
    Set sourceSheet = ActiveSheet 

    On Error Resume Next 
    Application.DisplayAlerts = False 
    Worksheets("CC_DMSR").Delete 
    Sheets.Add Before:=ActiveSheet 
    ActiveSheet.Name = "CC_DMSR" 
    Application.DisplayAlerts = True 

    Dim wb1 As Workbook 
    Dim wb2 As Workbook 
    Dim Sheet As Worksheet 
    Dim PasteStart As Range 

    Set wb1 = ActiveWorkbook 
    Set PasteStart = [CC_DMSR!A1] 

    Sheets("CC_DMSR").Select 
    Cells.Select 
    Selection.ClearContents 

    MsgBox "Please select the CC DMSR File" 
    FileToOpen = Application.GetOpenFilename _ 
    (Title:="Please choose a Report to Parse", _ 
    FileFilter:="Report Files *.xlsx (*.xlsx),") 

    If FileToOpen = False Then 
     MsgBox "No File Specified.", vbExclamation, "ERROR" 
     Exit Sub 
    Else 
     Set wb2 = Workbooks.Open(Filename:=FileToOpen) 

     For Each Sheet In wb2.Sheets 
      With Sheet.UsedRange 
       .Copy PasteStart 
       Set PasteStart = PasteStart.Offset(.Rows.Count) 
      End With 
     Next Sheet 

    End If 

    wb2.Close 

    On Error Resume Next 
    Application.DisplayAlerts = False 
    Worksheets("Submitted_DMSR").Delete 
    Sheets.Add Before:=ActiveSheet 
    ActiveSheet.Name = "Submitted_DMSR" 
    Application.DisplayAlerts = True 
    Set wb1 = ActiveWorkbook 
    Set PasteStart = [Submitted_DMSR!A1] 

    Sheets("Submitted_DMSR").Select 
    Cells.Select 
    Selection.ClearContents 

    MsgBox "Please select the Submitted DMSR File" 
    FileToOpen = Application.GetOpenFilename _ 
    (Title:="Please choose a Report to Parse", _ 
    FileFilter:="Report Files *.xlsx (*.xlsx),") 

    If FileToOpen = False Then 
     MsgBox "No File Specified.", vbExclamation, "ERROR" 
     Exit Sub 
    Else 
     Set wb2 = Workbooks.Open(Filename:=FileToOpen) 

     For Each Sheet In wb2.Sheets 
      With Sheet.UsedRange 
       .Copy PasteStart 
       Set PasteStart = PasteStart.Offset(.Rows.Count) 
      End With 
     Next Sheet 

    End If 

    wb2.Close 

    ActiveWorkbook.RefreshAll 

    ActiveSheet.PivotTables("PivotTable2").PivotCache.MissingItemsLimit = _ 
     xlMissingItemsNone 
    ActiveSheet.PivotTables("PivotTable1").PivotCache.MissingItemsLimit = _ 
     xlMissingItemsNone 
    With Sheets("Comparison").PivotTables("PivotTable1").PivotFields("TASK/TB") 
     .PivotItems("(blank)").Visible = False 
    End With 
    With Sheets("Comparison").PivotTables("PivotTable2").PivotFields("TASK/TB") 
     .PivotItems("(blank)").Visible = False 
    End With 


    Dim bottomrow As Long 

    Sheets("Comparison").Select 
    bottomrow = Cells(Rows.Count, "B").End(xlUp).Row 

    Application.ScreenUpdating = False 
    Range("D4:J4").AutoFill Destination:=Range("D4:J" & bottomrow), Type:=xlFillDefault 

    Application.ScreenUpdating = True 

    Call sourceSheet.Activate 

End Sub 
+0

に再利用できるステップ1で範囲オブジェクトを設定することができます。 A、B、Cは投稿されたコードにどのように関連していますか? –

+0

@ティム・ウィリアムズ、この質問は彼が11月29日に尋ねたようなもので、あまりにも幅広く、具体的ではない、あるいは間違っている? – GMalc

+0

タブAは比較タブです。BはSubmitted_DMSR、タブCはCC_DMSRです。 –

答えて

0

は、ここに私のコードです。

など。 workbook1を開くと、workbook2への参照が含まれていて、workbook2が保護モード(既定の設定)で開かれた場合、Excelはworkbook2への参照を持つセルに保護エラーのためREFエラーを挿入します。

上記の問題が解決しない場合は、信頼できるドキュメントまたは場所としてwb2を追加するか、Excel>ファイル>オプション>保護モードをオフにすることをお勧めします。

かかわらず、上記の他の溶液のあなたが使用される: を挿入する シート(S)への参照を持つすべてのセルを介して

  1. Range.Findループ
  2. 一時的に、これらのセルの最初の '='を '='に置き換えます。これにより、式が文字列値に変換されます。
  3. 次に、必要なシートを挿入します(文字列値でREFエラーが発生することはありません)
  4. 次に、 '='を '='に置き換えて、文字列をExcel式に戻します。

あなたはシートがどのである綴るために参考になる、ステップ2と3

関連する問題