2015-06-12 15 views
8

Tôi đã tuyên bố một mảng như vậy Dim rArray() As Variant nhưng khi tôi cố gắng và sử dụng các giá trị được lưu trữ trong nó (như hình dưới đây) tôi nhận được một subscript ra khỏi phạm vi lỗi. UBound(rArray)LBound(rArray) cả hai giá trị trả về 14 và 1, nhưng lỗi xảy ra tại dòng Debug.Print.Chỉ số lỗi phạm vi với một mảng - không biết tại sao?

Nếu tôi sử dụng câu lệnh for như sau

For Each rArr in rArray 

sau đó nó hoạt động mà không vấn đề, nhưng đối với mục đích tôi đang tạo ra mảng này tôi cần sự linh hoạt để chọn từng mục lưu trữ trong đó mỗi phiên có nghĩa là tôi cần để chỉ họ bằng cách sử dụng các bảng con.

Tôi đã thử nhiều cách để thử và giải quyết vấn đề này mà không có may mắn và dành gần nửa ngày của tôi cho vấn đề này. Bất cứ ai có thể chỉ ra những gì tôi cần phải thay đổi để có được điều này để làm việc.

Set rng = Range("D4", Range("D4").End(xlDown)) 
rng.NumberFormat = "0" 
rArray = rng.Value 

For x = UBound(rArray) To LBound(rArray) Step -1 
    Debug.Print rArray(x) 
Next x 

Chỉnh sửa: một thực tế đáng chú ý khác là mảng được khai báo và sử dụng trong hàm nhưng không được chuyển từ hoặc sang hàm. Các mảng không thể được khai báo và sử dụng trong các hàm?

+0

Tôi không phải là chuyên gia, nhưng nếu bạn in x và xem giá trị của x vấn đề xảy ra tại – barlop

+0

Cảm ơn bạn. Tôi không phải in x, trong khi gỡ lỗi tôi có thể thấy giá trị của x là 14 là nơi mà vòng lặp bắt đầu từ - có 14 mục được lưu trữ trong mảng. –

+0

là bước khắc phục sự cố, nếu bạn xóa vòng lặp và thử x = 13 thì sao? và thử x = 1 – barlop

Trả lời

7

Khi bạn gán giá trị trong worksheet để một mảng biến thể, bạn luôn cuối với một mảng 2-D đó là dựa (ví dụ 1 cái gì đó, 1 cái gì đó; bao giờ 0 đến điều gì đó, 0 một cái gì đó). Nếu bạn nhận được các giá trị từ một cột duy nhất, thứ hạng thứ hai chỉ là 1 đến 1.

Điều này có thể được chứng minh bằng những điều sau đây.

Dim x As Long, rArray As Variant, rng As Range 

Set rng = Range("D4", Range("D4").End(xlDown)) 
rng.NumberFormat = "0" 'don't really understand why this is here 
rArray = rng.Value 

Debug.Print LBound(rArray, 1) & ":" & UBound(rArray, 1) 
Debug.Print LBound(rArray, 2) & ":" & UBound(rArray, 2) 

For x = UBound(rArray, 1) To LBound(rArray, 1) Step -1 
    Debug.Print rArray(x, 1) 
Next x 

Vì vậy, bạn cần yêu cầu yếu tố trong thứ hạng đầu tiên của mảng; nó là không đủ để chỉ yêu cầu cho các yếu tố.

+0

Cảm ơn một lần nữa Jeeped. Vì vậy, nếu tôi thay đổi mảng thành Integer 'Dim rArray() As Integer' thì nó sẽ hoạt động đúng - nhưng nó không? –

+0

Tôi thành thật không nghĩ rằng bạn có thể công cụ giá trị bảng tính vào bất cứ điều gì nhưng một mảng biến thể, trừ khi bạn lặp qua các tế bào và cư trú các mảng riêng lẻ. Đôi khi tư duy out-of-the-box chỉ đơn giản là sẽ không hoạt động. Gắn bó với các mảng biến thể. – Jeeped

+0

Cảm ơn bạn! Đánh giá cao thời gian và công sức. Tôi đã hỏi vì tôi chưa bao giờ làm việc với mảng 2-D trước đây, vì vậy có thể tốn nhiều thời gian hơn cho tôi. Nhưng tôi rất vui khi được học - chỉ trong một thời gian hạn hẹp. –

Các vấn đề liên quan