2017-02-12 9 views
0

Excelワークシートにテキストボックス値を送信するコードを作成します。私がボタンを押すたびに、テキストボックス値が前の値に置き換えられます。私がすでに行ったことは、この値をExcelワークシートに送信するだけですが、新しいクリックごとに新しいWorkbookの開きがあります。私は何を変えるべきですか?ここExcelワークシートがボタンのテキストボックスからリフレッシュされます。Visual Basicをクリックします。

コード

Imports System.Data.OleDb 
    Imports Excel = Microsoft.Office.Interop.Excel 

Public Class Form1 
Dim objApp As Excel.Application 
Dim objBook As Excel._Workbook 
Dim objBooks As Excel.Workbooks 
Dim objSheets As Excel.Sheets 
Dim objSheet As Excel._Worksheet 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    ' Create a new instance of Excel and start a new workbook. 
    objApp = New Excel.Application() 
    objBooks = objApp.Workbooks 
    objBook = objBooks.Add 
    objSheets = objBook.Worksheets 
    objSheet = objSheets(1) 

    objSheet.Range("A1").Value = TextBox1.Text 

    'Return control of Excel to the user. 
    objApp.Visible = True 
    objApp.UserControl = True 

    'Clean up a little. 
    objSheet = Nothing 
    objSheets = Nothing 
    objBooks = Nothing 
End Sub 
End Class 
+0

は、Excelを再宣言しないでくださいご回答ありがとうございましたサブルーチンのオブジェクトそれらはクラス(フォーム)レベルの変数でなければなりません。いずれか、それを追加するのではなく、正しい本を選択する。 –

答えて

0

objApp = New Excel.Application() 

次のように私は簡素化したい:

Public Class Form1 
    Dim objApp As Excel.Application 
    Dim objCell As Excel.Range  

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click  

     If objCell Is Nothing Then 
      objApp = New Excel.Application() 
      objCell = objApp.Workbooks.Add.Worksheets(1).Range("A1") 
     End If 

     objCell.Value = TextBox1.Text 

     'Return control of Excel to the user. 
     objApp.Visible = True 
     objApp.UserControl = True  

    End Sub 
End Class 

このコードは、Excel

1

変更はこれです:

If objApp Is Nothing Then 
    objApp = New Excel.Application() 
End If 
+0

バロウー大変ありがとう!実際にあなたのアドバイスは仕事をしました。 –

+0

これは嬉しかったです:) – Baro

+0

これだけの変更は、新しいブックをまだ追加している「objBook = objBooks.Add」が残っているので、この唯一の変更が実際にこのトリックを行うことができて奇妙に見えます... – user3598756

0

を閉じるユーザーとして、このような状況に対処するために、より堅牢ななされるべきである。この最後にやった仕事

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

    If objApp Is Nothing Then 
     objApp = New Excel.Application() 
    End If 
    If objBooks Is Nothing Then 
     objBooks = objApp.Workbooks 
    End If 
    If objBook Is Nothing Then 
     objBook = objBooks.Add 
    End If 
    If objSheets Is Nothing Then 
     objSheets = objBook.Worksheets 
    End If 
    If objSheet Is Nothing Then 
     objSheet = objSheets(1) 
    End If 


    objSheet.Range("A1").Value = TextBox1.Text 

    'Return control of Excel to the user. 
    objApp.Visible = True 
    objApp.UserControl = True 

    'Clean up a little. 
    objSheet = Nothing 
    objSheets = Nothing 
    objBooks = Nothing 
End Sub 

+1

あなたは1つの小切手が必要です。さらに、チェックされたオブジェクトを常にNothingに設定しているので、第2、第4、第5は無用です...最短の必要なコードについては私の答えを見てください。そして、ユーザーがExcelを閉じるべきであるという警告が残っています... – user3598756

+0

フォームロードイベントまたは新しい関数を使用してこれらのExcelオブジェクトを初期化し、フォーム終了イベントを使用して、それ以上のことを行うと仮定した場合のクリーンアップボタンをクリックします。 –

関連する問題