我想在Excel中根据单元格值自动填充新工作表的名称。但是,它将不是来自一个单元格的值,而是来自行中的单元格列表的值。第一个工作表的名称将从第一个单元格值中获取,第二个工作表的名称将从第二个单元格值中获取,等等。我定义了这些单元格的最大范围--行中的20个,但并不是所有的单元格都有这些值。我希望只从这些单元格中创建新的工作表,在这些单元格中提供值。

我使用了以下代码:
Sub Namedsheetsadding()
Dim wsr As Worksheet, wso As Worksheet
Dim i As Long, xCount As Long
Dim SheetName As String
Set wsr = ThisWorkbook.Sheets("Vetro Area Map 1")
SheetName = ThisWorkbook.Sheets("Frontsheet").Range("D122:D142") 'including empty cells either, but
not creating new sheets for them
For i = 1 To ActiveWorkbook.Sheets.Count
If InStr(1, Sheets(i).name, "Vetro") > 0 Then xCount = xCount + 1
Next
wsr.Copy After:=ActiveWorkbook.Sheets(wsr.Index - 1 + xCount)
ActiveSheet.name = "Vetro Area Map " & SheetName & xCount + 1
End Sub根据这里的一些解决方案:
只适用于一个单元格
可能这就是为什么我会:
错误:类型错配
关于以下一行:
SheetName = ThisWorkbook.Sheets("Frontsheet").Range("D122:D142") 'including empty cells either, but not creating new sheets for them是否有机会根据单元格范围使用名称自动填充工作表?
发布于 2021-03-17 16:03:36
这应该做你想要的,它从范围得到一个数组,将它转换成一个一维数组,然后制作工作表。
Sub Namedsheetsadding()
Dim wsr As Worksheet, wso As Worksheet
Dim i As Long, xCount As Long
Dim SheetNames As Variant 'This needs to be variant
Dim sheetname As Variant
Dim newsheet As Worksheet
Dim lr As Long
Set wsr = ThisWorkbook.Sheets("Vetro Area Map 1")
lr = ThisWorkbook.Sheets("Frontsheet").Cells(Rows.Count, 4).End(xlUp).Row 'Get last row
SheetNames = ThisWorkbook.Sheets("Frontsheet").Range("D122:D" & lr) 'including empty cells either, but not creating new sheets for them
SheetNames = Application.Transpose(Application.Index(SheetNames, , 1)) 'Converts the 2d array into a 1d array
For i = 1 To ActiveWorkbook.Sheets.Count
If InStr(1, Sheets(i).Name, "Vetro") > 0 Then xCount = xCount + 1
Next
For Each sheetname In SheetNames
wsr.Copy After:=ActiveWorkbook.Sheets(wsr.Index - 1 + xCount)
Set newsheet = Sheets(wsr.Index + xCount)
newsheet.Name = "Vetro Area Map " & sheetname
xCount = xCount + 1 'Preserve order of sheets from range
Next
End Sub发布于 2021-03-17 15:54:18
在回答您的问题时,YES,您可以使工作表自动命名,但是您需要更好地处理规则。因为要将数组引用到单个字符串,所以会收到错误。我建议学习数组(保罗·凯利有一些这里的东西很棒),但是可能有其他方法来解决您的特定问题。
如果您比VBA更熟悉Excel,则应该尝试创建一个单元格公式规则,该规则填充一个单元格,该单元格应该是工作表的下一个名称。如果可以有一个始终具有正确名称的单元格,则始终可以让代码引用相同的值。
或者,您可能希望使用VBA偏移函数,这对于较新的程序员来说非常容易理解。
作为一个例子,见下文。
Sub makeNewWorksheets()
Dim wsr As Worksheet, wso As Worksheet
Dim i As Long, xCount As Long
Dim SheetName As String
Dim startTingCell As Range
Set startTingCell = Range("D122")
For i = 1 To ActiveWorkbook.Sheets.Count
If InStr(1, Sheets(i).Name, "Vetro") > 0 Then xCount = xCount + 1
Next
'Changes the cell being referenced by xCount
Set startTingCell = startTingCell.Offset(xCount, 0)
'helps explain what is happening. Delete after you've grasped what's up.
MsgBox "The cell that will be set to the name is " & startTingCell.Address & _
"with a value of " & startTingCell.Value
wsr.Copy After:=ActiveWorkbook.Sheets(wsr.Index - 1 + xCount)
ActiveSheet.Name = "Vetro Area Map " & startTingCell.Value
End Subhttps://stackoverflow.com/questions/66676014
复制相似问题