excel - 将数据复制到新工作表会引发“下标超出范围”
问题描述
我正在研究 VBA 中的一个模块,该模块应该:
- 打开一个对话框,从中选择另一个 Excel 文件进行导入
- 在选定文件中复制名为“Rapport”的工作表中的数据(该工作表始终称为“Rapport”,因为它是一个始终以相同方式格式化的导出文件)
- 复制的数据被粘贴到一个重命名为“数据”的新工作表中。
当我运行模块时,我收到一条错误消息
'下标超出范围'
所以对话框打开了,我可以选择一个文件,打开它,但是在复制/粘贴数据时它失败了。
这是代码:
Sub Import()
Dim WS As Worksheet
Dim fd As Office.FileDialog
Dim Wb As Workbook
Dim txtFilePath As String
Dim txtFileName As String
Dim fso As New FileSystemObject
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With fd
.AllowMultiSelect = False
'Title of dialog box.
.Title = "Select a file"
If .Show = True Then
txtFilePath = .SelectedItems(1)
End If
End With
txtFileName = fso.GetFileName(txtFilePath)
Workbooks.Open Filename:=txtFilePath
'The workbook, the data is pasted to, is called "Rapport_auto"
Workbooks(txtFileName).Worksheets("Rapport").Copy _
after:=Workbooks("Rapport_auto").Worksheets(1)
'Change name of active sheet
ActiveSheet.Name = "Data"
'Close imported workbook
Workbooks(txtFileName).Close
End Sub
对我做错了什么有什么建议吗?
//更新//在调试期间我解决了这个问题 - 请参阅下面的回复。
解决方案
@Vityata,“Rapport_auto”文件是我从中运行代码的文件,所以它应该是打开的。
但是,我刚刚解决了这个问题 - 我不知道为什么它工作得更好,但解决方案是将代码更改为:
Dim currentFileName As String
currentFileName = ActiveWorkbook.Name
Set Wb = Workbooks(currentFileName)
Workbooks(txtFileName).Worksheets("Rapport").Copy _
after:=Wb.Worksheets(1)
而不仅仅是
Workbooks(txtFileName).Worksheets("Rapport").Copy _
after:=Workbooks("Rapport_auto").Worksheets(1)
我正在拆分代码以尝试调试较小的位,但最终它只是起作用了:)
推荐阅读
- tinymce - 将数学和科学元素和符号添加到 Tinymce
- node.js - VSCODE 构建错误`终端进程“/bin/zsh '-c', 'yarn run watch-extensionsd'”无法启动(退出代码:127)。
- python - 无法从 Anaconda Navigator (Windows) 启动 Jupyter Note
- redux - switchMap 中 of(...) 和 [...] 的区别
- javascript - jquery中的“#id_name *”是什么意思?
- pandas - 尽管尝试调整参数,但我在训练测试拆分功能中不断出现值错误
- pseudocode - 自动复制程序
- html - navbar 组件和 home 组件之间的巨大差距
- node.js - NodeJS:从响应中读取 XLS 文件并转换为 json?
- arm - 如何使用 qemu 在 x86 主机上启动 ARM vm?