excel - 调用另一个子时 ByRef 类型不匹配
问题描述
我试图通过使用 for 循环传递 i 值来在 VBA 中有一个子程序来调用另一个子程序。问题是当您运行 forLoop() 子程序时,出现错误 ByRef 类型不匹配。我只是在尝试这个示例方法,看看它是否有效,以便我可以放入更大的宏中。
我尝试添加 ByVal 方法,但错误仍然存在。有人请帮助我。
forLoop 子
Public Sub forLoop()
For i = 1 To 3
Call Fetch_data(i)
Next i
End Sub
Fetch_data() 子
Sub Fetch_data(num As Integer)
Dim data As String
Dim myCellValue As range
Dim myCellValue1 As range
Dim sht As String
Set sht = "mySheet" & num
Set myCellValue = sht.range("J6")
Set myCellValue1 = sht.range("J8")
myCellValue1.Value = myCellValue.Value
End Sub
解决方案
问题是
Sub Fetch_data(num As Integer)
是相同的
Sub Fetch_data(ByRef num As Integer)
所以通过参考Call Fetch_data(i)
给出。i
但是由于在forLoop()
变量i
中没有声明它是Variant
默认Integer
的,因此类型不匹配。确保正确使用Option Explicit
和声明所有变量:
Public Sub forLoop()
Dim i As Integer
For i = 1 To 3
Fetch_data i
Next i
End Sub
您也可以制作参数ByVal
,因为不需要它ByRef
(否则您的子Fetch_data
可能会弄乱循环计数器forLoop
:
Sub Fetch_data(ByVal num As Integer)
Dim data As String
Dim myCellValue As range
Dim myCellValue1 As range
Dim sht As Worksheet
Set sht = ThisWorkbook.Worksheets("mySheet" & num)
Set myCellValue = sht.range("J6")
Set myCellValue1 = sht.range("J8")
myCellValue1.Value = myCellValue.Value
End Sub
推荐阅读
- spring-boot - Kubernetes、Spring Boot 和微服务
- mysql - Microsoft Azure - 无法从 VM 外部访问在 Docker 上运行的 MySQL 实例
- python - 许多列表的总和
- angular - Angular 6 包含谷歌闭包库
- docker - 网站在独立容器中可用,而不是在群中
- python - 在 Mac 上从终端打开 Jupyter Notebook 时出错
- django - 除了超级用户,如何使字段在 django admin 中只读?
- python - 如何找到:每列中的第一个非 NaN 值是否是 DataFrame 中该列的最大值?
- angular - Angular 6 循环依赖逻辑解决方案
- jenkins - 在启动时为 Jenkins 覆盖 config.xml