公式有一个工作表名称,但尝试搜索像这样的书

时间:2019-05-09 06:38:31

标签: excel vba

我有一个仅包含一些定义和所有宏的主文件(我们将其称为main.xlsm)。宏之一在工作簿中进行更新并进行了大量更改(我们将其称为book_dest.xlsx)。

目标书(book_dest.xlsx)有两页:DownloadsDictionary。我必须在工作表Downloads的特定单元格(称为S5)中编写一个公式,该公式搜索工作表Dictionary中的特定单元格值。因此,如果我手动编写公式,则类似于:

=VLOOKUP(G5,Dictionary!$A:$D,4,0)

在单元格S5中。工作表Dictionary存在并且名称正确。当我手动编写时,一切工作都很好,但是当我使用宏(即

)编写时
sht_downloads.Range("S5").Formula = "=VLOOKUP(G5,Dictionary!$A:$D,4,0)"

(其中sht_downloads是称为Downloads的工作表(之前已定义))

出现一个弹出窗口,试图说Dictionary不存在,并让我搜索文件。但是Dictionary不是文件,而是工作表名称!我也尝试使用.FormulaR1C1,但是它不起作用。我也尝试记录该宏,但是它说的是我使用的相同公式。

我该怎么办?

编辑:

我有一个宏所在的文件(main.xlsm)。使用该宏,我需要在特定工作表(“下载”)的另一个工作簿(destination.xlsx)的单元格中粘贴1个公式。该公式只是“下载”工作表中的VLOOKUP,该表在名为“字典”的工作表中进行搜索。我的意思是,我需要做类似this的事情。

代码是这样的:

Sub main_dest()
    Dim book_dest as Workbook, book_main as Workbook
    Dim sht_downloads as Worksheet, sht_main as Worksheet, sht_dictionary as Worksheet

    Set book_main = ThisWorkbook
    Set book_dest = 'I call a function that opens the file if it's not already open and, if it's open, it just sets it. The function returns a Workbook

    Set sht_main = ThisWorkbook.Sheets("main")
    Set sht_downloads = book_dest.Sheets("Downloads")
    Set sht_dictionary = book_dest.Sheets("Dictionary")

    sht_downloads.Activate

    With sht_downloads
        .Range("S5").Formula = "=VLOOKUP(G5,Dictionary!$A:$D,4,0)"
    End With

End Sub

程序进入行sht_downloads.Range("S5").Formula = "=VLOOKUP(G5,Dictionary!$A:$D,4,0)"时,它会打开一个this one之类的更新值弹出窗口

我也尝试过

With book_dest
    sht_downloads.Range("S5").Formula = "=VLOOKUP(G5,Dictionary!$A:$D,4,0)"
End With

但是没有用。

1 个答案:

答案 0 :(得分:0)

我相信这一定是由于错误的工作簿和工作表定义造成的。

您说:

  

“ .. sht_downloads是名为下载..”的页面。

这是对工作簿book_dest.xlsx中工作表的引用。但是,您的宏从另一个名为main.xlsm的工作簿运行。因为您是从main.xlsm运行宏的,所以它将尝试在该确切的工作簿中查找引用的工作表,从而导致您描述的行为(在弹出窗口中询问文件)。

您必须正确声明工作簿,例如:

Sub Test()

Dim wkb As Excel.Workbook
Dim wks1 As Excel.Worksheet
Dim wks2 As Excel.Worksheet

Set wkb = Excel.Workbooks("book_dest.xlsx")
Set wks1 = wkb.Worksheets("Downloads")
Set wks2 = wkb.Worksheets("Dictionary")

With wks1
    .Range("S5").Formula = "=VLOOKUP(G5,Dictionary!$A:$D,4,0)"
End With

End Sub