Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4851|回复: 8

求助数组问题

[复制链接]
发表于 2020-8-3 14:45 | 显示全部楼层 |阅读模式
3学分
各位大神,为什么从这里开始 数组值为空 赋值就提示类型错误,有什么好的解决办法?谢谢


Sub JJ()

Dim arr(), brr(), iRows As Integer, i As Integer, iocv As Double, iimp As Integer, iccv As Double, iocv1 As String, iimp1 As String, iccv1 As String
Dim K As Integer, M As Integer, m1 As Integer, N As Integer, n1 As Integer
iRows = Worksheets("111").Range("a" & Rows.Count).End(xlUp).Row - 4


arr = Worksheets("111").Range("a5:d" & iRows + 4).Value

iocv = Worksheets("111").Range("g3").Value
iocv1 = Worksheets("111").Range("g2").Value
iimp = Worksheets("111").Range("h3").Value
iimp1 = Worksheets("111").Range("h2").Value
iccv = Worksheets("111").Range("i3").Value
iccv1 = Worksheets("111").Range("i2").Value


M = UBound(arr, 1)
N = UBound(arr, 2)
ReDim brr(1 To M, 1 To N)
K = 0
For i = 1 To M

    If Evaluate(arr(i, 2) & iocv1 & iocv) Then
    K = K + 1
        For j = 1 To N

            brr(K, j) = arr(i, j)
        Next j
    End If
Next i

m1 = UBound(brr, 1)
n1 = UBound(brr, 2)
ReDim arr(1 To m1, 1 To n1)
For i = 1 To m1
        For j = 1 To n1
            arr(i, j) = brr(i, j)
        Next j
Next i




M = UBound(arr, 1)
N = UBound(arr, 2)
ReDim brr(1 To M, 1 To N)
K = 0
For i = 1 To M
    If arr(i, 1) = "" Then Exit For   '为什么从这里开始 数组值为空 赋值就提示类型错误,有什么好的解决办法
    If Evaluate(arr(i, 3) & iimp1 & iimp) Then
    K = K + 1
        For j = 1 To N
            brr(K, j) = arr(i, j)
        Next j
    End If
Next i

m1 = UBound(brr, 1)
n1 = UBound(brr, 2)
ReDim arr(1 To m1, 1 To n1)
For i = 1 To m1
        If brr(i, 1) = "" Then Exit For
        For j = 1 To n1
            arr(i, j) = brr(i, j)
        Next j
Next i





M = UBound(arr, 1)
N = UBound(arr, 2)
ReDim brr(1 To M, 1 To N)
K = 0
For i = 1 To M
    If arr(i, 1) = "" Then Exit For
    If Evaluate(arr(i, 4) & iccv1 & iccv) Then
    K = K + 1
        For j = 1 To N
            brr(K, j) = arr(i, j)
        Next j
    End If
Next i

m1 = UBound(brr, 1)
n1 = UBound(brr, 2)
ReDim arr(1 To m1, 1 To n1)
For i = 1 To m1
        If brr(i, 1) = "" Then Exit For
        For j = 1 To n1
            arr(i, j) = brr(i, j)
        Next j
Next i





M = UBound(arr, 1)
N = UBound(arr, 2)
iRows = Worksheets("111").Range("F" & Rows.Count).End(xlUp).Row
Worksheets("111").Range("F5:I" & iRows).Clear
Worksheets("111").Range("F5").Resize(M, N).Value = arr


iRows = Worksheets("111").Range("F" & Rows.Count).End(xlUp).Row
With Range("F5:I" & iRows).CurrentRegion
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = True
        .ReadingOrder = xlContext
        .MergeCells = False
    End With

With Range("F5:I" & iRows)
  .Borders(xlDiagonalDown).LineStyle = xlNone
   .Borders(xlDiagonalUp).LineStyle = xlNone
   .Borders(xlEdgeLeft).LineStyle = xlNone
  .Borders(xlEdgeTop).LineStyle = xlNone
  .Borders(xlEdgeBottom).LineStyle = xlNone
  .Borders(xlEdgeRight).LineStyle = xlNone
   .Borders(xlInsideVertical).LineStyle = xlNone
   .Borders(xlInsideHorizontal).LineStyle = xlNone
End With

With Range("F5:I" & iRows)
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).LineStyle = xlContinuous
.Borders(xlEdgeTop).Weight = xlThin
.Borders(xlEdgeBottom).Weight = xlThin
End With


End Sub

111.zip

33.09 KB, 下载次数: 4

发表于 2020-8-3 20:22 | 显示全部楼层
我下载你文件可以运行啊,没有任何错误提示,我是2010本版;
虽然能运行,但我检查arr(i,1)的时候,发现它是数字,数字与空格是不能放一起判断的,出错的概率很大;
1.png
回复

使用道具 举报

发表于 2020-8-3 20:49 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2020-8-7 17:00 | 显示全部楼层
hfwufanhf2006 发表于 2020-8-3 20:22
我下载你文件可以运行啊,没有任何错误提示,我是2010本版;
虽然能运行,但我检查arr(i,1)的时候,发现它 ...

因为我加了 If arr(i, 1) = "" Then Exit For 这个判断,但是不知哪里出了问题,你把这个行代码去掉再运行就出错
回复

使用道具 举报

 楼主| 发表于 2020-8-7 17:03 | 显示全部楼层
hfwufanhf2006 发表于 2020-8-3 20:22
我下载你文件可以运行啊,没有任何错误提示,我是2010本版;
虽然能运行,但我检查arr(i,1)的时候,发现它 ...

因为我 加了这行代码 If arr(i, 1) = "" Then Exit For  才正常,不知道哪里的问题,去除这个判断就出错。
回复

使用道具 举报

 楼主| 发表于 2020-8-7 17:04 | 显示全部楼层
zgwei050 发表于 2020-8-3 20:49
我也是2010,运行正常

因为我 加了这行代码 If arr(i, 1) = "" Then Exit For  才正常,不知道哪里的问题,去除这个判断就出错。
回复

使用道具 举报

 楼主| 发表于 2020-8-7 17:06 | 显示全部楼层
补充一下 因为我 加了这行代码 If arr(i, 1) = "" Then Exit For  才正常,猜到可能是空格的原因,但是不知道哪里的问题,去除这个判断就出错,请各位帮忙看看什么原因,谢谢
回复

使用道具 举报

 楼主| 发表于 2020-8-7 17:14 | 显示全部楼层
是不是 空值不能在 数组间相互赋值?  brr(K, j) = arr(i, j)
回复

使用道具 举报

发表于 2020-8-7 23:20 | 显示全部楼层
你应该了解一下Evaluate这个函数的具体用法。

评分

参与人数 1学分 +3 收起 理由
lsyylw + 3 学习

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-16 23:44 , Processed in 0.165470 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表