gpt4 book ai didi

Excel VBA : Passing a range name as a function argument

转载 作者:行者123 更新时间:2023-12-02 20:54:20 26 4
gpt4 key购买 nike

我正在编写一个宏来进行复杂的复制/粘贴练习。从概念上讲,这非常简单,但我陷入了困境。所有不同的数据 block 都用不同的命名范围来标识。我需要迭代这个名称列表,将每个名称作为参数传递给函数(实际上是一个子例程,但想法相同)。数据源位于一个工作簿中,而目标位于另一工作簿中。

这是我所拥有的(仅针对一个数据 block ):

Private Sub copyABU()
copyPaste(ThisWorkbook.Names("myRange1").RefersToRange)
copyPaste(ThisWorkbook.Names("myRange2").RefersToRange)
copyPaste(ThisWorkbook.Names("myRange3").RefersToRange)
//etc
End Sub

Private Sub copyPaste(thisRange As Range)
Windows(someworkbook).Range(thisRange).Copy
Range(thisRange).PasteSpecial Paste:=xlPasteValues
End Sub

不幸的是,我遇到了一个运行时错误。我认为存在类型不匹配,但我不确定这一点,也无法弄清楚我缺少什么。谁能看出为什么会失败? (我使用的是 Excel 2010)。

谢谢!

最佳答案

您的代码只需进行一些小调整即可工作。

首先,您需要在对 copyPaste 的调用前添加单词 Call。 (如果您不想,请参阅下面的注释。)

Private Sub copyABU()
Call copyPaste(ThisWorkbook.Names("myRange1").RefersToRange)
Call copyPaste(ThisWorkbook.Names("myRange2").RefersToRange)
Call copyPaste(ThisWorkbook.Names("myRange3").RefersToRange)
' //etc
End Sub

其次,在 thisRange 之后添加 .Address

Private Sub copyPaste(thisRange As Range)
Range(thisRange.Address).Copy
thisRange.PasteSpecial Paste:=xlPasteValues
End Sub

我不想费心创建 someworkbook 变量,所以我只是删除了该部分。

注意:如果您要调用带有括在括号中的参数列表的过程,则必须使用 Call 关键字。 https://stackoverflow.com/a/7715070/138938

如果您不想使用 Call 关键字,请省略括号:

copyPaste ThisWorkbook.Names("myRange1").RefersToRange

关于Excel VBA : Passing a range name as a function argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com