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

时间:2017-11-18 02:35:21

标签: excel vba excel-vba excel-vba-mac

我不是来自软件背景并试图编写一个宏来避免重复工作导致错误。请随意提出能让它变得更好的事情。我试图从这个站点提取不同程序的作品并使其有效。

提前谢谢你。

这是我想要做的。 a)我试图从当前文件(Say file 1)打开保存在特定位置的Excel文件(比如文件2)。的 作品

b)在文件2中创建一个与该文件中最后一个标签相同的新标签 Works

c)使用文件1中的2个不同单元重命名创建的选项卡。(根据文件1单元格自动重命名是好的,但我只能管理要求我输入但不重命名文件的弹出窗口) 。 无效/部分有效

d)弹出以在不同的单元格中输入名称和另外2个输入(我只能得到你的名字我如何在3个不同的单元格中获得3个输入) 不起作用/部分工作

e)从文件1复制2个单元格并复制到文件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 个答案:

答案 0 :(得分:2)

以下是一些指示。

1)将 Option Explicit 置于顶部,以便检查语法和声明。    这会强制您声明sNameuploader以及设置其值。 i也已声明但未分配。

2)您的代码确实重命名了。您从输入框直接分配给新添加的工作表,而不是存储在变量中。

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

假设变量sName实际上是为了保存它,并且你想要从包含代码的工作簿中的2个单元格中获取此值(即 ThisWorkbook ),您正在运行:

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

您可能希望声明并分配ThisWorkbook和您在其中引用的工作表作为变量。

e.g。

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

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

4)在大多数情况下,您需要与 vbNullstring 进行比较,而不是空字符串文字("")。分配更快,使用更少的内存等。

If sName = vbNullString Then Exit Sub 

5)为细胞分配更多的值;添加更多输入框 AND 使用Cells而不是Cell,例如

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

6)添加更多细胞'值为新打开的工作簿,新增工作表;使用您的wbsName变量来确保正确定位:

With wb.Worksheets(sName)

7)您可能希望在自己的行上面声明每个变量,即避免在一行上进行多次声明。使调试和发现任何隐式变体更容易。

所以,您可能会遇到以下情况:

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