В моем текущем проекте мне нужно изменить файл 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, я должен использовать?
Прошу прощения, что я не могу поддержать ваш ответ, так как моя репутация по-прежнему очень мало: D Ваше решение с использованием GetObject очень просто, но оно отлично подходит для меня. спасибо. – HaPhan