用户选择(工作簿和工作表名称)然后复制和粘贴

时间:2018-04-26 16:12:07

标签: excel vba excel-vba button

有没有办法让用户在打开文件后选择要复制的工作表?

我想这样做,因为可能有多张具有相同格式的图纸,但名称不同。

实施例: 原始工作簿名为 VSC (包含工作表比较 Plot

名为 SF 的辅助工作簿(包含工作表 Results1 Results2 Results3

用户点击 VSC 上的按钮,文件对话框打开,用户在某个目录中选择 SF ,然后要求用户选择要选择的工作表 - 用户选择 Results2 表格,复制数据(范围" B2:B5"),然后将其粘贴回比较表。

这可能吗?我不知道如何开始。

要求用户选择SF工作簿的当前代码:

Sub GetFilePath()
Dim objFSO as New FileSystemObject

Set myFile = Application.FileDialog(msoFileDialogOpen)
With myFile
    .Title = "Choose File"
    .AllowMultiSelect = False
If .Show <> -1 Then
    Exit Sub
End If
FileSelected = .SelectedItems(1)
End With

3 个答案:

答案 0 :(得分:1)

这是一种方法。您键入工作表名称。调整复制和粘贴范围以适应。

{{1}}

答案 1 :(得分:1)

打开工作簿后,可以按名称枚举工作表,并在VSC工作簿的工作表中填充选择列表...

答案 2 :(得分:1)

这是针对您的问题的不同方法。打开新工作簿后,它会使用计时器,如果您在要复制的工作表上,则每10秒询问一次。如果你回答&#34;是&#34;它会复制。如果你回答&#34;否&#34;它将重新启动10秒计时器。

Sub GetFilePath()
    Set MyFile = Application.FileDialog(msoFileDialogOpen)
    With MyFile
        .Title = "Choose File"
        .AllowMultiSelect = False
        If .Show <> -1 Then
            Exit Sub
        End If
        FileSelected = .SelectedItems(1)
    End With
    Set newWk = Workbooks.Open(FileSelected, , True)
    'Open Selected Workbook and check in 10 seconds for Selected Sheet Name
    Application.OnTime Now + TimeValue("00:00:10"), "CheckForSheet"
End Sub
Private Sub CheckForSheet()
    Dim SheetName As String
    SheetName = ActiveSheet.Name
    answer = MsgBox("Is This the Sheet to copy from: " & SheetName & "?", vbYesNo + vbQuestion, "Copy Data?")
    If answer = vbYes Then
        'ThisWorkbook is the workbook with the Macro/VBA code
        'ActiveWorkbook is the workbook where you are selecting the Sheet to copy from
        ActiveWorkbook.Sheets(SheetName).Range("B2:B5").Copy
        ThisWorkbook.Sheets("Compare").Range("C1:C4").PasteSpecial
    Else
        'Check Again in 10 Seconds
        Application.OnTime Now + TimeValue("00:00:10"), "CheckForSheet"
    End If
End Sub