作者Lanjaja ()
看板Office
标题[算表] Excel定义多维阵列的长度
时间Tue Mar 23 18:36:11 2021
软体:Excel
版本:Office 2013
各位先进好!
我想请问一下在定义多维动态阵列时,
假如我需要计算一个适当的大小,
例如
变数经过运算後得到三个变数值mini = 3, maxi = 15, size = 8
想让程式根据程式过程中得到的变数值而量身订做一个多维矩阵
Dim matrix(mini To maxi,1 To length) as integer
就会出错,说length必须要是常数,
可是mini To maxi都没有问题,
就只有length有问题,
好奇怪!
不知道板上先进能不能解释一下问题出在哪里?该如何解套?
感谢各位先进的帮忙~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.134.107.3 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1616495773.A.820.html
1F:→ soyoso: mini To maxi都没有问题,就只有length有问题,这方面可以 03/23 20:14
2F:→ soyoso: 只以mini To maxi 03/23 20:14
4F:→ soyoso: 还是有问题的 03/23 20:14
5F:→ soyoso: 先宣告matrix() as .... 03/23 20:14
6F:→ soyoso: 再redim matrix(mini to maxi, 1 to....) ... 03/23 20:14
7F:→ soyoso: 另外内文变数值要在执行redim前正确取得 03/23 20:21
8F:→ Lanjaja: 请问s大 我如果一开始先dim matrix() as 程式会不会以为 03/25 01:37
9F:→ Lanjaja: 我只是在定义一维向量?但其实我想要的是二维向量 03/25 01:37
10F:→ Lanjaja: 我试的结果 似乎是多维度的最後一个维度长度不能是变数 03/25 01:38
11F:→ Lanjaja: S大因为用一维的 所以maxi会出现问题 03/25 01:38
12F:→ Lanjaja: 还是我有误解? 03/25 01:38
13F:→ soyoso: 不是,用一维会误会的话,一样也用二维 03/25 07:22
14F:→ soyoso: Dim matrix(mini To maxi,1 To length) as integer,标记 03/25 07:22
15F:→ soyoso: 在length 03/25 07:22
16F:→ soyoso: Dim matrix(mini To maxi, 1 To 10) As Integer,标记在 03/25 07:22
17F:→ soyoso: maxi 03/25 07:22
18F:→ soyoso: Dim matrix(mini To 10, 1 To 10) As Integer,标记在mini 03/25 07:22
19F:→ soyoso: 必须是常数运算式 03/25 07:22
20F:→ soyoso: 所以维度的上限(上标)或是下限(下标)只要是变数就会错误, 03/25 07:22
21F:→ soyoso: 而非最後一个不能是变数 03/25 07:22
22F:→ soyoso: dim matrix()是动态的,不会只是定义一维,就看之後redim 03/25 07:24
23F:→ soyoso: 补充一下,内文写到length必须要是常数,可是mini To maxi 03/25 07:59
24F:→ soyoso: 都没有问题,这并不是指mini To maxi是正确的,而是在取得 03/25 07:59
25F:→ soyoso: 1 To length这个上下限(标)时就产生错误,所以标记在 03/25 07:59
26F:→ soyoso: length这个地方 03/25 07:59
27F:→ Lanjaja: 谢谢s大,接下来就有个问题,我应该要怎麽把length mini 03/25 14:51
28F:→ Lanjaja: maxi的数值取出来变常数?例如我定义另一个const lgth as 03/25 14:51
29F:→ Lanjaja: intger = length 会发生错误 可是这些变数是在程式计算过 03/25 14:52
30F:→ Lanjaja: 程中计算出来的 我事先没办法知道 也不想中断程式 所以想 03/25 14:52
31F:→ Lanjaja: 知道如何把mini maxi length的数值取出来摆在matrix定义 03/25 14:53
32F:→ Lanjaja: 中而不会发生错误?谢谢您的帮忙 03/25 14:53
33F:→ soyoso: 那不要在程序内宣告而是移到模组Module的最上方宣告,写入 03/25 15:54
34F:→ soyoso: 值後也可以用於其他程序内,不同模组的话内public 03/25 15:54
35F:→ Lanjaja: 不太懂s大的意思 是说如果在模组最上用public宣告 可是变 03/26 23:03
36F:→ Lanjaja: 数还是变数 matrix()就会把public变数当常数看待吗? 03/26 23:04
37F:→ soyoso: 写入值到变数後,如果不再重新写入值,那变数内的值也就是 03/27 06:38
38F:→ soyoso: 不变的常数 03/27 06:38
39F:→ soyoso: 调整一下,除不再重新写入值外,或重新写入值都是相同时, 03/27 07:14
40F:→ soyoso: 也会是常数 03/27 07:14
41F:→ Lanjaja: 其实变数之後还会用到 所以我另外创一个变数去等於length 03/29 03:41
42F:→ Lanjaja: 还是会发生错误的讯息 所以不知道是不是VBA不能接受变数 03/29 03:42
43F:→ soyoso: 创一个变数去等於length还是会发生错误的讯息指的是什麽, 03/29 06:35
44F:→ soyoso: 是指const lgth as intger = length这样会有错误讯息吗? 03/29 06:35
45F:→ soyoso: 如果是的话,是的,无法这样写,这原po测试就发生错误讯息 03/29 06:35
46F:→ soyoso: 了;那变数之後用的到,这里"之後"指的如是执行巨集过程内 03/29 06:35
47F:→ soyoso: 要将这个变数保留,於另一个程序内取得的话,就如我03/25 03/29 06:35
48F:→ soyoso: 15:54回文的方式。这方面就试试,试了无法达成,就提供如 03/29 06:35
49F:→ soyoso: 何写的和要的结果,会比较清楚 03/29 06:35
50F:推 waiter337: dim matrix 04/04 01:15
51F:→ waiter337: redim matrix(mini To maxi,1 To length) 04/04 01:15