Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
Excel 使用VBA通过文件对话框打开的文件_Excel_Vba_Filedialog - Fatal编程技术网

Excel 使用VBA通过文件对话框打开的文件

Excel 使用VBA通过文件对话框打开的文件,excel,vba,filedialog,Excel,Vba,Filedialog,我试图从通过“文件”对话框打开的文件中的选项卡复制信息,并将其粘贴到“ThisWorkbook”中 下面是我的尝试。我一直在犯错误 “对象不支持此属性或方法” 以粗体字体显示在该行上 Sub UpdateWeeklyJobPrep() Dim xlFileName As String Dim fd As Office.FileDialog Dim source As Workbook Dim currentwk As Integer Dim wksheet

我试图从通过“文件”对话框打开的文件中的选项卡复制信息,并将其粘贴到“ThisWorkbook”中

下面是我的尝试。我一直在犯错误

“对象不支持此属性或方法”

以粗体字体显示在该行上

Sub UpdateWeeklyJobPrep()
    Dim xlFileName As String
    Dim fd As Office.FileDialog
    Dim source As Workbook
    Dim currentwk As Integer
    Dim wksheet As String
    Dim target As ThisWorkbook
    Dim fso As Object
    Dim sourcename As String

    Set fd = Application.FileDialog(msoFileDialogFilePicker)

     'Calc the current fiscal week
      currentwk = WorksheetFunction.WeekNum(Now, vbMonday)
      wksheet = "FW" & currentwk

    With fd
        .AllowMultiSelect = False
        .Filters.Add "Excel Files", "*.xlsx; *.xlsm; *.xls; *.xlsb", 1

        If .Show Then
           xlFileName = .SelectedItems(1)                   
        Else
           Exit Sub
        End If

    End With

    'Opens workbook
    Workbooks.Open (xlFileName), ReadOnly:=True

    'Get file name from path
    Set fso = CreateObject("Scripting.FileSystemObject")
    sourcename = fso.GetFileName(xlFileName)
    sourcename = Left(sourcename, InStrRev(sourcename, ".") - 1)

    'Copy/Paste Code Here
    **Workbooks(sourcename).Activate**
    Workbooks(sourcename).Worksheets(wksheet).Column("F").Copy
    target.Activate
    target.Sheets("Data Source").Column("C").PasteSpecial

    'close workbook with saving changes
    source.Close SaveChanges:=False
    Set source = Nothing


End Sub
我想我有一个解决办法。首先,正如我在评论中提到的,您应该使用一个变量来保存新的、打开的工作簿

Sub UpdateWeeklyJobPrep()
Dim xlFileName As String
Dim fd      As Office.FileDialog
Dim source  As Workbook
Dim currentwk As Integer
Dim wksheet As String
Dim fso     As Object
Dim sourcename As String

Dim mainWB  As Workbook

Set mainWB = ThisWorkbook

Set fd = Application.FileDialog(msoFileDialogFilePicker)

'Calc the current fiscal week
currentwk = WorksheetFunction.WeekNum(Now, vbMonday)
wksheet = "FW" & currentwk

With fd
    .AllowMultiSelect = False
    .Filters.Add "Excel Files", "*.xlsx; *.xlsm; *.xls; *.xlsb", 1
    If .Show Then
        xlFileName = .SelectedItems(1)
    Else
        Exit Sub
    End If
End With

'Opens workbook
Dim newWB   As Workbook
Set newWB = Workbooks.Open(xlFileName, ReadOnly:=True)

'Copy/Paste Code Here
mainWB.Sheets("Data Source").Column("C").Values = newWB.Worksheets(wksheet).Column("F").Values
newWB.Close savechanges:=False
Set newWB = Nothing
End Sub

我还更改了
Copy/PasteSpecial
位,假设您只需要值。注意,由于您要复制整个列,这可能需要时间。您可能只想将该范围缩小到已使用的行,但我将把它作为读者的练习。

Add
msgbox(sourcename)
。你确定你有一个确切名称的打开的工作簿吗?当我尝试时,窗口似乎必须被激活。尝试将该行更改为
Windows(fso.GetFileName(xlFileName))。激活
使用
工作簿。打开(sourcename),只读:=True
而不是
工作簿(sourcename)。激活
还将
作为此工作簿的Dim target更改为
作为工作簿的Dim target
,因为
工作簿
是一个类型,而
此工作簿
是该类型的对象class@BruceWayne我添加了中断,并能够检查文件名是否正确。我想这可能正是我需要的!我仍然在复制/粘贴时收到错误“对象不支持此属性或方法”line@Dee-你肯定工作簿和工作表的参考资料都是准确的,没有打字错误或任何东西?在复制/粘贴行之前,添加这两行
Debug.print mainWB.sheets(“数据源”).Range(“C1”).Value
Debug.print newWB.Worksheets(wksheet).Range(“F1”).Value
。你是得到这两个单元格中的值,还是其中一行出错了?我添加了两行,每次更改两行之间的断点时,我都运行sub 2次。两个都返回了错误。@Dee什么错误?这意味着
mainWB
变量和/或工作表名称不正确。请确认你在申报这些。他们真的对吗?