参考带有variables名称的工作簿/工作表

Sub CpyProdSch() Dim wbkOpen As Workbook Dim wb2 As Workbook Dim wsName As String Dim strFileName As String Dim strFilePath As String Dim MsgBoxResult As Long strFilePath = "\\Ykf001\grpdata\PUBLIC\Operations\Converting Schedule\" ' this could also be a constant strFileName = Dir(strFilePath) Set wbkOpen = Workbooks.Open(strFilePath & strFileName, False, True) 'It stops here - or at least it appears to - defaults back to VBA view and does nothing further ActiveWorkbook.ActiveSheet.Range("A1:BN500").Select Selection.Copy Workbooks("Raw Data pRODUCTION.xlsx").Worksheets("production Data").Range("A1:C1").Select.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=True, Transpose:=False Application.CutCopyMode = False End If wbkOpen.Close False Application.ScreenUpdating = True 

正如你所看到的,我有一个variables的工作簿名称,因为我可以参考它的唯一方法是知道它是我正在访问的文件夹中唯一的Excel文件 – 所以这不像激活一个已知的工作簿名称那么简单。

现在,这部分代码打开工作簿的罚款,它只是不会做任何事情在工作簿,因为我认为我指的是不正确的。

另外,数据表的名称也随之改变:目前它说的是8月29日,在它说7月14日之前,它的variables,但总是第一张。 出于某种原因,当打开工作簿时打开第二张纸。

我需要激活刚刚打开的工作簿中的第一个工作表,以便我可以将范围复制并粘贴到“Raw Production Data”工作簿中。


这里是代码现在[code]设置wbkOpen = Workbooks.Open(strFilePath&strFileName,False,True)表(1).Activate设置wbkOpen = ActiveWorkbook

  wbkOpen.Sheets(1).Range("A2").Copy Workbooks("Raw Data pRODUCTION.xlsx").Worksheets("Production Data").Range("A1").Select.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=True, Transpose:=False Application.CutCopyMode = False [/code] 

它仍然只是打开工作簿,并停止。 我把它缩小到只select纸张(1),打开书本后没有任何反应。 代码WAS今天上午工作。 我很困惑。


我做了一些修补,所以这很奇怪。

无论文件path是什么,子文件在哪里,或者每当工作簿打开时Excel工作簿是什么,macros都将停止。

这是完全不相关的行动,因为一旦该文件打开macros只是停止。

有任何想法吗?

实际上这很有作用,只是表明总是有新东西要学。 而不是这样做:

 Set wbkOpen = Workbooks.Open(strFilePath & strFileName, False, True) 

你可以这样做:

 Workbooks.Open strFilePath & strFileName, False, True Sheets(1).Activate Set wbkOpen = ActiveWorkbook 

为我工作。

 ActiveWorkbook.ActiveSheet.Range("A1:BN500").Select Selection.Copy 

应该

 wbkOpen.Sheets(1).Range("A1:BN500").Copy 

Workbooks.Open返回打开的工作簿,以便可以使用它(请注意,wbkOpen。​​甚至不需要,因为新打开的工作簿始终是活动工作簿)可以使用表(1)获取工作簿的第一个工作表。 .select和selection.copy可以简化为.copy

 Workbooks("Raw Data pRODUCTION.xlsx").Worksheets("production Data").Range("A1:C1").Select.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=True, Transpose:=False Application.CutCopyMode = False 

是一个没有用的select,所以它应该是

 Workbooks("Raw Data pRODUCTION.xlsx").Worksheets("production Data").Range("A1:C1").PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks:=True, Transpose:=False Application.CutCopyMode = False