在我当前的项目中,我需要修改已经打开的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的函数或函数,我应该使用吗?
答案 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