2016-11-21 3 views
0

Kann jemand erklären, warum mein Code mich Daten in Excel nicht speichern lässt, außer ich ein MsgBox einschließe?Daten werden nicht in einer Excel-Datei gespeichert, es sei denn, eine MsgBox erscheint zuerst

ist hier mein Code:

Sub createreport() 
     Try 
      Dim XA As New Excel.Application 
      Dim wb As Excel.Workbook 
      Dim ws As Excel.Worksheet 
      wb = XA.Workbooks.Open(dataDirectory + "employee_info\dtr_emp.xlsx", False, False, True) 
      ws = wb.Worksheets("Sheet1") 

      MsgBox("Test") '<---- THIS IS THE MSGBOX I WAS TALKING ABOUT 

      For i As Integer = 0 To Me.EmployeeInfoDataGridView.Rows.Count - 1 
       Dim DGV As DataGridViewRow = Me.EmployeeInfoDataGridView.Rows(i) 
       ws.Cells(7 + i, 1) = DGV.Cells(0).Value 
       ws.Cells(7 + i, 2) = DGV.Cells(1).Value 
       ws.Cells(7 + i, 3) = DGV.Cells(2).Value 
       ws.Cells(7 + i, 4) = DGV.Cells(3).Value 
       ws.Cells(7 + i, 5) = DGV.Cells(4).Value 
       ws.Cells(7 + i, 6) = DGV.Cells(5).Value 
       ws.Cells(7 + i, 7) = DGV.Cells(6).Value 
       ws.Cells(7 + i, 8) = DGV.Cells(7).Value 
       ws.Cells(7 + i, 9) = DGV.Cells(8).Value 
       ws.Cells(7 + i, 10) = DGV.Cells(9).Value 
       ws.Cells(7 + i, 11) = DGV.Cells(10).Value 
       ws.Cells(7 + i, 12) = DGV.Cells(12).Value 
       ws.Cells(7 + i, 13) = DGV.Cells(14).Value 
      Next 
      XA.Visible = False 

      wb.SaveAs(dataDirectory + "employee_info\temp_" + Form1.lbl_date.Text + ".xlsx") 
      wb.Close(True) 
      XA.Quit() 
      wb = Nothing : ws = Nothing : XA = Nothing 
      Try 
       My.Computer.FileSystem.CopyFile("employee_info\temp_" + Form1.lbl_date.Text + ".xlsx", "employee_info\employee_infos.xlsx", True) 
       My.Computer.FileSystem.DeleteFile("employee_info\temp_" + Form1.lbl_date.Text + ".xlsx", FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.DeletePermanently, FileIO.UICancelOption.DoNothing) 
      Catch ex As Exception 
       MsgBox(ex.Message) 
      End Try 
     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 
     exit_excel_process.Show() 
    End Sub 

Keine Daten in Excel-Datei gespeichert werden, wenn ich in dem MsgBox Code setzte

+0

Es scheint der Code läuft schneller als der Computer die Datei öffnen können. Schau dir das mal an: http://stackoverflow.com/questions/33817414/wait-for-big-files-to-open-in-excel – Andreas

+0

Danke für die Antwort, ich habe versucht Threading.Thread.Sleep (10000) zu schreiben das sind 10 Sekunden aber es scheint das Problem ist immer noch da –

+0

Ich habe versucht die Codes, die Sie gegeben haben, aber immer noch es funktioniert nicht. Immer noch, dass MsgBox die Antwort, aber es ist so nervig, eine msgbox in einem Fenster Anruf –

Antwort

0

Da der Versuch nicht funktioniert, wird der Fokus aus Catch gekickt. . Dies scheint zu kompliziert zu sein. Bitte beachten Sie das Codebeispiel unten. Kannst du das umgehen?

Imports System.Data 
Imports System.Data.SqlClient 
Imports Excel = Microsoft.Office.Interop.Excel 
Public Class Form1 
    Private Sub Button1_Click(ByVal sender As System.Object, _ 
     ByVal e As System.EventArgs) Handles Button1.Click 

     Dim cnn As SqlConnection 
     Dim connectionString As String 
     Dim sql As String 

     connectionString = "data source=servername;" & _ 
     "initial catalog=databasename;user id=username;password=password;" 
     cnn = New SqlConnection(connectionString) 
     cnn.Open() 
     sql = "SELECT * FROM Product" 
     Dim dscmd As New SqlDataAdapter(sql, cnn) 
     Dim ds As New DataSet 
     dscmd.Fill(ds) 
     DataGridView1.DataSource = ds.Tables(0) 
     cnn.Close() 
    End Sub 

    Private Sub Button2_Click(ByVal sender As System.Object, _ 
    ByVal e As System.EventArgs) Handles Button2.Click 


     Dim xlApp As Excel.Application 
     Dim xlWorkBook As Excel.Workbook 
     Dim xlWorkSheet As Excel.Worksheet 
     Dim misValue As Object = System.Reflection.Missing.Value 
     Dim i As Integer 
     Dim j As Integer 

     xlApp = New Excel.ApplicationClass 
     xlWorkBook = xlApp.Workbooks.Add(misValue) 
     xlWorkSheet = xlWorkBook.Sheets("sheet1") 

     For i = 0 To DataGridView1.RowCount - 2 
      For j = 0 To DataGridView1.ColumnCount - 1 
       xlWorkSheet.Cells(i + 1, j + 1) = _ 
        DataGridView1(j, i).Value.ToString() 
      Next 
     Next 

     xlWorkSheet.SaveAs("C:\vbexcel.xlsx") 
     xlWorkBook.Close() 
     xlApp.Quit() 

     releaseObject(xlApp) 
     releaseObject(xlWorkBook) 
     releaseObject(xlWorkSheet) 

     MsgBox("You can find the file C:\vbexcel.xlsx") 
    End Sub 

    Private Sub releaseObject(ByVal obj As Object) 
     Try 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) 
      obj = Nothing 
     Catch ex As Exception 
      obj = Nothing 
     Finally 
      GC.Collect() 
     End Try 
    End Sub 
End Class 
Verwandte Themen