2016-04-22 59 views
0

在我當前的項目中,我需要修改已打開的excel文件。這意味着,我需要在修改它時查看excel文件中的更改。VB.net在線管理打開的excel文件

由於打開的文件被鎖定,vb無法訪問該文件,我的解決方案是打開另一個excel文件,修改其內容,然後使用excel vba複製到原始文件,因爲可以使用excel vba在打開牀單。

這裏是我的其他Excel文件(稱爲TTHT.xlsm)VB代碼:我的2口之間

Private Sub Worksheet_CHANGE(ByVal Target As Range) 
    Application.ScreenUpdating = False 
    If Sheet1.[B5].Value = "#" Then 
    Application.DisplayAlerts = False 
    With Workbooks.Open(ThisWorkbook.Path & "\PCN.xlsm") 
    With ThisWorkbook.Sheets("TTHT").[B5] 
     .Parent.Range("B4").Copy 
     Sheets("PCN").[B4].PasteSpecial 7 
     End With 
    End With 
Application.DisplayAlerts = True 
End If 
End Sub 

運行良好Excel文件(即TTHT一個和PCN.xlsm)。

現在我所需要做的就是將數據填入TTHT中,並通過我的代碼在B5中放入一個「#」。我認爲它會工作,但它不是..

Private Sub btnUpdate_Click(sender As System.Object, e As System.EventArgs) Handles btnUpdate.Click 
    Dim oExcel As Object 
    Dim oBook As Object 
    Dim oSheet As Object 
    oExcel = CreateObject("Excel.Application") 
    oExcel.DisplayAlerts = False 
    oBook = oExcel.Workbooks.Open(TTHTPath) 
    oSheet = oBook.Worksheets("TTHT") 
    oSheet.Range("B4").Value = txtValue_Needed.text 
    oSheet.Range("B5").Value = "#" 
    oBook.Save() 
    'System.Diagnostics.Process.Start(DuongDanPhieuCongNghe) 
    oSheet = Nothing 
    oBook.Close() 
    oBook = Nothing 
    oExcel.Quit() 
    oExcel = Nothing 
End Sub 

結果是,如果我打開PCN文件並單擊按鈕,它不會改變。如果我關閉PCN並單擊按鈕,它將會改變。 但是我需要在飛行中看到更改,而不是每次需要更新時關閉並重新打開。 有人可以告訴我一些燈光,至於如何,或者哪個功能...... vba或vb.net,我應該使用嗎?

回答

0

如果文件已經打開並且有焦點,那麼您可以嘗試在運行的對象表中查找它。

Dim ExcelApplication As Excel.Application  
ExcelApplication = GetObject("C:\Folder\ExcelWorkbook.xls") 

然後,您可以對嘗試避免中斷用戶時引用的實例進行修改。

getobject()函數很棒;這裏有一個鏈接。 https://msdn.microsoft.com/en-us/library/e9waz863(v=vs.71).aspx

+0

對不起,我不能upvote你的答案,因爲我的聲譽還很少:D 你使用GetObject的解決方案非常簡單,但它對我來說非常完美。 非常感謝。 – HaPhan