所以基本上我可能有一個跛腳的問題。我現在用了大約兩個小時的VBA,我只是想製作一個宏來創建一個新的電子表格並從現有的數據庫中複製數據。運行時錯誤9在VBA腳本
我已經處理了編譯錯誤,但現在當我嘗試編譯項目時,出現「運行時錯誤9:下標超出範圍」。在下面的代碼中,錯誤出現在Name變量被賦值的行中。
我看過其他線程有同樣的問題,但由於我對VBA的有限知識,我無法弄清楚什麼是錯的或者這個代碼是否可以工作。任何幫助將不勝感激! 謝謝大家!
Option Explicit
Sub PointsCopy()
'Declaring variables for correct naming
Dim Pit As String
Dim RL As Integer
Dim Pattern As Integer
Dim Name As String
Dim DataBook As String
Dim DataSheet As String
Dim oBook As Workbook
Dim oSheet As Worksheet
Dim NewBook As Workbook
Dim NewSheet As Worksheet
Dim Rows As Integer
Dim Pts As String
'Figuring out active workbook and worksheet
Set oBook = ActiveWorkbook
Set oSheet = ActiveSheet
DataBook = ThisWorkbook.Name
DataSheet = ActiveSheet.Name
'Getting pit, RL and pattern name from cell A2 and assigning to variable
錯誤9來在這條線 名稱=工作簿(DATABOOK).Sheets(表).Range( 「A2」)。文本
Name = Workbooks(DataBook).Sheets(DataSheet).Range("A2").Text
Pit = Mid(Name, 4, 2)
RL = Mid(Name, 7, 4)
Pattern = Right(Name, 4)
Pts = "" & Pit & "_" & RL & "_" & Pattern & "_pts.csv"
'Adding new workbook with a proper name
Set NewBook = Workbooks.Add
With NewBook
.SaveAs Filename:="" & Pts & ""
Set NewSheet = Workbooks(NewBook).Sheets("Sheet1")
'Activating new worksheet
NewSheet.Activate
'Adding column names to the new workbook
Range("A1").Value = "MQ2_PIT_CODE"
Range("B1").Value = "BLOCK_TOE"
Range("C1").Value = "PATTERN_NUMBER"
Range("D1").Value = "BLOCK_NAME"
Range("E1").Value = "EASTING"
Range("F1").Value = "NORTHING"
Range("G1").Value = "RL"
Range("H1").Value = "POINT_NO"
'Activate original data sheet
Workbooks(oBook).Sheets(oSheet).Activate
'Count number of data rows in the original spreadsheet
Rows = Application.Count(Range("A2:A"))
'Activate the new spreadsheet and enter pit code, block toe and pattern number
NewSheet.Activate
Range("A2:A" & Rows) = "" & Pit & ""
Range("B2:B" & Rows) = "" & RL & ""
Range("C2:C" & Rows) = "" & Pattern & ""
'Copying data for easting, northing, rl and point number from original spreadsheet to the new one
Workbooks(oBook).Sheets(oSheet).Activate
Range("C2:C" & Rows).Select
Selection.Copy
NewSheet.Activate
Range("D2").PasteSpecial Paste:=xlPasteValues
Workbooks(oBook).Sheets(oSheet).Activate
Range("E2:E" & Rows).Select
Selection.Copy
NewSheet.Activate
Range("H2").PasteSpecial Paste:=xlPasteValues
Workbooks(oBook).Sheets(oSheet).Activate
Range("G2:I" & Rows).Select
Selection.Copy
NewSheet.Activate
Range("E2").PasteSpecial Paste:=xlPasteValues
Workbooks(NewBook).Sheets(NewSheet).Save
End With
End Sub
UPDATE
我已經知道爲什麼我有這個錯誤 - 我指的是一個工作簿和工作表與字符串類型的變量,所以我已經改變了以下方式的錯誤行:
Name = ActiveSheet.Range("A2").Text
不,我沒有得到錯誤9,但我得到錯誤13:類型不匹配如果下面一行:
Set NewSheet = Workbooks(NewBook).Sheets("Sheet1")
對什麼是錯在這裏任何線索?再次感謝!
感謝您的諮詢!我已經改變了很多代碼,現在相同的語句如下所示:'Set wsNewSheet = Workbooks(「F:\ VBA_scripts \」&Pts&「.csv」)。表格(「」&Pts&「」 )」。我已經檢查** Pts **變量並且它返回正確的值。現在,當我運行它時,我得到**錯誤9:下標超出範圍**。與下一條語句相同:'設置wsO_Sheet =工作簿(「」&OldBookName&「」).Sheets(「」&OldSheetName&「」)'。所有變量都是字符串類型,並具有正確的值,但不起作用。我在這裏做錯了什麼? – user2825403
沒有測試它,我認爲這個問題可能是你的報價加倍,試着'.sheets(pts)'因爲'pts'已經是一個字符串了,我想不出爲什麼你需要把它放入引用更不用說雙引號。同樣,您可能指的是不存在的工作表 - 即使您的變量是正確的 - 因爲您沒有正確使用對象/賦值。 –