尝试激活工作表时键入Mismatch 13错误

wan*_*dge 2 excel vba excel-vba type-mismatch

我读过的所有内容都表明我正确地表示了我的变量并调用了我要激活的工作表.最后一行是我得到类型不匹配的地方.那时CPIDws = CERN000006.我在某处读到,这个名字是字母和数字可能会有问题,但还没找到解决办法.

Sub Create_tab()

Dim newWS As Worksheet, CernWS As Worksheet, CPID As Variant
Dim Template As Worksheet, CPIDclm As Long, CERNdata As Range, CPIDcheck As Variant
Dim lngRow As Long, lngCol As Long, i As Integer, CPIDws As Worksheet

Set Template = Sheets("Template")
Set CernWS = Sheets("CERN ID's")
'Set lngRow = 1
'Set lngCol = 1


CernWS.Activate
Cells(1, 1).Select

Do
    ActiveCell.Offset(1, 0).Select
    Set CPID = ActiveCell

    'create a new sheet as a copy of the template
    Sheets("Template").Copy _
           after:=ActiveWorkbook.Sheets(ThisWorkbook.Sheets.Count)

    'Name the new sheet as the current CPID value from CERN ID's worksheet
    ActiveSheet.Name = CPID
    Set CPIDws = ActiveSheet

    'interigate AAA Data and update the new sheet with the data specific to the current cpid
    Sheets("AAA Data").Activate
    Cells(2, 3).Activate
    Set CPIDcheck = ActiveCell

    Do
        If CPID = CPIDcheck Then
            ActiveCell.Offset(0, -2).Select
            Set CERNdata = Range(Selection, Selection.End(xlToRight))
        End If

        Sheets(CPIDws).Activate
Run Code Online (Sandbox Code Playgroud)

Dav*_*ens 5

那时CPIDws = CERN000006.

不,不.:)

您已声明CPIDws As Worksheet但是您正在使用它作为Sheets方法的参数,该方法采用索引(整数)或名称(字符串)值.

因此,类型不匹配.

试试吧 CPIDws.Activate

或者,可以说你可以做多余的事情: Sheets(CPIDws.Name).Activate

也可能会有所帮助,因为通常建议不要依赖Active(单元格,工作表等)或Selection什么时候可以避免(几乎总是如此,除了某些情况,当你使用Selection输入法时)但通常情况下,您的宏应该永远不需要选择激活除用户输入的任何单元格以外的任何单元格.在您的情况下,由于您开始Cells(1,1)并完全通过代码控制迭代,因此根本不需要到SelectActivate任何东西.

  • 初学者好像用Activate和Selection。所有更改都可以在不激活工作表的情况下完成。直接引用对象是很好的编程。 (2认同)