Excel 使用VBA通过文件对话框打开的文件
我试图从通过“文件”对话框打开的文件中的选项卡复制信息,并将其粘贴到“ThisWorkbook”中 下面是我的尝试。我一直在犯错误 “对象不支持此属性或方法” 以粗体字体显示在该行上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
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
位,假设您只需要值。注意,由于您要复制整个列,这可能需要时间。您可能只想将该范围缩小到已使用的行,但我将把它作为读者的练习。Addmsgbox(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
变量和/或工作表名称不正确。请确认你在申报这些。他们真的对吗?