【问题标题】:Select Specified Range on Varying Sheet Names from another Workbook从另一个工作簿中选择不同工作表名称的指定范围
【发布时间】: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 列中的工作簿列表中循环,您的粘贴将覆盖之前的每个粘贴。
  • 另外,去掉ActivateSelect。例如ThisWorkbook.WorkSheets("Sheet3").Range("A1").Paste.

标签: excel vba


【解决方案1】:

您可以从以下位置替换您的代码:

Set wb = Workbooks.Open(sFile)

到:

Sheets("Sheet1").Select

带有以下内容(在 cmets 中的解释):

With Workbooks.Open(sFile) ' open and referecne your current workbook
    With .Worksheets(Split(.Name, ".")(0)) ' reference referenced workbook sheet named after it
        .Range("A1").Resize(.Cells.Find(What:="*", SearchOrder:=xlRows, _
                                        SearchDirection:=xlPrevious, LookIn:=xlValues).Row, _
                            .Cells.Find(What:="*", SearchOrder:=xlByColumns, _
                                        SearchDirection:=xlPrevious, LookIn:=xlValues).Column) _
                    .Copy Destination:=Workbooks("MASTER.xlsm").Worksheets("Sheet3").Range("A1") ' copy and paste in one shot
    End With

    Application.EnableEvents = False
    .Close savechanges:=False 'Will NOT save changes
    Application.EnableEvents = True

    '''FUTURE CODE

End With

''GO TO NEXT FILE
SourceRow = SourceRow + 1 ' Move down 1 row for source sheet

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 2019-07-29
    • 2022-12-08
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多