VB.net动态管理打开的excel文件

时间:2016-04-22 03:30:55

标签: vb.net excel-vba vba excel

在我当前的项目中,我需要修改已经打开的excel文件。这意味着,每当我修改它时,我都需要看到excel文件中的更改。

由于打开的文件被锁定而vb无法访问该文件,我的解决方案是打开另一个excel文件,修改其内容,然后使用excel vba复制到原始文件,因为excel vba可用于在打开工作表之间复制数据。

这是我的另一个excel文件(称为TTHT.xlsm)中的vb代码:

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个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的函数或函数,我应该使用吗?

1 个答案:

答案 0 :(得分: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