2016-04-22 3 views
0

В моем текущем проекте мне нужно изменить файл excel, который уже открыт. Это означает, что мне нужно увидеть изменения в файле excel всякий раз, когда я его модифицирую.VB.net управляет открытым файлом excel на лету

Поскольку открытый файл заблокирован и vb не может получить доступ к этому файлу, мое решение - открыть другой файл excel, изменить его содержимое и затем скопировать в исходный файл с помощью excel vba, так как excel vba можно использовать для копирования данных между открытием листы.

Вот код VB в другом моем Excel файл (называется TTHT.xlsm):

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 

прекрасно работает между моим 2 открытия файла первенствует (что 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

Прошу прощения, что я не могу поддержать ваш ответ, так как моя репутация по-прежнему очень мало: D Ваше решение с использованием GetObject очень просто, но оно отлично подходит для меня. спасибо. – HaPhan

Смежные вопросы