【问题标题】:Copying Filename From Origin Excel Workbook Into Destination Excel Workbook将文件名从源 Excel 工作簿复制到目标 Excel 工作簿
【发布时间】:2021-09-08 21:45:43
【问题描述】:

有没有办法从打开的 Excel 工作簿中复制文件名,并将其粘贴到目标工作簿中?我有一个从打开的工作簿中复制数据的宏,但我不确定如何获取文件名。

这是我必须从打开的工作簿中复制整个选择的宏。我将如何将文件名添加到此?谢谢!

Sub LazyBill()
' LazyBill Macro
'
' Keyboard Shortcut: Ctrl+d
'
Dim SFC_Ver
Dim WB1 As Workbook, WbName As String
Dim WB2 As Workbook, Wb2Name As String
'Dim Ksearch As Range
Dim Kvalue As String
Set WB1 = ActiveWorkbook
    WbName = ActiveWorkbook.Name
'Open .cvs file to input
'MsgBox ("Once you click OK a File Open window will appear. Browse to the .cvs file that you wish to add to the trend data and click open")
    Filename = False
    Filename = Application.GetOpenFilename
        If Filename = False Then
            CloseMaster
        End If
        
Dim sStarDir As String
sStarDir = CurDir
    ChDir "\\sw\data\****"
Application.DefaultFilePath = sStarDir

    Workbooks.Open Filename:= _
    Filename
            Set WB2 = ActiveWorkbook
                Wb2Name = ActiveWorkbook.Name
    Cells.Select
    Selection.Copy
    Windows(WbName).Activate
    Sheets("DATA").Select
'Paste data into trend data file
    Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = 0
'Close Trend data .cvs file
    Windows(Wb2Name).Activate
            ActiveWorkbook.Close False

End Sub

【问题讨论】:

  • 添加到哪里?粘贴到与粘贴数据相同的工作表中?
  • 是的,我复制的所有数据都进入了目标工作表,我希望数据的来源以及该数据的文件名进入同一个工作表。
  • 究竟在哪里?
  • 我为歧义道歉。我想弄清楚如何从原始工作簿 WB2 复制文件名。然后将该文件名粘贴到打开的单元格 A4 中,例如,在工作表“DATA”中的目标工作簿 WB1 中。不知道有没有可能,我试过录制几个宏都没有成功。
  • 这不会被源工作表中复制的数据覆盖吗?

标签: excel vba


【解决方案1】:

这是一个示例 - 调整目标范围以适应:

Sub LazyBill()

    Dim WB1 As Workbook
    Dim WB2 As Workbook
    Dim rng As Range, destWs As Worksheet, Filename
    
    Set WB1 = ActiveWorkbook
    
    'Open .cvs file to input  '.csv ?
    'MsgBox ("Once you click OK a File Open window will appear. " & _
      "Browse to the .cvs file that you wish to add to the trend data and click open")
    Filename = False
    Filename = Application.GetOpenFilename
    If Filename = False Then
        CloseMaster
        'Exit Sub ' ?
    End If
        
    Set WB2 = Workbooks.Open(Filename:=Filename) 'set reference on file open
    Set rng = WB2.Worksheets(1).UsedRange
    
    Set destWs = WB1.Worksheets("DATA")
    
    destWs.Range("A1").Value = WB2.Path
    destWs.Range("A2").Value = WB2.Name
    rng.Copy destWs.Range("A4")
    WB2.Close False
    
    Application.CutCopyMode = False
    
End Sub

请注意,您可以直接使用工作簿对象,而不是通过名称来引用它们。

【讨论】:

  • 谢谢蒂姆,这很好用。我没有想到直接使用对象,而且我的代码非常不优雅。您的解决方案非常适合粘贴数据和文件名信息,因此文件名或数据不会被输入的下一组数据覆盖。再次感谢您
猜你喜欢
  • 1970-01-01
  • 2013-03-11
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多