引用带有变量名称的工作簿/工作表

时间:2014-09-04 19:01:06

标签: excel vba variables copy-paste

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

正如您所看到的,我有一个可变的工作簿名称,因为我可以引用它的唯一方法是知道它正在访问的文件夹中唯一的excel文件 - 所以这不像激活已知工作簿那么简单名称。

现在看来这部分代码OPENS工作簿很好,它只是不会在工作簿中做任何事情因为我认为我指的是错误的。

此外,包含数据的工作表名称更改: 目前它说的是8月29日,在7月14日之前,它的变量,但它始终是第一张。出于某种原因,当工作簿打开但它打开到第二张表时。

我需要激活刚刚打开的工作簿中的第一张工作表,以便将范围复制并粘贴到我的“原始生产数据”工作簿中。


这是现在的代码[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]

它仍然只是打开工作簿并停止。我把它修剪成只选择纸张(1),打开书后没有任何反应。代码WAS今天早上工作。我很困惑。


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

无论文件路径是什么,sub是什么,或者每次打开工作簿时excel工作簿是什么,宏都会停止。

这与动作完全无关,因为一旦该文件打开,宏就会停止。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这实际上相当令人震惊,这完全有用,只是为了表明总会有新的东西需要学习。而不是这样做:

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

你可以这样做:

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

适合我。

答案 1 :(得分:0)

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

应该是

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

Workbooks.Open返回它打开的工作簿,以便您可以使用它。(请注意,甚至不需要wbkOpen。​​因为新打开的工作簿始终是活动工作簿)您可以使用Sheets(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

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

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