Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用VBA复制用VBA打开的Excel工作簿的文件名,并在当前工作簿的“另存为”功能中使用它?_Excel_Vba - Fatal编程技术网

如何使用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