如何打开保存在特定位置的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)把选项显式放在顶部,所以语法和声明被检查。 这将迫使你声明sName
和uploader
以及设置它们的值。 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)在新打开的工作簿中添加更多单元格的值,新添加的工作表; 使用您的wb
和sName
variables来确保正确的定位:
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