2017-11-03 21 views
0

私は、メインフレームから生成されたレポートを取り込み、解析してメインフレームから追加情報を引き出し、 vsレポートのロード。最初にレポートを読み込んで実行すると、すべて正常に動作します。新しいブックを作成し、名前を付けて保存します。私は、メインフレームレポートを修正して全体を再解析することなく、レポートに項目を追加する機能を追加しようとしています。私は全く同じサブシステムと関数を呼び出すが、レポートに項目を追加しようとすると、コード内でこの行に到達すると失敗する。"方法2回目に呼び出されたときに '_Global'オブジェクトの '行'が失敗しました

Set xlcell = WB.Sheets(WCSheetName).Cells(WB.Sheets(WCSheetName).Cells(Rows.Count, "B").End(xlUp).Row + 1, "B") 

このコードは、両方のインスタンスで同じサブから呼び出される関数内にあります。関数は次のように最高の

Function AddToWC(ByVal WCSheetName As String, _ 
      ByVal WCName As String, _ 
      ByVal Cmpt As String, _ 
      ByVal Parent As String, _ 
      ByVal dDate As Date, _ 
      ByVal ReqHrs As Single, _ 
      ByVal WB As Workbook, _ 
      ByVal ID As String, _ 
      ByVal Seq As String, _ 
      ByVal Description As String, _ 
      ByVal Plt As String, _ 
      ByVal Que As Long) As Date 

として定義されている私は、ブック、それが機能はこのラインを使用して呼び出され

を参照することになっているワークシートの両方を修飾してきたように、これは動作するはずです、伝えることができますコード

CDT = AddToWC("WC_Summary", rs!WCID, gProdStruct.Components(Y).Name, gProdStruct.Name, CDT, xlCell.Offset(0, 16).value - xlCell.Offset(0, 11).value, CPWB, RefID, rs!SeqNum, rs!OpDesc, rs!WCPlt, xlCell.Offset(0, 11).value) 

のワークブックを確認し、合格CPWBとして最初ブックが既にgCheckForWorkbook Plt, IsPListを呼び出し、次にに割り当てることによって開かれているかどうかをチェックして、正しいブックに設定されています10これは、このサブを実行し、どのようなこれまでのコード.Cells(Rows.Count, "B")の行のこのセクションを理由では私の問題を引き起こしていた正確な部分であることが表示されますグローバル変数

Sub gCheckForWorkbook(ByVal Plt As String, Optional ByVal IsPList As Boolean) 
    Dim WB As Workbook 
    Dim WBE As Boolean 
     For Each WB In Workbooks 
      If InStr(1, WB.Name, "Capacity Planning Rep", vbTextCompare) > 0 Then 
       If IsPList = False Then 
        If MsgBox("A Capacity Planning workbook is already open." & vbCrLf & "Would You Like To Use It?", vbYesNo) = vbYes Then 
         gWBName = WB.Name 
         WBE = True 
         Exit For 
        Else 
         MsgBox "Please Close The Open Workbook And Run The Report Again" 
         ' return value to exit sub 
         WBE = True 
         Exit For 
        End If 
       Else 
        WBE = True 
       End If 
      End If 
     Next WB 
     If WBE = False Then gCreateWorkBook Plt 
End Sub 
+0

完璧に動作しているようです'' xlcell = WB.Sheets''を設定してください( "......'。 – Ralph

+0

@Ralph - そのトリックを行ったようです。なぜそれがうまくいくのか説明してもらえますか? –

+0

@Ralph nope、同じ問題 :( –

答えて

0

を設定し、このラインSet CPWB = Application.Workbooks(gWBName)

を使用。それだけで失敗する前に設定しxlcell = Nothing` `てみてくださいRows.Countがまだ修飾されていないと考えると、私は

Set xlcell =WB.Sheets(WCSheetName).Cells(WB.Sheets(WCSheetName).Cells(Rows.Count, "B").End(xlUp).Row + 1, "B") 

から

Set xlcell = WB.Sheets(WCSheetName).Cells(WB.Sheets(WCSheetName).Cells(​WB.Sheets(WCSheetNam‌​e).Rows.Count, "B").End(xlUp).Row + 1, "B") 

にそれを変更したときに、それは

関連する問題