我是Stackoverflow平台(尤其是VBA)的新手,只是迈出了第一步。 所以我有以下问题: 我的工作簿中有几张纸,我需要复制这些纸的名称,但要将这些名称复制到的一张纸的名称除外。名称也应复制到特定位置。 到目前为止,我想到了这个:
Sub passport_combining()
Dim i As Worksheet
For Each i In ActiveWorkbook
If i.Name <> "Sheetname_I_dont_need_to_copy_to" Then
Range("G").Value = Range("G" & Rows.Count).End(xlUp).Offset(1).Select.i.Name
ActiveSheet.paste
End If
Next i
End Sub
代码需要遍历除我要复制的工作表之外的所有工作表,从这些工作表中获取名称并将其复制到最后工作表的G列的lastrow + 1中 我从技术上理解提出解决方案需要做什么,但我确实陷入了一个问题!我什至尝试在复制工作表名称的地方记录一个宏,但不幸的是,所有VBA给我的都是一堆Select选项,建议避免使用。 任何意见将是有益的! 谢谢!
答案 0 :(得分:2)
这里是一种选择:
With ThisWorkbook.Sheets("Summary")
Set nextEntry = .Range("G4")
For Each wsheet In ThisWorkbook.Sheets
If wsheet.Name <> "Summary" Then
nextEntry.Value = wsheet.Name
Set nextEntry = nextEntry.Offset(1, 0)
End If
Next wsheet
End With
“摘要”是要在其上使用所有名称的工作表的名称,而.Range("G4")
是数据的起始位置
更新: 下面的代码将在插入工作表名称之前检查“ G列”中的值
参考:https://stackoverflow.com/a/12648557/9167318
With ThisWorkbook.Sheets("Summary")
For Each wsheet In ThisWorkbook.Sheets
If wsheet.Name <> "Summary" Then
Set nextEntry = .Cells(.Rows.Count, "G").End(xlUp).Offset(1, 0)
If IsError(Application.Match(wsheet.Name, .Range("G:G"), 0)) Then nextEntry.Value = wsheet.Name
End If
Next wsheet
End With
答案 1 :(得分:0)
简单尝试以下操作
Sub AllSheets()
Dim sht As Worksheet
Dim i As Long
i = 1
For Each sht In ThisWorkbook.Worksheets
If sht.Name <> ActiveSheet.Name Then
Cells(i, "G") = sht.Name
i = i + 1
End If
Next sht
End Sub
然后根据需要调整代码。
答案 2 :(得分:0)
下面的代码导入工作表1列A中的所有工作表名称。
Option Explicit
Sub Get_Sheets_Name()
Dim ws As Worksheet
Dim Lastrow As Long
'Loop all sheets in this workbook
For Each ws In ThisWorkbook.Worksheets
With ThisWorkbook.Worksheets("Sheet1")
'Find of Sheet1 & Column A lastrow
Lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
'Import Sheet name in Sheet 1 & Column A
.Cells(Lastrow + 1, 1).Value = ws.Name
End With
Next
End Sub