引用尚不存在但将从单元格中的variables创build的图纸名称。 Excel VBA

我有一些代码,自动格式化和复制一个模板,并创build副本去相应的样本,例如单元格H5 = Batch1,它创build一个表Batch1 ..单元格I5 =“品红”,它创build一个名为“品红”表。

我现在想要编写一个macros,它将把一系列单元格的数据复制到其中一个创build的表单中。 但是,这些表尚未创build。

有没有办法使用单元格引用来指向数据将被存储在哪里?

例如该工作表将被命名,无论在单元格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 

当您调用Sheet.Copy方法时(假设您传递Before of 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. 

如果每次用户更改D7的值时名称都将更改,则需要在数据input工作表的Worksheet_Change添加一个例程。 所以你应该先在Module Level中引用表单,如下所示:

 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 

然后在你的“数据input”代码后面,你会使用Change事件:

 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 
  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" 

以上代码在variablesnewSheetName中从H5中selectsheetname。 稍后,在创build工作表时,它会将文本放置在单元格H6中的新工作表中

相当肯定乔丹有正确的答案是什么你后,适用于您的scheme中,要写入工作表在单元格D7的工作表“数据input”:

 Dim nuWS as Worksheet Set nuWS = Thisworkbook.Sheets(Thisworkbook.Sheets("Data Entry").Ra‌​nge("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