【问题标题】:Referencing Most Recently Added Worksheet参考最近添加的工作表
【发布时间】:2015-07-27 19:45:51
【问题描述】:

我有一个用户表单,其中包含用户的输入以在工作簿中执行某些操作,其中一个操作是在工作簿中插入一个新选项卡,并让用户在输入框中输入新工作表的名称。然后我希望能够引用这个新工作表(但我不知道其他人可能会给它起什么名字)并将图表对象粘贴到新创建的工作表中。

到目前为止,添加工作表代码工作正常,但我粘贴图表范围的任何尝试都不起作用。我当前添加工作表的代码是:

Private Sub MyChart_Click()

Dim Answer As String
Dim sht_name As Variant

On Error Resume Next

If Me.OptionButton2.Value = True Then

Unload Me

sht_name = InputBox("Please enter value")

If sht_name <> "" Then

Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = sht_name

Else

Exit Sub

End Sub

我的图表位于另一个工作表(“Sheet2”)中,每当用户在用户窗体中选择此 OptionButton2 时,我都会尝试将其复制到新创建的工作表中...感谢任何帮助。

【问题讨论】:

  • Worksheets.Add 返回对刚刚添加的工作表的引用,因此您可以直接使用它Dim sht As WorkSheet: Set sht = Worksheets.Add(...)

标签: vba excel charts userform


【解决方案1】:

当您使用Worksheets.Add 方法时,该工作表会自动激活。要对此进行测试,您可以运行一小部分代码:

Option Explicit

Private Sub SheetReference()

        Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "Test"
        Debug.Print ActiveSheet.Name

End Sub

你会看到的输出是

Test

因此,在您的情况下,您可以声明一个worksheet 变量,然后在调用add method 后设置引用。像这样的:

Option Explicit

Private Sub MyChart_Click()

        Dim Answer As String
        Dim sht_name As Variant
        Dim ws As Worksheet

        On Error Resume Next

        If Me.OptionButton2.Value = True Then

        Unload Me

        sht_name = InputBox("Please enter value")

        If sht_name <> "" Then

                Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = sht_name
                Set ws = ActiveSheet

                With ws
                        'Do whatever you need to do on the worksheet
                End With

        Else

                Exit Sub
        End If

End Sub

【讨论】:

  • 谢谢@JoshuaRoss - 我遇到了需要选择位于不同工作表中的图表并将其粘贴到 ActiveSheet 中的困难。如果我的图表“存在”在名为“Tab1”的选项卡/工作表中,并且该图表名为“Chart1”,是否有办法将其粘贴到新工作表中而不激活图表所在的工作表?
  • 是的,但这真的是您想要的吗?如果您复制并粘贴图表,该图表仍将引用原始数据。它不会自动引用新工作表上的数据。
  • 正确。原始数据将位于非常隐藏的工作表中,我不希望用户能够更改公式。我只是希望他们能够看到图表。如果我将焦点从活动的新工作表转移到包含图表的工作表,这可能吗?谢谢!
  • 使用Worksheets("Tab1").ChartObjects("Chart1").Copy,然后使用ws.Paste
猜你喜欢
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
  • 2022-09-26
  • 1970-01-01
  • 2015-07-09
  • 2011-01-24
  • 2013-04-24
  • 2013-08-14
相关资源
最近更新 更多