Excel精英培训网

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

求助:为什么D列没有试室号生成时出错,

[复制链接]
发表于 2013-6-17 16:57 | 显示全部楼层 |阅读模式
本帖最后由 qinhuan66 于 2013-6-17 20:52 编辑

求助:为什么D列没有试室号生成时出错,谢谢
求助为什么为有试室号生成时时出错.rar (34.83 KB, 下载次数: 10)
发表于 2013-6-17 19:14 | 显示全部楼层
arr(arr0(i, 4) * 17 - 16, 2) = "考场地址:“

D列无数据时,这数据成负数了,你的数组可不是从负数开始的嘛。
回复

使用道具 举报

发表于 2013-6-17 19:15 | 显示全部楼层
回复

使用道具 举报

发表于 2013-6-17 19:16 | 显示全部楼层
你这代码应用得不错了,从医院到教育系统。
回复

使用道具 举报

 楼主| 发表于 2013-6-17 20:51 | 显示全部楼层
hwc2ycy 发表于 2013-6-17 19:15

谢谢您老师换成这样可以了
Private Sub CommandButton1_Click()With Sheets("座位安排表") '自己加进去解除密码
.Unprotect ("695360052") '自己加进去解除密码
Range("A3:S2000").ClearContents '先删除A列3至2000的单元格数据
Dim i As Integer, j As Integer, RoomNo As Integer, RowsInRoom As Integer, PeopleInRoom As Integer, arr0, arr
arr0 = Sheets("数据库").UsedRange
ReDim arr(1 To UBound(arr0), 1 To 19)
For i = 3 To UBound(arr0)
If arr0(i, 1) <> "" Then
    PeopleInRoom = Application.WorksheetFunction.CountIf(Sheets("数据库").Range("D3:D65535"), arr0(i, 4))
    RowsInRoom = IIf(PeopleInRoom Mod 5, PeopleInRoom \ 5 + 1, PeopleInRoom \ 5)
    If IsNumeric(arr0(i, 4)) And arr0(i, 4) > 0 Then
    arr(arr0(i, 4) * 17 - 16, 2) = "考场地址:"
    arr(arr0(i, 4) * 17 - 16, 4) = arr0(i, 10)
    arr(arr0(i, 4) * 17 - 16, 14) = "试室号:"
    arr(arr0(i, 4) * 17 - 16, 16) = "第" & Replace(Application.WorksheetFunction.Text(arr0(i, 4), "[DBNum1][$-804]General"), "一十", "十") & "试室"
    arr(arr0(i, 4) * 17 - 14, 9) = "讲  台"
    Else
    MsgBox "试室号填写不全": Exit Sub
    End If
    For j = 1 To PeopleInRoom
        arr((arr0(i, 4) - 1) * 17 + IIf(((j - 1) \ RowsInRoom) Mod 2, RowsInRoom * 2 + 3 - ((j - 1) Mod RowsInRoom) * 2, ((j - 1) Mod RowsInRoom) * 2 + 5), _
            ((j - 1) \ RowsInRoom) * 4 + 3) = Format(j, "00")
        arr((arr0(i, 4) - 1) * 17 + IIf(((j - 1) \ RowsInRoom) Mod 2, RowsInRoom * 2 + 3 - ((j - 1) Mod RowsInRoom) * 2, ((j - 1) Mod RowsInRoom) * 2 + 5), _
            ((j - 1) \ RowsInRoom) * 4 + 2) = arr0(i + j - 1, 6)
        arr((arr0(i, 4) - 1) * 17 + IIf(((j - 1) \ RowsInRoom) Mod 2, RowsInRoom * 2 + 3 - ((j - 1) Mod RowsInRoom) * 2, ((j - 1) Mod RowsInRoom) * 2 + 5), _
            ((j - 1) \ RowsInRoom) * 4 + 1) = "准考证号"
        arr((arr0(i, 4) - 1) * 17 + IIf(((j - 1) \ RowsInRoom) Mod 2, RowsInRoom * 2 + 4 - ((j - 1) Mod RowsInRoom) * 2, ((j - 1) Mod RowsInRoom) * 2 + 6), _
            ((j - 1) \ RowsInRoom) * 4 + 2) = arr0(i + j - 1, 1)
        arr((arr0(i, 4) - 1) * 17 + IIf(((j - 1) \ RowsInRoom) Mod 2, RowsInRoom * 2 + 4 - ((j - 1) Mod RowsInRoom) * 2, ((j - 1) Mod RowsInRoom) * 2 + 6), _
            ((j - 1) \ RowsInRoom) * 4 + 1) = "姓名"
    Next j
    i = i + Application.WorksheetFunction.CountIf(Sheets("数据库").Range("D3:D1000"), arr0(i, 4)) - 1
End If
Next i
Sheets("座位安排表").Range("A1").Resize(UBound(arr, 1), 19) = arr
.Protect ("695360052") '自己加进去上锁密码
    End With '自己加进去上锁密码
End Sub


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 20:48 , Processed in 0.237187 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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