2016-11-15 58 views
2

我编辑了这篇文章,表明我已经对此做了一些研究。在“录制宏”会话期间捕获下面的一些代码。我只是不知道如何改变它记录到变量中的工作簿名称。任何帮助是极大的赞赏!VBA在模板工作表和变量工作表之间复制和粘贴

我试图复制和粘贴两个工作表之间的一些数据。一个是模板,将始终具有相同的名称,另一个取决于我打开的模板。我现在的代码一直在抛出一个错误。我目前的代码在下面!任何帮助将不胜感激!我想手动打开随机工作簿存储它的名称在一个变量。然后让宏打开模板文件,在templateFile中创建一个新选项卡(称为neededInfo),切换回手动打开的文件,选择范围(“A1:B4”),然后将其复制到templateFile中的新工作表。让我知道如果有更好的方法!我超级新!

Sub Macro3() 

Dim templateFile As Workbook ' template macro workbook; will always have same filename 
Dim workingFile As String ' current working CSCC Quote download 
Dim workingSheet As Worksheet ' only sheet in CSCC Quote 
Dim tempSheet As Worksheet ' created sheet in CSCC Quote to hold temp data 
Dim fileName As String 
Dim wrkBook As Workbook 
Dim nRow As Long 
Dim neededInfo As Long 
Dim neededRange As Range 

Application.ScreenUpdating = False 

' Set template file name 
Set templateFile = "20161115 SMARTnet Template.xlsx" 

Set templateFile = ActiveWorkbook 
templateFile.Active 
Set tempSheet = Worksheets.Add(after:=ActiveSheet) 
tempSheet.Name = "neededInfo" 
workingFile = ActiveSheet.Name 
Range("A1:B4").Select 
Selection.Copy 
templateSheet.Activate 
Range("A5").Select 
ActiveSheet.Paste 
workingFile.Activate 

End Sub 

我的解决方案:

Sub Macro3() 

Dim tPlate As Workbook ' template macro 
Dim wrkngFile As Workbook ' current working CSCC Quote download 
Dim wrkngSheet As Worksheet ' only sheet in CSCC Quote 
Dim tSheet As Worksheet ' created sheet in template file to hold temp data 
Dim fileName As String 
Dim tPath As String, tFile As String ' template path location and template file 
Dim nRow As Long 
Dim neededInfo As Long 
Dim neededRange As Range 

Application.ScreenUpdating = False 

tPath = "C:\Users\tcoplien\Desktop\SMARTnet\" 
tFile = tPath & "20161115 SMARTnet Template.xlsx" 

Set wrkngFile = ActiveWorkbook 
Range("A1:B4").Select 
Selection.Copy 

' Open template file and save name as variable 
Set tPlate = Workbooks.Open(tFile) 

Set tSheet = Worksheets.Add(After:=ActiveSheet) 
tSheet.Name = "neededInfo" 

tSheet.Range("A5").PasteSpecial xlPasteValues 

wrkngFile.Activate 
Range("A1").Select 

End Sub 
+0

*不断抛出错误*什么错误,在哪一行? –

+0

*我想手动打开随机工作簿存储它的名称在一个变量。然后让宏打开模板文件,在templateFile中创建一个新选项卡(称为neededInfo),切换回手动打开的文件,选择范围(“A1:B4”),然后将其复制到templateFile中的新工作表。 *这看起来像是大约5或6个不同的问题,也许是尝试将其分解并解决每个单独的步骤,这样看起来不会太过分。 –

+0

对不起!我想知道错误发生在哪里会很高兴。我现在修好了,但是谢谢你!我相信错误发生在Set templateFile = ActiveWorkbook。当我有机会确认时,我会更新它。 –

回答

2

您的代码是相当接近,但也有一些问题。首先,不要用其类型作为名称来创建变量。将Dim workBook As Workbook更改为Dim bk As Workbook之类的内容。

接下来你有声明Set templateFile = "20161115 SMARTnet Template.xlsx"。这有效地试图将工作簿设置为字符串。请改为Set templateFile = Workbooks("20161115 SMARTnet Template")。或者更好的是将其更改为:

Dim tempStr as String 
tempStr = "20161115 SMARTnet Template" 
Set templatefile = Workbooks(tempStr) 

我不是很确定你想用的代码接下来的几行完成的任务。看起来您正在为templatefile工作簿添加一个新选项卡。而不是激活工作簿,只需使用此Set tempSheet = templatefile.Worksheets.Add(after:=ActiveSheet),然后将此新工作表重命名为“neededInfo”。

接下来,您将workingFile变量设置为活动工作表,在这种情况下将为neededInfo工作表。我假设这不是你的意图。在添加新工作表之前,您需要定义workingSheet变量。

新的代码可能是这个样子:

Sub Macro3() 

    Dim templatefile As Workbook 
    Dim workingSheet As Worksheet ' only sheet in CSCC Quote 
    Dim tempSheet As Worksheet ' created sheet in CSCC Quote to hold temp data 
    Dim tempStr As String 

    Application.ScreenUpdating = False 

    ' Set template file name 
    tempStr = "20161115 SMARTnet Template" 
    Set templatefile = Workbooks(tempStr) 
    Set workingSheet = ActiveSheet 
    Set tempSheet = Worksheets.Add(after:=ActiveSheet) 

    tempSheet.Name = "neededInfo" 

    workingSheet.Range("A1:B4").Copy 

    tempSheet.Range("A5").PasteSpecial xlPasteValues 

    Application.ScreenUpdating = True 

End Sub 

我想这是你试图完成。如果不是的话,这对你来说应该是一个好的开始。

祝你好运!

+0

非常感谢您的帮助!我有机会再看一眼并找出答案。我会发布我上面提供的解决方案!你的工作也是如此,谢谢! –

相关问题