运行时错误13类型不匹配 - 在工作簿中选择工作表名称

时间:2017-08-29 07:38:06

标签: excel vba excel-vba

我对在工作簿中选择工作表名称的类型不匹配错误感到震惊。所有工作表名称都存储在字符串数组中。我搜索谷歌和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

2 个答案:

答案 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