我有一些代码可以自动格式化和复制模板,并创建副本以与相应的样本一起使用,例如单元格H5 = Batch1,它创建一个工作表Batch1 .. Cell I5 =“Magenta”,它创建一个名为“Magenta”的工作表。
我现在想编写一个宏,它将一系列单元格中的数据复制到这些创建的工作表中。但是尚未创建工作表。
有没有办法使用单元格引用指向数据存储位置?
e.g。工作表将命名为单元格H5中的任何内容。因此,使用单元格引用指向工作表而不是使用绝对工作表名称?
感谢您的帮助!
Sub CopyInfoSheetandInsert()
Dim rcell As Range
Dim Background As Worksheet
Set Background = Sheets("Formulation")
Application.ScreenUpdating = False
Sheets("Template").Visible = True
For Each rcell In Range("D7:W7")
If rcell.Value <> "" And SheetExists(rcell.Value) = False Then
Sheets("Template").Copy Before:=Sheets("COSHH")
Sheets(Sheets("COSHH").Index - 1).Name = rcell.Value
End If
Next rcell
Sheets("Template").Visible = False
Application.ScreenUpdating = True
End Sub
Function SheetExists(SheetName) As Boolean
Dim sht As Worksheet
'Assume Failure
SheetExists = False
For Each sht In ActiveWorkbook.Sheets
If sht.Name = SheetName Then
'Success
SheetExists = True
Exit Function
End If
Next sht
End Function
答案 0 :(得分:1)
Dim newSheetName As String
newSheetName = ActiveSheet.Range("H5").Value
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = newSheetName
Worksheets(newSheetName).Range("H6").Value = "Text for new sheet"
上面的代码从变量newSheetName中的H5中选择sheetname。稍后在创建工作表时,它会将文本放在单元格H6的新工作表中
答案 1 :(得分:1)
当您调用Sheet.Copy
方法时(假设您传递Before
After
个ActiveSheet
参数,则活动工作表将成为新复制的工作表。因此,您只需使用Name
对象即可访问If rcell.Value <> "" And SheetExists(rcell.Value) = False Then
Sheets("Template").Copy Before:=Sheets("COSHH")
ActiveSheet.Name = rcell.Value
End If
属性。
请参阅下面的调整后代码:
Dim sheetName as String
sheetName = Worksheets("Data Entry").Range("D7").Value
...
Worksheets(sheetName)... 'this is the reference to your sheet.
<强>更新强>
我不确定我是否完全理解您的要求,但这可能有所帮助:
如果工作表名称只出现一次,那么当触发更新时,您的代码可能是:
Worksheet_Change
如果每次用户更改D7的值时名称都会更改,则需要在数据输入工作表的Option Explicit
Private mCurSheet As Worksheet
Public Sub FirstCreationOfSheet()
Set mCurSheet = Worksheets("whatever the name is")
End Sub
中添加例程。因此,您首先在模块级别引用工作表,如下所示:
Sub
然后在模块中添加Public Sub ChangeSheetName(newName As String)
mCurSheet.Name = newName
End Sub
更改名称:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cell As Range
For Each cell In Target.Cells
If Not Intersect(Me.Range("D7"), cell) Is Nothing Then
'Call the name change routine
ChangeSheetName CStr(Me.Range("D7").Value)
End If
Next
End Sub
然后在您的“数据输入”代码中,您将使用Change事件:
<input type="checkbox" id="jqg_list2_jqg30" class="cbox" name="jqg_list2_jqg30" aria-checked="false">
答案 2 :(得分:1)
非常确定Jordan对于你所追求的内容有正确的答案,适用于您要编写的工作表位于工作表的单元格D7中的情况&#34;数据输入&#34;:
Dim nuWS as Worksheet
Set nuWS = Thisworkbook.Sheets(Thisworkbook.Sheets("Data Entry").Range("D7").Value)
然后您可以从xyz工作表复制并粘贴到nuWS:
Thisworkbook.Sheets("Data Entry").[D34:D38].copy
nuWS.[A1].Paste
或者就像
nuWS.[A1:A4].value = Thisworkbook.Sheet("Data Entry").[D34:D38].value