Excel 尝试将数据移动到各种工作表时出现类型不匹配错误

Excel 尝试将数据移动到各种工作表时出现类型不匹配错误,excel,vba,Excel,Vba,我试图根据a列中的值将数据从名为Raw_data的工作表移动到其他各种工作表。在目标工作表中查找最后一行时,我发现类型不匹配。.worksheets().cells().end().row是否不返回数字?我注意到抛出“类型不匹配”错误的那一行。代码如下: Sub MoveDataToWorksheet() Dim i As Variant Dim pname As String Dim rng As Range Dim lastrow As Long Dim wslastrow As Long

我试图根据a列中的值将数据从名为Raw_data的工作表移动到其他各种工作表。在目标工作表中查找最后一行时,我发现类型不匹配。
.worksheets().cells().end().row
是否不返回数字?我注意到抛出“类型不匹配”错误的那一行。代码如下:

Sub MoveDataToWorksheet()

Dim i As Variant
Dim pname As String
Dim rng As Range
Dim lastrow As Long
Dim wslastrow As Long
Dim ws As Worksheet
Dim count As Long
Dim rawdata As Worksheet

Set rawdata = ThisWorkbook.Worksheets("Raw_Data")
lastrow = rawdata.Cells(Rows.count, "a").End(xlUp).Row
Set rng = rawdata.Range("a5:a" & lastrow)

For Each ws In ThisWorkbook.Worksheets
    If ws.Name = "Raw_Data" Or ws.Name = "Charts" Or _
    ws.Name = "Tables" Then
    'skips the sheets I want to keep
    Else
        wslastrow = ws.Cells(Rows.count, "a").End(xlUp).Row
        If wslastrow >= 5 Then
            ws.Range("a5:r" & wslastrow).Delete
        Else
            ws.Range("a5:r" & 6).Delete
        End If
    End If
Next ws

For Each i In rng
    pname = Cells(i.Row, "a").Value

    For Each ws In ThisWorkbook.Worksheets
        If pname = ws.Name Then
            wslastrow = ws.Cells(Rows.count, "a").End(xlUp).Row
            i.EntireRow.Copy
            ws.Cells(wslastrow, "a").PasteSpecial
        End If
    Next ws

        If pname = "South Carolina" Then
            i.EntireRow.Copy
            wslastrow = ThisWorkbook.Worksheets(SC).Cells(Rows.count, "a").End(xlUp).Row + 1
            ThisWorkbook.Worksheets(SC).Cells(wslastrow, "a").PasteSpecial
        End If

        If pname = "Saudi Arabia" Then
            i.EntireRow.Copy
            wslastrow = ThisWorkbook.Worksheets(KSA).Cells(Rows.count, "a").End(xlUp).Row + 1    'Error on this line but I imagine it will also be on the other wslastrow lines too.
            ThisWorkbook.Worksheets(KSA).Cells(wslastrow, "a").PasteSpecial
        End If

        If pname = "United Arab Emerites" Then
            i.EntireRow.Copy
            wslastrow = ThisWorkbook.Worksheets(UAE).Cells(Rows.count, "a").End(xlUp).Row + 1
            ThisWorkbook.Worksheets(UAE).Cells(wslastrow, "a").PasteSpecial
        End If
Next i

'code to fix formulas
End Sub

您需要替换这些:

  • SC
  • KSA
  • 阿联酋
以下内容(括号内):

  • “SC”
  • “KSA”
  • “阿联酋”

如果您确实有这些名称的工作表…

您需要替换这些:

  • SC
  • KSA
  • 阿联酋
以下内容(括号内):

  • “SC”
  • “KSA”
  • “阿联酋”

如果你真的有这些名字的工作表…

什么是
KSA
?,代表沙特阿拉伯王国。我只调用这三个,因为它们在原始数据中有空格。我用的还有很多其他的变量,第一个循环应该处理这些。是的,但现在它是一个未声明的变量。将
选项Explicit
添加到模块顶部。如果工作表的实际名称为
KSA
,那么名称会用引号括起来:
“KSA”
。肯定是KSA,您可能只需要在代码中的工作表名称周围加上
,假设您的工作表名为“KSA”等等。现在我觉得自己很笨。当然,他们需要报价。谢谢你们两位!!!什么是
KSA
?,代表沙特阿拉伯王国。我只调用这三个,因为它们在原始数据中有空格。我用的还有很多其他的变量,第一个循环应该处理这些。是的,但现在它是一个未声明的变量。将
选项Explicit
添加到模块顶部。如果工作表的实际名称为
KSA
,那么名称会用引号括起来:
“KSA”
。肯定是KSA,您可能只需要在代码中的工作表名称周围加上
,假设您的工作表名为“KSA”等等。现在我觉得自己很笨。当然,他们需要报价。谢谢你们两位!!!