【发布时间】:2018-11-28 04:05:15
【问题描述】:
我自己陷入了困境, 我意识到我是新来的,我希望我不会犯太多错误。
我的文件夹中有不同名称的工作簿。我的 VBA 列出了 .csv 文件的路径。
每个工作簿都有一个唯一的名称,与其中的工作表相同。
接下来,我想遍历结合到 MASTER.xlsm 的工作簿
数据来自 OBDII 汽车应用程序,因此行数始终未知。
Range("A1").Resize(Cells.Find(What:="*", SearchOrder:=xlRows, _
SearchDirection:=xlPrevious, LookIn:=xlValues).Row, _
Cells.Find(What:="*", SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, LookIn:=xlValues).Column).Select
上面的这段代码在我手动在其中一个不同的工作簿中使用时有效。但我得到了一个
运行时错误 1004 应用程序或对象定义错误
当我尝试从 MasterWorkbook 实现它时。
Private Sub cmd_COPYpaste()
Application.ScreenUpdating = False
Application.CutCopyMode = False
Application.Calculation = xlCalculationManual
''''DIMMENSIONS
Dim SourceRow As Long
Dim EditRow As Long
Dim sFile As String
Dim wb As Workbook
Dim FileName1 As String
Dim wksSource As Worksheet
Const scWkbSourceName As String = "MASTER.xlsm"
Set wkbSource = Workbooks(scWkbSourceName)
Set wksSource = wkbSource.Sheets("Sheet1") ' Replace Sheet1 with the sheet name
Const wsOriginalBook As String = "MASTER.xlsm"
SourceRow = 2
''ENSURE SELECT SOURCE SHEET
Sheets("Sheet1").Select
Do While Cells(SourceRow, "B").Value <> ""
FileName1 = wksSource.Range("B" & SourceRow).Value
sFile = FileName1
Set wb = Workbooks.Open(sFile)
''CREATE TABLE1 ON AWORKBOOK
Dim AWorkbook As Workbook
Set AWorkbook = ActiveWorkbook
''CREATE a REFERENCE-ABLE Sheet
Dim AWorksheet As Worksheet
Set AWorksheet = AWorkbook.ActiveSheet
''SELECT DATA RANGE
下一行是我的错误
AWorksheet.Range("A1").Resize(Cells.Find(What:="*", SearchOrder:=xlRows, _
SearchDirection:=xlPrevious, LookIn:=xlValues).Row, _
Cells.Find(What:="*", SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, LookIn:=xlValues).Column).Select
Selection.Copy
Windows("MASTER.xlsm").Activate
Sheets("Sheet3").Select 'IMPORT TO SHEET
ActiveSheet.Range("A1").Select
ActiveSheet.Paste
''CLOSE WORKBOOK W/O BEFORE SAVE
AWorkbook.Activate
Application.EnableEvents = False
ActiveWorkbook.Close savechanges:=False 'Will NOT save changes
Application.EnableEvents = True
Windows("MASTER.xlsm").Activate
Sheets("Sheet1").Select
'''FUTURE CODE
''GO TO NEXT FILE
SourceRow = SourceRow + 1 ' Move down 1 row for source sheet
Loop
End Sub
我计划将来完成代码,但现在我希望它是一遍又一遍地复制并粘贴到 Sheet3 上的 A1。
我一直以为我把东西搞砸了
''Need to CREATE a REFERENCE-ABLE Sheet
Dim AWorksheet As Worksheet
Set AWorksheet = AWorkbook.ActiveSheet
我怎样才能在不知道工作表名称的情况下仍然可以完全控制另一个工作簿中的工作表?
我以为我指定了 AWorkbook 的活动工作表
主工作簿表 1 上的 A 列具有文件名,而 filename1 是 B 列中的完整路径。
感谢您一直支持我,我很想听听您的想法和简化(向所有让我走到这一步的人的道具)?
【问题讨论】:
-
尝试将
AWorksheet.Range更改为ws.Range -
更新:我改为 Worksheets(1).Range("A1").Resize(Cells.Find(What:="", SearchOrder:=xlRows, _ SearchDirection:=xlPrevious , LookIn:=xlValues).Row, _ Cells.Find(What:="", SearchOrder:=xlByColumns, _ SearchDirection:=xlPrevious, LookIn:=xlValues).Column).Select 但它正在选择列和来自活动工作簿上 MASTER 的行计数。 (MASTER Sheet1 有 101 行和 2 列,但我需要它在打开的活动工作簿上执行此操作。
-
那么,成功了吗?
-
您确实知道,如果您的代码确实在 B 列中的工作簿列表中循环,您的粘贴将覆盖之前的每个粘贴。
-
另外,去掉
Activate和Select。例如ThisWorkbook.WorkSheets("Sheet3").Range("A1").Paste.