如何使用VBA复制用VBA打开的Excel工作簿的文件名,并在当前工作簿的“另存为”功能中使用它?
我有一套工作簿,其中包含需要复制到工作簿新版本的数据。我发现一个宏,我添加到新工作簿中,它将打开“打开文件”对话框,允许您选择一个文件。然后打开文件,将特定单元格复制到新工作簿,然后关闭工作簿如何使用VBA复制用VBA打开的Excel工作簿的文件名,并在当前工作簿的“另存为”功能中使用它?,excel,vba,Excel,Vba,我有一套工作簿,其中包含需要复制到工作簿新版本的数据。我发现一个宏,我添加到新工作簿中,它将打开“打开文件”对话框,允许您选择一个文件。然后打开文件,将特定单元格复制到新工作簿,然后关闭工作簿 Sub CopyDataToNewWB() Dim FileToOpen As Variant Dim OpenBook As Workbook Application.ScreenUpdating = False FileToOpen = Applic
Sub CopyDataToNewWB()
Dim FileToOpen As Variant
Dim OpenBook As Workbook
Application.ScreenUpdating = False
FileToOpen = Application.GetOpenFilename(Title:="Copy Data", FileFilter:="Excel Files (*.xls*),*xls*")
If FileToOpen <> False Then
Set OpenBook = Application.Workbooks.Open(FileToOpen)
OpenBook.Sheets(1).Range("A5:o199").Copy
ThisWorkbook.Worksheets("Calculator").Range("A5").PasteSpecial xlPasteValues
OpenBook.Sheets(1).Range("AO5:AR34").Copy
ThisWorkbook.Worksheets("Calculator").Range("AO5").PasteSpecial xlPasteValues
OpenBook.Application.CutCopyMode = False
OpenBook.Close False
End If
Application.Goto Reference:=Worksheets("Calculator").Range("A5"), _
Scroll:=False
Application.ScreenUpdating = True
End Sub
子CopyDataToNewWB()
Dim FileToOpen作为变体
将OpenBook设置为工作簿
Application.ScreenUpdating=False
FileToOpen=Application.GetOpenFilename(标题:=“复制数据”,文件过滤器:=“Excel文件(*.xls*),*xls*”)
如果FileToOpen为False,则
设置OpenBook=Application.Workbooks.Open(FileToOpen)
OpenBook.Sheets(1)系列(“A5:o199”)。副本
此工作簿。工作表(“计算器”)。范围(“A5”)。粘贴特殊XLPaste值
OpenBook.Sheets(1).范围(“AO5:AR34”).副本
此工作簿。工作表(“计算器”)。范围(“AO5”)。粘贴特殊XLPaste值
OpenBook.Application.CutCopyMode=False
打开书本,关闭错误
如果结束
Application.Goto Reference:=工作表(“计算器”).范围(“A5”)_
滚动:=假
Application.ScreenUpdating=True
端接头
我想获取已打开的旧工作簿的文件名,并在“另存为”功能中使用它来保存旧文件。我希望新文件保持打开状态,以便在后续文件上重复此过程。当然,我将在原始文件的备份目录上工作,而不是原始文件本身
我一直在寻找实现这一点的方法和它所包含的代码,但以我对VBA的最低知识,我很难找到什么方法可以包含任何东西并使其全部工作。再次感谢大家的帮助。当您关闭OpenBook时,请执行以下操作:
OpenBook.Close savechanges = True
关闭OpenBook时,请执行以下操作:
OpenBook.Close savechanges = True
我想获取已打开的旧工作簿的文件名
代码中已经有了吗FileToOpen
将显示您打开的文件的名称
如果您只想提取文件名,那么下面是一个示例
Option Explicit
Sub Sample()
Dim FileToOpen
FileToOpen = Application.GetOpenFilename(Title:="Copy Data", _
FileFilter:="Excel Files (*.xls*),*xls*")
If FileToOpen = False Then Exit Sub
MsgBox GetFilenameFromPath(FileToOpen)
End Sub
Public Function GetFilenameFromPath(ByVal FilePath As String) As String
If Right(FilePath, 1) <> "\" And Len(FilePath) > 0 Then
GetFilenameFromPath = GetFilenameFromPath(Left(FilePath, Len(FilePath) - 1)) + _
Right(FilePath, 1)
End If
End Function
选项显式
子样本()
暗淡的文件打开
FileToOpen=Application.GetOpenFilename(标题:=“复制数据”_
文件过滤器:=“Excel文件(*.xls*),*xls*”)
如果FileToOpen=False,则退出Sub
MsgBox GetFilenameFromPath(FileToOpen)
端接头
公共函数GetFilenameFromPath(ByVal FilePath作为字符串)作为字符串
如果Right(FilePath,1)“\”和Len(FilePath)>0,则
GetFilenameFromPath=GetFilenameFromPath(左(文件路径,左(文件路径)-1))+_
右(文件路径,1)
如果结束
端函数
我想获取已打开的旧工作簿的文件名
代码中已经有了吗FileToOpen
将显示您打开的文件的名称
如果您只想提取文件名,那么下面是一个示例
Option Explicit
Sub Sample()
Dim FileToOpen
FileToOpen = Application.GetOpenFilename(Title:="Copy Data", _
FileFilter:="Excel Files (*.xls*),*xls*")
If FileToOpen = False Then Exit Sub
MsgBox GetFilenameFromPath(FileToOpen)
End Sub
Public Function GetFilenameFromPath(ByVal FilePath As String) As String
If Right(FilePath, 1) <> "\" And Len(FilePath) > 0 Then
GetFilenameFromPath = GetFilenameFromPath(Left(FilePath, Len(FilePath) - 1)) + _
Right(FilePath, 1)
End If
End Function
选项显式
子样本()
暗淡的文件打开
FileToOpen=Application.GetOpenFilename(标题:=“复制数据”_
文件过滤器:=“Excel文件(*.xls*),*xls*”)
如果FileToOpen=False,则退出Sub
MsgBox GetFilenameFromPath(FileToOpen)
端接头
公共函数GetFilenameFromPath(ByVal FilePath作为字符串)作为字符串
如果Right(FilePath,1)“\”和Len(FilePath)>0,则
GetFilenameFromPath=GetFilenameFromPath(左(文件路径,左(文件路径)-1))+_
右(文件路径,1)
如果结束
端函数
一旦我学会了如何使用@Siddarth Rout提供的公共功能,它就能完美地工作。他提供的整个代码只显示了一个带有文件名的消息框,所以我必须找出如何将其放入“另存为”对话框。但这是我最后不需要的额外步骤
我花了一段时间思考如何让它工作,但我最终使用了SaveCopyAs,创建了一个新文件夹,并将路径合并到代码中。这样我就避免了必须接受文件名并找到绕过“文件存在…”框的方法。顺便说一句,我确实尝试过“Application.DisplayAlerts=False”来消除这个问题,但它对我不起作用
但是,使用从Siddarth函数派生的名称将文件副本保存到新文件夹中效果非常好
我还添加了一个“Kill”函数,在复制内容后删除文件。这允许我打开目录中的第一个文件,而无需选择文件(每个文件都需要复制)
下面是最后一段非常有效的代码
下面的代码完成了我想要的一切,我也要感谢这里的其他人,他们发布了我能够使用并从中学习到一些东西的代码片段。对不起,我翻阅了太多的页面,无法列出姓名。伟大的社区
Sub CopyDataToNewWB()
Application.ScreenUpdating = False
Dim FileToOpen As Variant
Dim OpenBook As Workbook
Dim fPath As String
fPath = "d:\Your\New\Save\Location\"
FileToOpen = Dir("D:\Dir\Containing\Files\To\Copy\", vbNormal)
If FileToOpen <> False Then
Set OpenBook = Application.Workbooks.Open(FileToOpen)
OpenBook.Worksheets("Calculator").Range("A5:O199").Copy
ThisWorkbook.Worksheets("Calculator").Range("A5").PasteSpecial xlPasteValues
OpenBook.Worksheets("Calculator").Range("AO5:AR34").Copy
ThisWorkbook.Worksheets("Calculator").Range("AO5").PasteSpecial xlPasteValues
OpenBook.Application.CutCopyMode = False
OpenBook.Close False
End If
Kill (GetFilenameFromPath(FileToOpen))
Application.Goto Reference:=Worksheets("Calculator").Range("A5"), _
Scroll:=True
ActiveWorkbook.SaveCopyAs (fPath & GetFilenameFromPath(FileToOpen))
Application.ScreenUpdating = True
End Sub
Public Function GetFilenameFromPath(ByVal FilePath As String) As String
If Right(FilePath, 1) <> "\" And Len(FilePath) > 0 Then
GetFilenameFromPath = GetFilenameFromPath(Left(FilePath, Len(FilePath) - 1)) + _
Right(FilePath, 1)
End If
End Function
子CopyDataToNewWB()
Application.ScreenUpdating=False
Dim FileToOpen作为变体
将OpenBook设置为工作簿
作为字符串的Dim fPath
fPath=“d:\Your\New\Save\Location\”
FileToOpen=Dir(“D:\Dir\Containing\Files\To\Copy\”,vbNormal)
如果FileToOpen为False,则
设置OpenBook=Application.Workbooks.Open(FileToOpen)
OpenBook.工作表(“计算器”).范围(“A5:O199”).副本
此工作簿。工作表(“计算器”)。范围(“A5”)。粘贴特殊XLPaste值
OpenBook.工作表(“计算器”).范围(“AO5:AR34”).副本
此工作簿。工作表(“计算器”)。范围(“AO5”)。粘贴特殊XLPaste值
OpenBook.Application.CutCopyMode=False
打开书本,关闭错误
如果结束
Kill(GetFilenameFromPath(FileToOpen))
申请。转到参考:=Wo