我正在寻找帮助,试图弄清楚如何打开特定的工作簿。我的Windows窗体上有一个按钮,按下后,它将打开Excel并转到特定的工作表。但是,我刚遇到用户可能已经打开特定工作簿的问题,因此我不想创建新的Excel实例并再次打开工作簿,而是要检查该工作簿是否已打开,如果是,则转到到选定的工作表。
这是我到目前为止的代码:
Private Sub btnMinSummaryWorksheet_Click(sender As Object, e As EventArgs) Handles btnMinSummaryWorksheet.Click
'This procedure runs when the btnOpenSummaryWorksheet button is clicked. Calls the
'Sub procedure opens the Summary Worksheet Dashboard
Dim xlApp As New Excel.Application
xlApp.Visible = True
Dim xlBook As Excel.Workbook
xlBook = xlApp.Workbooks.Open("F:\Test Environment\Compensation Workbook\Compensation Workbook\bin\Debug\2011.1004.Compensation Template.xlsx")
Dim xlSheet As Excel.Worksheet
xlSheet = CType(xlBook.Sheets("SummaryWorksheet"), Worksheet)
xlSheet.Activate()
Me.Close()
End Sub
答案 0 :(得分:1)
尝试创建一个函数来检查工作簿是否已经打开,如下所示:
Private Shared Function IsWorkbookAlreadyOpen(app As Excel.Application, workbookName As String) As Boolean
Dim isAlreadyOpen As Boolean = True
Try
app.Workbooks.get_Item(workbookName)
Catch theException As Exception
isAlreadyOpen = False
End Try
Return isAlreadyOpen
End Function
然后你可以在你的代码中使用它:
Private Sub btnMinSummaryWorksheet_Click(sender As Object, e As EventArgs) Handles btnMinSummaryWorksheet.Click
'This procedure runs when the btnOpenSummaryWorksheet button is clicked. Calls the
'Sub procedure opens the Summary Worksheet Dashboard
Dim xlApp As New Excel.Application
xlApp.Visible = True
Dim xlBook As Excel.Workbook
Dim workbookName = "F:\Test Environment\Compensation Workbook\Compensation Workbook\bin\Debug\2011.1004.Compensation Template.xlsx"
If IsWorkbookAlreadyOpen(xlApp, workbookName) Then
xlBook = xlApp.Workbooks.get_Item(workbookName)
Else
xlBook = xlApp.Workbooks.Open(workbookName)
End If
Dim xlSheet As Excel.Worksheet
xlSheet = CType(xlBook.Sheets("SummaryWorksheet"), Worksheet)
xlSheet.Activate()
Me.Close()
End Sub
答案 1 :(得分:1)
对于2018年仍有类似问题的人:D。
Imports System.IO
Function FileOpenTest(ByVal WorkBookName As String) As Boolean
Dim fs As FileStream
FileOpenTest= False
Try
fs = System.IO.File.OpenWrite(WorkBookName)
fs.Close()
Catch ex As Exception
FileOpenTest= True
End Try
Return FileOpenTest
End Function
答案 2 :(得分:0)
导入Microsoft.Office.Interop 公共类集合
Private moExcelApplication As Excel.Application
Private moExcelWorkBook As Excel.Workbook
Private moExcelWorkBook1 As Excel.Workbook
Private moWorkBooks As Excel.Workbooks
Private moActivesheet As Excel.Worksheet
Private moCurrentRange As Excel.Range
Public Function CloseExcelFile()
Dim bprocess As Boolean
Try
bprocess = False
If (Not moExcelWorkBook Is Nothing) Then
If (Not moExcelApplication Is Nothing) Then
moExcelApplication.DisplayAlerts = False
bprocess = True
End If
End If
If (Not moExcelApplication Is Nothing) Then
moExcelApplication.DisplayAlerts = True
bprocess = True
End If
Catch ex As Exception
Finally
recordclear(moCurrentRange)
moExcelWorkBook.Close(False)
recordclear(moExcelWorkBook)
'moExcelApplication.Quit()
recordclear(moExcelApplication)
'System.Threading.Thread.Sleep(500)
'MessageBox.Show("Excel Closed")
CloseExcelFile = bprocess
End Try
End Function
Private Sub recordclear(ByVal o As Object)
Try
Do Until _
System.Runtime.InteropServices.Marshal.ReleaseComObject(o) <= 0
Loop
Catch
Finally
o = Nothing
End Try
End Sub
Public Function openExcel()
Dim bprocess As Boolean
Try
moExcelApplication = New Excel.Application
moWorkBooks = moExcelApplication.Workbooks
If Not (moExcelApplication Is Nothing) Then
If Not moWorkBooks Is Nothing Then
moExcelWorkBook = moWorkBooks.Open("C:\Documents and Settings\anand\Desktop\amit2.xlsx")
moExcelApplication.Visible = True
End If
End If
Catch ex As Exception
End Try
Return bprocess
End Function
Public Function isOpen()
On Error Resume Next
moExcelWorkBook.Open("C:\Documents and Settings\anand\Desktop\amit2.xlsx")
If Not moExcelWorkBook Is Nothing Then
moExcelWorkBook.Nothing() = False
On Error GoTo -1
If moExcelWorkBook.ConnectionsDisabled = True Then
Return 1
Else
Return 0
End If
Else 'It is open
moExcelWorkBook = Nothing
On Error GoTo 0
Return 1
End If
End Function
结束班
答案 3 :(得分:0)
jst检查一下这项工作是否正常
导入Microsoft.Office.Interop
Public Class Form1 私有moExcelApplication作为Excel.Application 私人moExcelWorkBook作为Excel.Workbook 私人moWorkBooks作为Excel.Workbooks 私人moActivesheet作为Excel.Worksheet 私有moWorkSheets为Excel.Sheets 私有moCurrentRange为Excel.Range
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ShowDirect.Click
System.Diagnostics.Process.Start("C:\Program Files\Microsoft Office\Office12\EXCEL.EXE")
End Sub
Private Sub Showobj_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Showobj.Click
Dim sCount As String
Try
Cancel.Enabled = True
If isopen() = 1 Then
Call OpenExcelFile()
moActivesheet = moExcelWorkBook.ActiveSheet
moCurrentRange = moActivesheet.Range("a1", "e5")
For i As Integer = 1 To 5
For j As Integer = 1 To 5
sCount = i.ToString + j.ToString
moActivesheet.Cells(i, j).value = sCount
Next
Next
Else
MsgBox("already open")
End If
Catch ex As Exception
End Try
End Sub
Private Declare Auto Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hwnd As IntPtr, _
ByRef lpdwProcessId As Integer) As Integer
Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click
'Dim oclass As Collection
'Try
' Showobj.Enabled = True
' oclass = New Collection
' oclass.moExcelApplication = moExcelApplication
' oclass.moExcelWorkBook = moExcelWorkBook
' oclass.moCurrentRange = moCurrentRange
' oclass.CloseExcelFile()
'Catch ex As Exception
'End Try
Try
If (Not moExcelWorkBook Is Nothing) Then
If (Not moExcelApplication Is Nothing) Then
moExcelApplication.DisplayAlerts = False
moExcelWorkBook.Nothing() = True
End If
End If
If (Not moExcelApplication Is Nothing) Then
moExcelApplication.DisplayAlerts = True
moExcelWorkBook.Nothing() = True
End If
Catch ex As Exception
Finally
If moExcelApplication.Visible = True Then
moExcelWorkBook.Close(False)
Else
MsgBox("Excel already closed")
End If
recordclear(moCurrentRange)
recordclear(moActivesheet)
recordclear(moWorkSheets)
recordclear(moExcelWorkBook)
recordclear(moWorkBooks)
moExcelApplication.Quit()
recordclear(moExcelApplication)
System.Threading.Thread.Sleep(500)
MessageBox.Show("Excel Closed")
Cancel.Enabled = False
End Try
End Sub
Private Sub OpenExcelFile()
Try
moExcelApplication = New Excel.Application
moWorkBooks = moExcelApplication.Workbooks
If Not (moExcelApplication Is Nothing) Then
If Not moWorkBooks Is Nothing Then
moExcelWorkBook = moWorkBooks.Open("C:\Documents and Settings\anand\Desktop\amit2.xlsx")
moExcelApplication.Visible = True
End If
End If
Catch ex As Exception
End Try
End Sub
Function isopen()
On Error Resume Next
moExcelWorkBook.Open("C:\Documents and Settings\anand\Desktop\amit2.xlsx")
If Not moExcelWorkBook Is Nothing Then
moExcelWorkBook.Nothing() = False
On Error GoTo -1
If moExcelWorkBook.ConnectionsDisabled = True Then
Return 1
Else
Return 0
End If
Else 'It is open
moExcelWorkBook = Nothing
On Error GoTo 0
Return 1
End If
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Showobj.Enabled = True
Cancel.Enabled = False
End Sub
Private Sub recordclear(ByVal o As Object)
Try
Do Until _
System.Runtime.InteropServices.Marshal.ReleaseComObject(o) <= 0
Loop
Catch
Finally
o = Nothing
End Try
End Sub
结束班