VBA报错 要求对象 无法获取当前活动工作簿的全部地址和名称

通过窗体上的按钮实现选择打开任意一个excel文件并将数据复制到当前文件中,运行后提示 要求对象

Private Sub Shipments_Click()

Dim filename As String
Dim filename1 As String
Dim sourceworkbook As Workbook
Dim targetworkbook As Workbook
Dim sourcewooksheet As Worksheet
Dim targetwooksheet As Worksheet
Dim sourcerange As Range
Dim targetrange As Range

Set filename1 = app.ActiveWorkbook.FullName

'打开目标工作簿 **调试点在此处报错
Set targetworkbook = Workbooks(filename1)

'设置目标工作表
Set targetwooksheet = targetworkbook.Sheets("shipments")

'清空目标工作表原始内容
targetwooksheet.Cells.ClearContents

'选择要打开的文件
filename = Application.GetOpenFilename(, , "打开文件")

If filename <> "False" Then
    '打开源工作簿
    Set sourceworkbook = Workbooks.Open(filename)
    
    '设置源工作表
    Set sourcewooksheet = sourceworkbook.Sheets("Data")
      
    '设置源范围和目标范围
    Set sourcerange = sourcewooksheet.Range("A1:GD1000")
    Set targetrange = targetwooksheet.Range("A1")
    
    '将数据从打开的工作簿中复制到当前工作簿中
    sourcerange.Copy targetrange
    
    '关闭打开的工作簿
    sourceworkbook.Close Savechanges:=False
    targetworkbook.Save

Else
    MsgBox "你未选择文件,程序即将退出!"

End If

End Sub