通过工作表值在Excel中命名工作表

时间:2016-03-11 01:32:13

标签: excel vba excel-vba

我已经尝试过这个代码来获取工作表中单元格的值:

lastRow = 0
lastRow = Cells(Rows.count, 1).End(xlUp).Row ' count the occupied cells in wb2

For i = 1 To lastRow - 1
    Sheets.Add
    Sheet1.Activate
    ActiveWorkbook.Sheets("Sheet" & i).Range("A" & i) = ActiveSheet.Name
Next i

但是,不幸的是它没有用。让我们说:

enter image description here

所以,在我的代码中,我已经计算了非空的单元格。然后,我根据计算的占用单元数添加了一个工作表。在循环时,我必须在A1中获取值并将其设置为Sheet的名称,依此类推。有什么帮助吗?

4 个答案:

答案 0 :(得分:0)

你应该可以在一行中添加一个命名工作表,我的行在你的循环中如下所示。 Sheets.Add允许您传入要调用它的名称的值。

Dim s as String
s = Range("A" & i).value
Sheets.Add s
Sheets(1).activate

答案 1 :(得分:0)

lastRow = 0
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' count the occupied cells in wb2

For i = 1 To lastRow
    Set s = Sheets.Add
    s.Name = Cells(i, 1).Value
Next i

答案 2 :(得分:0)

似乎Gunnar打败了我发布一个有效的答案:)但是为了补充一点解释,这里是我写的答案! :

从我所看到的有几个问题......

首先,你有

Sheet1.Activate

但是这总是只是尝试激活Sheet1,你肯定想循环浏览新页面? (否则总是试图重命名同一张纸......)

然后要重命名工作表,您需要

ActiveSheet.Name =
在左侧

(否则将尝试设置=左侧的任何内容作为工作表名称的值)

所以从这......

Sheet1.Activate
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' count the occupied cells

For i = 1 To lastRow   'don't need the -1 ;)
    Sheets.Add         'new sheet will automatically be the one active I think
    ActiveSheet.Name = Sheet1.Cells(i, 1).Value
Next i

希望有所帮助

答案 3 :(得分:0)

我会这样做:

Sub test()

Dim lastRow As Integer


lastRow = 0
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' count the occupied cells in wb2

For i = 1 To lastRow
    Sheets.Add
    ActiveSheet.Name = ActiveWorkbook.Sheets("Sheet1").Range("A" & i)
Next i

End Sub

我认为它不适合你的原因是因为你的循环一遍又一遍地选择相同的工作表并重命名工作表中的单元格而不是将工作表重命名为第一张工作表中的单元格。

编辑:删除了不必要的打印陈述,并考虑到玛丽莎关于循环中没有必要的-1的好处。