首页 > 解决方案 > 如何在不打开工作簿的情况下引用它

问题描述

我想打开一个新工作簿,并在里面运行一些宏,最后将结果粘贴到新工作簿中。

我尝试了不同的方法来引用其他工作簿路径,因为我需要里面的数据,但是,我不能正确地做到这一点。下面是我的编码:

Sub stepTen()
    Dim wbLinelist As String, wsLinelist As String

    wbLlinelist = "C:\Users\abc\Excel\trial\ppp.xlsx"
    wsLinelist = "Sheet1"

    Dim llStyle As Long
    Dim colllStyle, As String

    With Workbooks(wbLlinelist).Worksheets(wsLinelist)
        llStyle = Application.Match("fire", .Rows(1), 0)
        colllStyle = Split(Cells(1, llStyle).Address, "$")(1)
    End With
End Sub

标签: excelvba

解决方案


  1. Dim colllStyle, As String没有有效的语法删除逗号。

  2. 此处Cells(1, llStyle).Address未指定Cells对象应位于哪个工作簿和工作表中。.Cells(…)如果您希望它使用该语句,它应该以一个点开头,With或者您必须指定一个工作簿/工作表。

  3. 如果Application.Match("fire", .Rows(1), 0)不匹配,则返回错误。因此,您必须使用IsError 函数检查它是否匹配或出错:

    If Not IsError(llStyle) Then
        'split
    Else
        'error message
    End If
    
  4. 最后,您的主要问题是您不能"C:\Users\abc\Excel\trial\ppp.xlsx"Workbooks(wbLlinelist). 您必须先使用Workbooks.Open 方法打开工作簿,然后才能访问它。

    Dim MyOpenWb As Workbook
    Set MyOpenWb = Application.Workbooks.Open(FileName:=wbLlinelist) 'you might want to open it read only and set the parameter ReadOnly:=True
    
    With MyOpenWb.Worksheets(wsLinelist)
        'your code
    End With
    
  5. 最后不要忘记关闭工作簿:

    MyOpenWb.Close SaveChanges:=False
    

推荐阅读