2016-11-21 1 views
0

Может кто-нибудь объяснить, почему мой код не позволяет мне сохранять данные в Excel, если я не включу MsgBox?Данные не сохраняются в файле Excel, если сначала не появляется MsgBox

Вот мой код:

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 

Никакие данные не сохраняются в файле Excel, если я не положить, что MsgBox код в

+0

Кажется, что код работает быстрее, чем компьютер может открыть файл. Посмотрите на это: http://stackoverflow.com/questions/33817414/wait-for-big-files-to-open-in-excel – Andreas

+0

Спасибо за ответ, я пробовал писать Threading.Thread.Sleep (10000) это 10 секунд, но, похоже, проблема все еще там –

+0

Я пробовал коды, которые вы дали, но все равно это не работает. Тем не менее, это ответ MsgBox, но это так раздражает, когда вы видите msgbox в вызове окна. –

ответ

0

Поскольку Try не работает, фокус становится выгоняют поймать. , Это слишком сложно сделать так. См. Пример кода ниже. Можете ли вы обойти это?

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 
Смежные вопросы