vb.net - VBA 错误 1004 - 范围类的选择方法失败

标签 vb.net excel excel-2010 powerpoint vba

第一次发帖,所以如果有任何格式或我未能遵守的准则,请告诉我,以便我可以修复它。

所以我基本上是向用户询问 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/

相关文章:

vb.net - 您可以忽略 Resharper 中特定的冗余限定符吗?

mysql - 过滤 DataGrid 中的数据

vb.net - 如何在 VB.NET 中为 CheckedListBox 项目着色?

VB.NET "Fixing"代码克隆

vba - 私有(private)子 ComboBox1_Click() 循环

vba - 如何防止 Excel 绑定(bind)到 Microsoft Word 15.0 对象库?

excel - 任何人都可以在 Excel 2010 中显示按钮 Face ID 列表

javascript - 将不同的excel文件映射到db的解决方案

Excel宏来比较行

Excel如何查找1列中的值存在于另一列的值范围内