2017-11-11 11 views
1

ネットワークパスにあるExcelブックにリンクされているユーザーフォームで作業しています。ノートブック内には、ソースという名前のテーブルがあります。このテーブルにはIDとソース名が含まれています。ユーザーフォームには、新しいソースをテーブルに追加するボタンがあります。私の現在のVBAは次のようになります:テーブルに挿入するときに 'range'オブジェクトが失敗した場合の '_Default'のVBAエラーメソッド

Private Sub bFinishAdd_Click() 

    Dim wb As Workbook 
    Dim ws As Worksheet 
    Dim rng As Range 
    Dim lr As Long 

    Set wb = Workbooks.Open("\\datapath\datasub1\datasub2\filename.xlsx") 
    Set ws = wb.Worksheets("Source") 
    Set rng = ws.Range("Source[Source]") 

    If tbNewSourceName <> "" Then 

     If Application.WorksheetFunction.CountIf(rng, tbNewSourceName) > 0 Then 

      MsgBox "Source System already exists!" 

      lbSourceSystems.Enabled = True 
      bAddSource.Enabled = True 
      frameAddSource.Enabled = False 
      lblNewSourceName.Enabled = False 
      bFinishAdd.Enabled = False 
      bCancelAdd.Enabled = False 
      tbNewSourceName = "" 
      tbNewSourceName.Enabled = False 
      tbNewSourceName.BorderStyle = fmBorderStyleNone 

      Exit Sub 

     Else 

      lr = ws.Cells(Rows.Count, 1).End(xlUp).Row 

      ws.Cells(lr + 1, 1) = lr - 1 + 1000 
      ws.Cells(lr + 1, 2) = tbNewSourceName 

     End If 

    End If 

End Sub 

新しいソースを追加すると、オブジェクト 'range'が失敗した場合の '_Default'のメソッドがエラーになります。 Excelは、単にクラッシュし、私はデバッグすることはできませんが、私は、エラーが原因で発生し知っている:

 ws.Cells(lr + 1, 1) = lr - 1 + 1000 
     ws.Cells(lr + 1, 2) = tbNewSourceName 

しかし、私はエラーを受け取るか、またはどのようにそれを修正するよ理由を理解していません。何か案は?

答えて

1

明らかに、デフォルトの方法を使用するとどこかで間違っています。テキストボックスをセルに割り当てることはできません。だから明示してください。試してみてください:

ws.Cells(lr + 1, 1).Value = lr - 1 + 1000 
ws.Cells(lr + 1, 2).Value = tbNewSourceName.Text 
+0

ありがとうございました。これは私のエラーを修正しませんでした。しかし、私は問題の原因を突き止めました。私のUserForm内には、追加していたテーブルに結びついたListBoxがあります。これは、テーブルに追加する前にRowSourceを削除し、後でRowSourceを追加することで修正されました。 –

1

私は私がに追加しようとしていた同じテーブルが私のユーザーフォーム上のListBoxのための値集合ソースとしてリストされていることを発見しました。 RowSourceを削除して追加する前にコードを更新しました。

 lbSourceSystems.RowSource = "" 

     lr = ws.Cells(Rows.Count, 1).End(xlUp).Row 

     ws.Cells(lr + 1, 1).Value = lr - 1 + 1000 
     ws.Cells(lr + 1, 2).Value = tbNewSourceName.Text 

     lbSourceSystems.RowSource = ("'filename.xlsx'!SourceSystems") 
関連する問題