我有一个仅包含一些定义和所有宏的主文件(我们将其称为main.xlsm
)。宏之一在工作簿中进行更新并进行了大量更改(我们将其称为book_dest.xlsx
)。
目标书(book_dest.xlsx
)有两页:Downloads
和Dictionary
。我必须在工作表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
但是没有用。
答案 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