如何打开保存在特定位置的Excel文件,使用VBA在工作表的最后一个选项卡中创build一个新选项卡

我不是从软件背景,并试图写一个macros,以避免重复的工作,导致错误。 请随时提出一些事情,使其更好。我试图从这个网站从不同的程序,并使其工作。

先谢谢你。

这是我想要做的。 a)我想从当前文件(说文件1)打开保存在特定位置的Excel文件(可以说文件2)。 作品

b)在文件2中创build一个与该文件Works中最后一个选项卡相同的新选项卡

c)使用文件1中的2个不同的单元格重命名创build的选项卡。(自动重命名将基于文件1单元格,但我只能pipe理popup,要求我进入,但不重命名文件)。 不工作/部分工作

d)popupinput名称和另外2个input在不同的单元格(我只能得到你的名字,我怎么能得到3input3个不同的单元格) 不工作/部分工作

e)复制文件1中的2个单元格,并复制到新创build的文件夹2中。 不起作用

这是我试图写的代码。

Sub Filling_List() Dim sPath As String, sFile As String, wb As Workbook, i As Integer 'Application.ScreenUpdating = False sPath = "C:\Users\aricsonp\Desktop\Filling list macro\" sFile = sPath & "ArF Filling List.xlsm" Set wb = Workbooks.Open(sFile) ActiveSheet.Copy After:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = InputBox("New Name:") If sName = "" Then Exit Sub ActiveSheet.cell(3, "E") = InputBox("Your Name:") ' With ActiveSheet.Sheets("ArF Filling List (7)") '.Range("B03").Value = uploader.Sheets("Que & Tsc Cal").Range("B02").Value ' .Range("B05").Value = uploader.Sheets("Que & Tsc Cal").Range("B01").Value ' End With 'Application.ScreenUpdating = True End Sub 

这里有一些指针。

1)把选项显式放在顶部,所以语法和声明被检查。 这将迫使你声明sNameuploader以及设置它们的值。 i也宣布,但没有分配。

2)你的代码照原样重命名表单 。 您直接从input框中分配新添加的工作表,而不是将其存储在variables中。

 Worksheets(Worksheets.Count).Name = InputBox("New Name:") 

假设variablessName实际上是要保存这个,并且你想从包含你正在运行的代码(即ThisWorkbook )的工作簿中的2个单元中获取这个值:

 sName = ThisWorkbook.Worksheets("Sheet1").Range("A1") & ThisWorkbook.Worksheets("Sheet1").Range("B1") 

你可能会想要声明和分配ThisWorkbook和工作表作为variables引用。

例如

 Dim wb1 as Workbook Dim ws1 as Worksheet Set wb1 = ThisWorkbook Set ws1 = ThisWorkbook.Worksheets("Sheet1") 'change as appropriate 

3)避免混合工作表集合。 除非您有图表工作表,否则我更喜欢工作表集合。

4)在大多数情况下,你会想比较vbNullstring而不是空string(“”)。 分配速度更快,使用更less的内存等

 If sName = vbNullString Then Exit Sub 

5)给细胞分配更多的值; 添加更多的input框,并使用Cells不是单元格,例如

 ActiveSheet.Cells(4, "E") = InputBox("Your Age:") 

6)在新打开的工作簿中添加更多单元格的值,新添加的工作表; 使用您的wbsNamevariables来确保正确的定位:

 With wb.Worksheets(sName) 

7)你可能想在每一行的顶部声明每个variables,即避免在一行上多次声明。 使debugging更容易,并发现任何隐含的变体。

所以,你可能有如下的东西:

 Option Explicit Public Sub Filling_List() Dim sPath As String Dim sFile As String Dim wb As Workbook ' Dim i As Integer ''not used Dim sName As String 'add sName declaration 'Add declaration for uploader variable and set its value Dim wb1 as Workbook Dim ws1 as Worksheet Set wb1 = ThisWorkbook Set ws1 = ThisWorkbook.Worksheets("Sheet1") Application.ScreenUpdating = False sPath = "C:\Users\aricsonp\Desktop\Filling list macro\" sFile = sPath & "ArF Filling List.xlsm" Set wb = Workbooks.Open(sFile) ActiveSheet.Copy After:=Worksheets(Worksheets.Count) 'Worksheets(Worksheets.Count).Name = InputBox("New Name:") sName = ws1.Range("A1") & ws1.Range("B1") 'assign value from two cells ActiveSheet.Name = sName If sName = vbNullString Then Exit Sub 'compare against vbNullstring not empty string literal With wb.Worksheets(sName) .Cells(3, "E") = InputBox("Your Name:") .Cells(4, "E") = InputBox("Your Age:") .Cells(5, "E") = InputBox("Your Occupation:") .Range("B03") = uploader.Worksheets("Que & Tsc Cal").Range("B02").Value2 .Range("B05") = uploader.Worksheets("Que & Tsc Cal").Range("B01").Value2 End With Application.ScreenUpdating = True End Sub