21

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

所以我基本上是在向用户询问excel文件的文件目录,然后我设置了一些变量(最初在公共设置为项目变量,因为这些在其他地方被使用和更改)。我还添加了将这些变量设置为空的行(以防万一,我认为这无关紧要)。然后,我将这些变量设置为我想要访问的 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

随着调试输出

测量
分析汇总
分析设置

那么,有没有人知道这个错误可能意味着什么,或者我如何才能找到更多关于错误实际是什么的信息?

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

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")

但这并没有改变错误,我记得我有类似的错误,然后改变了它,因为我读到那个变体就像一个包罗万象的东西,实际上并没有那么确定变体是什么。

4

4 回答 4

28

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

我已经简化了示例以隔离问题。试试这个:

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 替换为您的工作表名称。

重要提示:使用变体是危险的,并且可能导致难以杀死的错误。仅当您有非常具体的原因时才使用它们。

于 2012-06-08T16:12:53.293 回答
8

如果没有先选择它所在的工作表,则无法选择范围。尝试先选择工作表,看看是否仍然遇到问题:

sourceSheetSum.Select
sourceSheetSum.Range("C3").Select
于 2012-06-08T16:13:06.283 回答
4

assylias 和餐饮主管已经向您说明了错误发生的原因。

Select现在关于你在做什么,据我了解,你根本不需要使用

我猜您是从 VBA PowerPoint 执行此操作的?如果是,那么您的代码将被重写为

Dim sourceXL As Object, sourceBook As Object
Dim sourceSheet As Object, sourceSheetSum As Object
Dim lRow As Long
Dim measName As Variant, partName As Variant
Dim filepath As String

filepath = CStr(FileDialog)

'~~> Establish an EXCEL application object
On Error Resume Next
Set sourceXL = GetObject(, "Excel.Application")

'~~> If not found then create new instance
If Err.Number <> 0 Then
    Set sourceXL = CreateObject("Excel.Application")
End If
Err.Clear
On Error GoTo 0

Set sourceBook = sourceXL.Workbooks.Open(filepath)
Set sourceSheet = sourceBook.Sheets("Measurements")
Set sourceSheetSum = sourceBook.Sheets("Analysis Summary")

lRow = sourceSheetSum.Range("C" & sourceSheetSum.Rows.Count).End(xlUp).Row
measName = sourceSheetSum.Range("C3:C" & lRow)

lRow = sourceSheetSum.Range("D" & sourceSheetSum.Rows.Count).End(xlUp).Row
partName = sourceSheetSum.Range("D3:D" & lRow)
于 2012-06-08T17:23:49.673 回答
-1

在副本对我有用之前删除范围选择。感谢您的帖子。

于 2014-11-20T15:58:34.733 回答