第一次发帖,所以如果有任何格式或我未能遵守的准则,请告诉我,以便我可以修复它。
所以我基本上是向用户询问 Excel 文件的文件目录,然后设置一些变量(最初在公共(public)设置为项目变量,因为这些变量在其他地方被使用和更改)。我还添加了将这些变量设置为空的行(以防万一,我认为这并不重要)。然后,我将这些变量设置为我想要访问的 Excel 文件、工作簿和工作表。
Dim filepath as String
filePath = CStr(fileDialog) 'ask file dir, set to string
Dim sourceXL As Variant 'these three were orig project variables
Dim sourceBook As Variant
Dim sourceSheet As Variant
Dim sourceSheetSum As Variant
Set sourceXL = Nothing 'set to nothing in case...?
Set sourceBook = Nothing
Set sourceSheet = Nothing
Set sourceSheetSum = Nothing
Set sourceXL = Excel.Application 'set to the paths needed
Set sourceBook = sourceXL.Workbooks.Open(filePath)
Set sourceSheet = sourceBook.Sheets("Measurements")
Set sourceSheetSum = sourceBook.Sheets("Analysis Summary")
Dim measName As Variant 'create variable to access later
Dim partName As Variant
sourceSheetSum.Range("C3").Select 'THIS IS THE PROBLEM LINE
measName = sourceSheetSum.Range(Selection, Selection.End(xlDown)).Value
sourceSheetSum.Range("D3").Select
partName = sourceSheetSum.Range(Selection, Selection.End(xlDown)).Value
因此,我创建了两个不同的工作表变量“sourceSheets”和“sourceSheetsSum”,如果我使用“sourceSheets”,代码可以工作,但如果我使用“sourceSheetsSum”,则会出现错误 1004。我还尝试了完全删除变量“sourceSheet”的代码,以防由于某种原因覆盖“sourceSheetSum”。
我相当有信心 Excel 工作簿和工作表存在并且被正确调用,因为我运行了一些快速代码来循环工作簿中的所有工作表并输出名称,如下所示。
For j = 1 To sourceBook.Sheets.Count
Debug.Print (Sheets(j).name)
Next j
调试输出
Measurements
Analysis Summary
Analysis Settings
那么,有谁知道这个错误可能意味着什么,或者我如何才能找到更多有关错误实际是什么的信息?
编辑: 因此,我决定在工作表名称列表中添加一些内容,不确定它是否有帮助。
For j = 1 To sourceBook.Sheets.Count
listSheet(j) = Sheets(j).name
Next j
Debug.Print (listSheet(2))
Set sourceSheetSum = sourceBook.Sheets(listSheet(2))
调试打印分析摘要,因此我知道该工作表存在于工作簿中,并且名称中不应该存在任何“拼写错误”问题。
但代码在同一行仍然有相同的错误。
deusxmach1na:我想你希望我改变
Dim sourceXL As Variant
Dim sourceBook As Variant
Dim sourceSheet As Variant
Dim sourceSheetSum As Variant
Set sourceSheet = sourceBook.Sheets("Measurements")
至
Dim sourceXL As Excel.Application
Dim sourceBook As Excel.Workbook
Dim sourceSheet As Worksheet
Dim sourceSheetSum As Worksheet
Set sourceSheet = sourceBook.Worksheets("Measurements")
但这并没有改变错误,我记得我有类似的错误,然后更改了它,因为我读到该变体就像一个包罗万象的东西,实际上并没有那么明确变体是什么。
最佳答案
您必须先选择工作表,然后才能选择范围。
我简化了示例以隔离问题。试试这个:
Option Explicit
Sub RangeError()
Dim sourceBook As Workbook
Dim sourceSheet As Worksheet
Dim sourceSheetSum As Worksheet
Set sourceBook = ActiveWorkbook
Set sourceSheet = sourceBook.Sheets("Sheet1")
Set sourceSheetSum = sourceBook.Sheets("Sheet2")
sourceSheetSum.Select
sourceSheetSum.Range("C3").Select 'THIS IS THE PROBLEM LINE
End Sub
将 Sheet1 和 Sheet2 替换为您的工作表名称。
重要提示:使用变体是危险的,可能会导致难以消除的错误。仅当您有非常具体的原因时才使用它们。
关于vb.net - VBA 错误 1004 - 范围类的选择方法失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10949893/