【问题标题】:Excel VBA activate worksheetExcel VBA 激活工作表
【发布时间】:2015-06-03 16:31:01
【问题描述】:

我需要激活一个特定的工作表。该代码旨在创建具有特定名称的工作表。我需要将另一个工作表中的某些内容粘贴到所有这些新创建的工作表中。我正在使用的代码如下。但是我很难激活新创建的工作表来粘贴我想要的内容。

Sub octo()

'Dim ws As Worksheet
    Dim Ki As Range
    Dim ListSh As Range
    Workbooks.Open ("C:\Users\Dash\Dropbox\Randika\Misc\Emmash timesheets\timesheet.xlsx")
    With Worksheets("PPE 05-17-15")
        Set ListSh = .Range("B4:B" & .Cells(.Rows.Count, "B").End(xlUp).Row)
    End With

    On Error Resume Next
    For Each Ki In ListSh
        If Len(Trim(Ki.Value)) > 0 Then
            If Len(Worksheets(Ki.Value).Name) = 0 Then

                Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = Ki.Value
'open template
    Workbooks.Open ("C:\Users\Dash\Dropbox\Randika\Misc\Emmash timesheets\octo_template.xls")
    Range("A1:L31").Select
    Selection.Copy

    Worksheets(Ki.Value).Activate

        If ThisWorkbook.Saved = False Then
        ThisWorkbook.Save
    End If
            End If
        End If
    Next Ki

End Sub

【问题讨论】:

标签: vba excel


【解决方案1】:

Workbooks.OpenWorksheets.Add 都返回对打开和添加的对象的引用,您可以使用这些引用直接访问和修改它们 - 在您的情况下,还可以粘贴数据。

例子:

Dim oSourceSheet As Worksheet
Dim oTargetSheet As Worksheet

Set oSourceSheet = Sheet1    'Set reference to any sheet, Sheet1 in my example
Set oTargetSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
oSourceSheet.Range("A1:L31").Copy
oTargetSheet.Paste

Set oSourceSheet = Nothing
Set oTargetSheet = Nothing

【讨论】:

    【解决方案2】:

    我认为这就是您所需要的。
    正如克里斯所说,不需要激活或选择。希望下面的代码能解决你的问题。

    Option Explicit
    Dim MyTemplateWorkbook As Workbook
    Dim MyDataWorkbook As Workbook
    Dim MyTemplateWorksheet As Worksheet
    Dim MyDataWorksheet As Worksheet
    Dim MyNewDataWorksheet As Worksheet
    Dim CurrentRange As Range
    Dim ListRange As Range
    
    Sub AddWSAndGetData()
    
    Set MyTemplateWorkbook = Workbooks.Open("C:\Users\lengkgan\Desktop\Testing\MyTemplate.xlsx")
    Set MyTemplateWorksheet = MyTemplateWorkbook.Sheets("Template")
    Set MyDataWorkbook = Workbooks.Open("C:\Users\lengkgan\Desktop\Testing\MyData1.xlsx")
    Set MyDataWorksheet = MyDataWorkbook.Sheets("PPE 05-17-15")
    Set ListRange = MyDataWorksheet.Range("B4:B" & MyDataWorksheet.Cells(Rows.Count, "B").End(xlUp).Row)
    Application.ScreenUpdating = False
    
    On Error Resume Next
    For Each CurrentRange In ListRange
    If Len(Trim(CurrentRange.Value)) > 0 Then
        If Len(MyDataWorksheet(CurrentRange.Value).Name) = 0 Then
    
        Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = CurrentRange.Value
        Set MyNewDataWorksheet = MyDataWorkbook.Sheets(ActiveSheet.Name)
        MyNewDataWorksheet.Range("A1:L31").Value = MyTemplateWorksheet.Range("A1:L31").Value
    
        If MyDataWorkbook.Saved = False Then
            MyDataWorkbook.Save
        End If
    
        End If
    End If
    Next CurrentRange
    MyTemplateWorkbook.Close (False) 'Close the template without saving
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-07
      • 2021-07-14
      • 1970-01-01
      • 2018-03-26
      • 2017-01-16
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多