VBA错误1004 - 范围类的select方法失败

One*_*kuo 17 vb.net vba excel-vba 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
Run Code Online (Sandbox Code Playgroud)

所以我创建了两个不同的工作表变量'sourceSheets'和'sourceSheetsSum',如果我使用'sourceSheets',代码可以工作,但如果我使用'sourceSheetsSum',则会出现错误1004.我已经尝试完全删除变量'sourceSheet'的代码,以防由于某种原因覆盖'sourceSheetSum'.

我相当有信心,Excel工作簿和表存在,并且被正确调用,因为我通过在工作簿和输出的名字所有的表,如下图所示跑的代码回路快一点.

For j = 1 To sourceBook.Sheets.Count
Debug.Print (Sheets(j).name)
Next j
Run Code Online (Sandbox Code Playgroud)

随着调试输出

测量
分析摘要
分析设置

那么,有没有人有任何想法这个错误可能意味着什么,或者我怎么可能去寻找更多关于错误实际是什么?

编辑:所以我决定在工作表名称的列表中添加一些内容,不确定它是否会有所帮助.

For j = 1 To sourceBook.Sheets.Count
    listSheet(j) = Sheets(j).name
Next j    
Debug.Print (listSheet(2))    
Set sourceSheetSum = sourceBook.Sheets(listSheet(2))
Run Code Online (Sandbox Code Playgroud)

调试打印分析摘要,所以我知道工作簿中存在工作表,并且名称中的"拼写错误"不应该存在任何问题.
但是代码在同一行仍然具有相同的错误.

deusxmach1na:我想你想让我改变

Dim sourceXL As Variant                  
Dim sourceBook As Variant
Dim sourceSheet As Variant
Dim sourceSheetSum As Variant

Set sourceSheet = sourceBook.Sheets("Measurements")
Run Code Online (Sandbox Code Playgroud)

Dim sourceXL As Excel.Application
Dim sourceBook As Excel.Workbook
Dim sourceSheet As Worksheet
Dim sourceSheetSum As Worksheet

Set sourceSheet = sourceBook.Worksheets("Measurements")
Run Code Online (Sandbox Code Playgroud)

但这并没有改变错误,我记得我有类似的错误,然后改变它,因为我读到这个变体就像一个捕获所有,实际上并不是什么样的变体.

Jon*_*ell 25

您必须先选择工作表,然后才能选择范围.

我简化了示例以隔离问题.试试这个:

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
Run Code Online (Sandbox Code Playgroud)

用工作表名称替换Sheet1和Sheet2.

重要说明:使用变体是危险的,可能导致难以杀死的错误.只有在您有非常具体的理由时才使用它们.

  • @HeadofCatering Good Call!我几乎没有使用过Selects,忘了你必须先选择Sheet.叹了口气,好的'宏记录代码. (2认同)
  • 如果错误消息有帮助,则堆栈溢出将不存在。 (2认同)

ass*_*ias 8

如果没有先选择其所在的工作表,则无法选择范围.请先尝试选择工作表,然后查看是否仍然出现问题:

sourceSheetSum.Select
sourceSheetSum.Range("C3").Select
Run Code Online (Sandbox Code Playgroud)