将Worksheet.Name设置为VBA中的cell.value时出现类型不匹配错误

时间:2012-12-04 21:39:22

标签: excel excel-vba vba

我编写了以下代码来创建工作表,其名称与Sheet1第一列中的名称相同 我在尝试在新工作表上设置名称时收到TypeError但不知道原因。有人可以帮忙吗?

Sub CreateWorkSheets()
    '
    ' Macro5 Macro
    '
    '
    Dim r As Range
    Set r = Sheets("Sheet1").Columns(1)
    For Each cell In r
        Dim aa As String

        Dim newSheet As Worksheet
        Set newSheet = Sheets.Add(After:=Sheets(Sheets.Count))
        strTemp = cell.Value
        newSheet.Name = strTemp // Error Here
    Next cell
End Sub

我也尝试了以下代码,即使strValue有效也不行。

Sub Test1()

Sheets("Sheet1").Select
Dim x As Integer
' Set numrows = number of rows of data.
NumRows = Range("A2", Range("A2").End(xlDown)).rows.Count
' Select cell a1.
Range("A2").Select

' Establish "For" loop to loop "numrows" number of times.
For x = 1 To NumRows
    Dim newSheet As Worksheet
    Set newSheet = Sheets.Add(After:=Sheets(Sheets.Count))
    Sheets("Sheet1").Range("B1").Value = "A" + Trim(Str(x))
    strValue = "A" + Trim(Str(x))

    newSheet.Name = Str(Sheets("Sheet1").Range(strValue).Value)
Next

End Sub

1 个答案:

答案 0 :(得分:1)

显然是因为你设置了:

Set r = Sheets("Sheet1").Columns(1)

它将单元格对象设置为$ A:$ A而不是$ A $ 1,就像您想象的那样。当我遇到“cell.value”行时,我把它放在了即时窗口中:

?cell.Address
$A:$A

您应该避免使用整个列来执行您尝试执行的操作,我强烈建议您将这些关键字添加到模块的顶部:

Option Explicit

这将更彻底地检查您的代码并帮助您避免不必要的错误。

要解决此问题,您可以获得所需的确切范围,我建议您声明每个变量,使其保持特定类型。

这样的事情:

Option Explicit

Sub CreateWorkSheets()
    Dim r As Range
    Dim sh As Worksheet
    Dim tempSh As Worksheet
    Dim cell As Range
    Dim strTemp As String

    Set sh = Sheets("Sheet1")
    Set r = sh.Range(sh.Cells(1, 1), sh.Cells(sh.Rows.Count, 1).End(xlUp))

    For Each cell In r
        Set tempSh = Sheets.Add(After:=Sheets(Sheets.Count))
        strTemp = cell.Value
        tempSh.Name = strTemp '// no more error
    Next cell
End Sub