[英]How to open Excel file saved at specific location,Create a new tab as of last tab in a sheet using VBA
我不是來自軟件背景並試圖編寫宏以避免導致錯誤的重復工作。 請隨意提出可以使它變得更好的東西。我試圖從這個站點的不同程序中提取片段並使其工作。
先感謝您。
這就是我想要做的。 a)我正在嘗試打開保存在當前文件(比如文件 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) 將Option Explicit放在頂部,以便檢查語法和聲明。 這將強制您聲明sName
和uploader
並設置它們的值。 i
也已聲明但未分配。
2)您的代碼按原樣重命名了sheet 。 您直接從輸入框中分配給新添加的工作表,而不是存儲在變量中。
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) 避免混合Sheets和Worksheets集合。 除非你有圖表表,否則我更喜歡工作表集合。
4) 在大多數情況下,您希望與vbNullstring進行比較,而不是與空字符串文字 ("") 進行比較。 分配速度更快,使用更少的內存等。
If sName = vbNullString Then Exit Sub
5)為單元格分配更多的值; 添加更多輸入框並使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.