excel - VBA:使用连接字符串作为命令
问题描述
如何在 VBA 中使用连接字符串作为命令?以下代码导致以下错误:
运行时错误 424:需要对象
Sub run()
Dim pic As Picture
Dim wks As Worksheet
Set wks = Sheets("Counter Party Select")
wks.Unprotect
Dim company As String
Dim sRange As String
Dim concate As String
Dim quote As String
Dim s1 As String
company = wks.Range("B3")
'This vlookup pulls the correct range based on the value
sRange = Application.VLookup(company, Sheets("Company Logos").Range("D3:E1000"), 2)
s1 = "Company Logos"
quote = Chr$(34) 'The character number of a quatation mark
Concat = "Sheets(" & quote & s1 & quote & ")." & sRange
'This results in Concat = "Sheets("Company Logos").Range("A146:A148")"
Concat.Copy 'The error occurs on this line
wks.Select
wks.Range("D2").Select
ActiveSheet.Paste
wks.Range("A1").Select
End Sub
如何重写此代码,以便我可以使字符串成为对象并在.Copy
其上执行命令?
解决方案
您不能将连接的字符串用作完整的 VBA 语句。但是,您可以轻松地连接范围地址。
你不能马上这样做,因为你通过存储错误的数据使你的生活变得更加复杂:
'This results in Concat = "Sheets("Company Logos").Range("A146:A148")"
您不应该将文字文本存储在Range("A146:A148")
您的第二列中VLookup
。您应该只将地址本身存储A146:A148
为文本。
相应地修复工作表上的数据,它将按预期工作:
Dim Concat As Range
Set Concat = Sheets(s1).Range(sRange)
推荐阅读
- javascript - Javascript:循环中的所有承诺都没有得到解决,这使得执行挂起/停止
- docker - Windows 10 机器上 Docker Desktop 中的 Kubernetes 集群设置过程
- android - firestore get、set 方法的超时时间以及如何在 Android 中增加 get 和 set 方法的超时时间
- stripe-payments - 如果第一个不可用,则更改付款方式
- wordpress - 是否可以在网站 AMP 版本中包含作曲家脚本?
- c++ - 在函数中向量化循环
- encoding - SIM800接收短信编码问题
- java - Cacheable 注解中的同步参数如何工作?
- java - 我想从java中的整数arraylist中删除重复的子整数arraylist
- c - 不能通过c中的另一个字符串连接字符串