首页 > 解决方案 > 在单独的工作簿中有宏来定位工作簿,将工作表中的值复制并粘贴到新工作簿中并保存在原始工作簿的位置

问题描述

作为预警,我是使用 VBA 的新手。

我拼凑了以下代码来执行以下操作: 1. 找到工作表“Intrastat” 2. 复制此工作表的使用范围 3. 将值粘贴到新工作簿中 4. 重新格式化 B 列中的日期 5. 保存工作簿在原始工作簿的位置。

但是,这仅在我将宏保存在原始工作簿中时才有效。我需要的是能够将宏保存在不同的工作簿中,并且在运行宏时,我需要能够从硬盘上的文件位置选择“原始”工作簿。

有任何想法吗?

当前代码:

Sub TB_Intrastat_Data_Cleanse()
Dim wb As Workbook
Set wb = Workbooks.Add
Set TWKB = ThisWorkbook
Set sel = Selection

Dim folderPath As String
folderPath = Application.ThisWorkbook.Path

TWKB.Sheets("Intrastat").UsedRange.Copy
wb.Sheets(1).[a1].PasteSpecial xlPasteValues
Columns("B:B").Select
Selection.NumberFormat = "dd/mm/yyyy;@"

nme = "TB Intrastat Data " & Range("A3") & " MTD"
ActiveWorkbook.SaveAs Filename:=folderPath & nme

End Sub

标签: vbaexcel

解决方案


您可以使用Application.GetOpenFilename()提示用户浏览文件资源管理器并打开文件。然后它将将该文件用作TWKB

Sub TB_Intrastat_Data_Cleanse()
Dim wb As Workbook, TWKB As Workbook
Dim sel As Range
Dim nme As String

Set wb = Workbooks.Add
Set TWKB = Application.GetOpenFilename(Title:="Please choose a file to open", FileFilter:="Excel Files *.xls* (*.xls*),")
Set sel = Selection

Dim folderPath As String
folderPath = Application.ThisWorkbook.Path

TWKB.Sheets("Intrastat").UsedRange.Copy
wb.Sheets(1).[a1].PasteSpecial xlPasteValues
Columns("B:B").NumberFormat = "dd/mm/yyyy;@"

nme = "TB Intrastat Data " & Range("A3") & " MTD"
ActiveWorkbook.SaveAs Filename:=folderPath & nme

End Sub

注意:我会ActiveWorkbook.SaveAs在最后更改为工作簿变量(或明确命名工作簿),因为您使用的是两个独立的变量,您希望确保它保存的是正确的变量。


推荐阅读