1

我编写了以下代码来创建名称与 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
4

1 回答 1

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
于 2012-12-04T22:09:15.393 回答