我不是来自软件背景并试图编写一个宏来避免重复工作导致错误。请随意提出能让它变得更好的事情。我试图从这个站点提取不同程序的作品并使其有效。
提前谢谢你。
这是我想要做的。 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
答案 0 :(得分:2)
以下是一些指示。
1)将 Option Explicit 置于顶部,以便检查语法和声明。
这会强制您声明sName
和uploader
以及设置其值。 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)添加更多细胞'值为新打开的工作簿,新增工作表;使用您的wb
和sName
变量来确保正确定位:
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