如何打开保存在特定位置的Excel文件,使用VBA在工作表的最后一个选项卡中创建新选项卡
我不是来自软件背景并试图编写宏以避免导致错误的重复工作。请随时提出建议,让它变得更好。我尝试从本网站的不同程序中抽取部分内容并使其工作。如何打开保存在特定位置的Excel文件,使用VBA在工作表的最后一个选项卡中创建新选项卡
预先感谢您。
这是我正在做的。 a)我想从当前文件(说文件1)打开保存在特定位置的Excel文件(可以说是文件2)。 作品
b)以文件2相同在该文件中最后一个标签创建新的选项卡,工程
c)中重新命名使用2个不同的细胞从文件1所创建的标签(Auto Rename基于文件1单元很好,但我只能管理弹出,要求我输入但不重命名文件)。 不起作用/部分工作
d)弹出不同的细胞输入名称和2个输入(我只能拿你的名字,我怎么能得到3输入3种不同的细胞)隐而不宣't工作/部分工作
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)Put Option Explicit at top,so syntax and declarations are checked。 这会强制您声明sName
和uploader
以及设置它们的值。 i
也被声明但未被分配。
2)您的代码按原样重命名为工作表。您直接从输入框分配新添加的工作表,而不是将其存储在变量中。
Worksheets(Worksheets.Count).Name = InputBox("New Name:")
假设可变sName
竟是来保存这些和要抓住在包含代码(即的ThisWorkbook)正在运行的工作簿从2个细胞这个值:
sName = ThisWorkbook.Worksheets("Sheet1").Range("A1") & ThisWorkbook.Worksheets("Sheet1").Range("B1")
您可能想要声明并分配ThisWorkbook
以及作为变量引用的工作表。
例如
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
而非单元例如
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
谢谢几乎工作。很好解释。我使用Option explicit,但它仍然给我错误,因为“编译错误变量未定义,我在最后2行看到代码停止在Uploader,我们试图从2个单元中提取值。我尝试修改wb1而不是上传器。 – Eric
感谢它的帮助非常丰富,并且很好地解释了像我这样一个知识匮乏的人,当我把上传器改为wb1时,它的工作方式是我想要的,我看到很多弹出框作为输入,有没有办法让我得到1弹出框会询问我3件事(你的名字?你的年龄?你的职业?),我可以给出3个答案,这将得到3个不同的单元格Say Cell(3,E; 4,E; 5,E) – Eric
是你可以,但你需要额外的代码来检查用户是否已经正确输入了信息。请参阅这里的示例:https://social.msdn.microsoft.com/Forums/en-US/52aa7ec1-9663-432c-9449 -55fb1d738969/vba-inputbox-that-returns-array-of-values?forum = isvvba – QHarr