2014-03-19 66 views
2

我有这样的代码工作:(现在使用的Excel 2003)动态簿和工作表名称在宏或VBA

Sub test_copy1()  

Dim wb1 As Workbook  
Dim wb2 As Workbook  
Dim ws1 As Worksheet  
Dim ws2 As Worksheet  

Set wb1 = Workbooks("Workbook2.xls")  
Set wb2 = ThisWorkbook  
Set ws1 = wb1.Sheets("Run 1")  
Set ws2 = wb2.Sheets("Sheet3") 

ws2.Range("A1:h30") = ws1.Range("A177:H206").Value 

End Sub 

在当前工作簿“表3” 细胞J1 = Workbook2.xls 细胞J2 =运行1

如何将当前工作簿“工作表3”中的信息从单元输入到宏中,以便可以根据需要更改并继续工作?

我的意思是让2个单元格可以在工作表中通过下拉或手动填充当前工作簿工作表“工作表3”进行更改。 单元格:J1将等于文件名(Workbook2.xls),并且J2将等于工作表名称(运行1)。

用户可以在需要时更改文件名和工作表名称,然后点击按钮处理复制和粘贴。

我想要代码从单元中获取信息并将它们放入代码中,而不是对工作簿和工作表的文件名进行“硬”编码。

我希望更有意义

谢谢你的帮助。

〜DA

----- UPDATE ----

我曾尝试这个代码,但它总是崩溃在第一组=为Wb1

Sub test_copy1() 

     Dim wb1 As Workbook 
     Dim wb2 As Workbook 
     Dim ws1 As Worksheet 
     Dim ws2 As Worksheet 

     Set wb1 = Workbooks(ws2.Range("J1")) 
     Set wb2 = ThisWorkbook 
     Set ws1 = wb1.Sheets(ws2.Range("J2")) 
     Set ws2 = wb2.Sheets("Sheet3") 

     ws2.Range("A1:h30") = ws1.Range("A177:H206").Value 

    End Sub 

---- --update -------

我得到了它的使用你所有的例子并添加.value的范围后,工作:)

Sub test_copy1() 

    Dim wb1 As Workbook 
    Dim wb2 As Workbook 
    Dim ws1 As Worksheet 
    Dim ws2 As Worksheet 

    Set wb2 = ThisWorkbook 
    Set ws2 = wb2.Sheets("Sheet3") 

    Set wb1 = Workbooks(ws2.Range("J1").Value) 
    Set ws1 = wb1.Sheets(ws2.Range("J2").Value) 

    ws2.Range("A1:h30") = ws1.Range("A177:H206").Value 

End Sub 

谢谢,谢谢你的帮助!

+0

'设置WB1 =工作簿(ws2.Range( “J1”))'和'设置WS1 = wb1.Sheets(ws2.Range( “J2”))'? –

+0

byw,您的工作簿名称是否始终打开?如果不是'J1'只包含wb名称或完整路径? –

+0

是的两个工作簿始终打开。我现在会尝试你的建议。 – DA69

回答

3

试试这个:

Sub test_copy1() 

    Dim wb1 As Workbook 
    Dim wb2 As Workbook 
    Dim ws1 As Worksheet 
    Dim ws2 As Worksheet 

    Set wb2 = ThisWorkbook 
    Set ws2 = wb2.Sheets("Sheet3") 

    Set wb1 = Workbooks(ws2.Range("J1").Value) 
    Set ws1 = wb1.Sheets(ws2.Range("J2").Value) 

    ws2.Range("A1:H30").Value = ws1.Range("A177:H206").Value 

End Sub 
+0

这里的错误“Set wb1 = Workbooks(ws2.Range(”J1“))”。我检查了J1中的文件名,并且对于打开的第二个文件是正确的。 – DA69

+0

尝试在设置wb1 = Workbooks(ws2.Range(“J1”))'之前添加'MsgBox ws2.Range(“J1”)''。它是否给你正确的工作簿名称?另外尝试'设置wb1 = GetObject(ws2.Range(“J1”))' –

+1

我使用了你的代码,并在单元名称后添加了.Value,它工作:)。我只需要在老版本的Excel上进行测试,但迄今为止非常好。谢谢 – DA69

相关问题