我对在工作簿中选择工作表名称的类型不匹配错误感到震惊。所有工作表名称都存储在字符串数组中。我搜索谷歌和stackoverflow但没有任何想法。这是代码的一部分
Dim Tran(5) As String
Dim celltext As String
For i = 1 To 5
celltxt = ActiveSheet.Range("K" & i).Text
Tran(i) = celltext
Next i
For i = 1 To 5
wb4.Sheets(Tran(i)).Select 'problem line
Set wb4sheet = wb4.Sheets(Tran(i))
Set r = wb4sheet.UsedRange.Find("Payout Date")
j = wb4sheet.UsedRange.Row
Set rn = Range(r.Address, Cells(j, r.Column))
Set b = wb4sheet.UsedRange.Find("Actual Paid in Principal")
Col1 = b.Column
答案 0 :(得分:1)
您可以将ActiveSheet.Range("K" & i).Text
的值分配给celltxt
,但在将其分配给Tran(i)
时,您会使用celltext
。这可能是通过在模块开头使用Option Explicit
来解决的。
答案 1 :(得分:1)
请参阅下方代码中的编辑。我删除了celltext,因为不需要这样的中间字符串。你也声明你的阵列错了。我把它从1开始,而不是0,然后运行到5,就像你的那样。
同样优秀的做法是让下一个for循环使用不同的字母,例如j。
Dim Tran(1 to 5) As String
Dim i as integer
Dim k as integer
For i = 1 To 5
Tran(i) = ActiveSheet.Range("K" & i).Text
Next i
For k = 1 To 5
wb4.Sheets(Tran(k)).Select 'problem line
Set wb4sheet = wb4.Sheets(sName)
Set r = wb4sheet.UsedRange.Find("Payout Date")
j = wb4sheet.UsedRange.Row
Set rn = Range(r.Address, Cells(j, r.Column))
Set b = wb4sheet.UsedRange.Find("Actual Paid in Principal")
Col1 = b.Column
next k