注册 登录
编程论坛 VB6论坛

获取excel窗口求助

zwei517 发布于 2023-09-18 15:06, 931 次点击
打开了几个excel,需要用VB的程序,对选定的工作簿中工作表的数据进行校对。
在遍历excel窗口时地直没进展,其中MsgBox xlApp.Workbooks.name出错,MsgBox  ws.name没反应 希望大家帮忙看看,谢谢。
sub a()
Dim xlApp As Excel.Application  
Dim xlBook As Excel.Workbook  
Dim xlsheet As Excel.Worksheet  
Dim wb As Workbook  
Dim ws As Worksheet  
Dim i As Integer
                        
Set xlApp = New Excel.Application
 
'遍历所有打开的工作簿
For i = 1 To xlApp.Workbooks.Count
    '获取工作簿对象
    Set wb = xlApp.Workbooks(i)
MsgBox xlApp.Workbooks.name  
    '遍历所有工作表
    For Each ws In wb.Worksheets
MsgBox  ws.name
    Next ws
Next i

'释放对象
Set ws = Nothing
Set wb = Nothing
Set xlApp = Nothing
end sub
2 回复
#2
风吹过b2023-09-19 08:51
这句
Set xlApp = New Excel.Application
新建一个 Excel 进程,新建的进程不会打开任何工作薄,不会影响和操作现已打开的excel及其中的任何工作簿。
所以,不能新建,必须引用。

    Set wb = xlApp.Workbooks(i)
MsgBox xlApp.Workbooks.name   这句肯定出错啊,
你上面一句,表示这个 Workbooks 对象,相当于一个数组结构,而你现在显示这个对象不存在的属性,自然出错。


以前写一个代码,你参考一下吧。
程序代码:
'-------刷新工作簿列表-----------
On Error Resume Next
Dim i As Long

    '引用 已打开的 Excel 对象
   
    If Option1.Value Then
        Set excel1 = GetObject(, "Excel.Application")
        '是否有错误
        If Err.Number <> 0 Then
            '错误,提示,结束过程
            MsgBox "没有运行 Excel。", vbCritical, "错误"
            Exit Sub
        End If
    Else
        Set excel1 = GetObject(, "et.Application")
        '是否有错误
        If Err.Number <> 0 Then
            '错误,提示,结束过程
            MsgBox "没有运行 WPS 表格(Et)。", vbCritical, "错误"
            Exit Sub
        End If
        
    End If
    List1.Clear
        
    '导入所有的工作簿
    With excel1
        For i = 1 To .workbooks.Count
            List1.AddItem .workbooks(i).Name
        Next i
    End With


[此贴子已经被作者于2023-9-19 08:53编辑过]

#3
zwei5172023-09-20 11:03
回复 2楼 风吹过b
非常感谢,解决了一直以来的疑惑。
1