'日期添加
Sub addDate(d)
Dim rg As Range, dd As Date d = Split(d, "-")()
d = Replace(d, ".", "/")
dd = CDate(d)
r = ActiveSheet.Range("a65536").End(xlUp).Row
'[d2] = dd
Dim i As Integer '一天8次课,循环4次结束一天
i =
For Each rg In Range("D2:D" & r)
i = i +
If i = Then
i =
dd = rg.Offset(-, ).Value +
End If
rg = dd
Next
End Sub
'创建新表
Sub createsheet(sname)
On Error Resume Next
Set ws = Worksheets(sname)
If ws Is Nothing Then
Set ws = Worksheets.Add
ws.Name = sname
Else
ws.Cells.Clear
End If
ws.Range("a1:j1") = Array("周序", "简称", "教学班次", "日期", "星期", "节次", "课程名称", "任课教员", "上课地点", "页码")
End Sub
'拆开合并单元格
Sub devideMerge()
Dim r As Integer, rg As Range, i As Integer r = Range("a65536").End(xlUp).Row
For i = To r
If (Range("e" & i).MergeCells) Then Range("e" & i).UnMerge
tempValue = Range("e" & i).Value
If (tempValue = "") Then
Range("E" & i).Value = Range("e" & (i - )).Value End If
Next
End Sub
'删除空行
Sub delBlank()
Dim c As Range, r As Integer
r = Range("a1").CurrentRegion.Rows.Count For i = To r
Set c = Range("b" & i)
If c.MergeCells Then c.EntireRow.Delete
Next r = Range("a1").CurrentRegion.Rows.Count For i = r To Step -
Set c = Range("b" & i)
If c.MergeCells Or IsEmpty(c) Then c.EntireRow.Delete
Next End Sub
'生成总周课表
Sub totalSheet()
On Error Resume Next
strname = "总周课表"
Dim ws As Worksheet, obj As Worksheet, r As Integer Set ws = Worksheets(strname)
If ws Is Nothing Then
Set ws = Worksheets.Add
ws.Name = strname
Else
ws.Cells.Clear
End If
ws.Range("a1:j1") = Array("周序", "简称", "教学班次", "日期", "星期", "节次", "课程名称", "任课教员", "上课地点", "页码") For Each obj In Worksheets
If (obj.Name <> strname And obj.Name Like "*-周课表") Then
r = obj.UsedRange.Rows.Count obj.Select
obj.Rows("2:" & r).Select
Selection.Copy
ws.Select
ws.Range("a65536").End(xlUp).Offset(, ).Select
ActiveSheet.Paste '选中一个单元格
obj.Range("a1").Select
End If
Next
ws.Range("a1").Select End Sub Sub 生成周课表()
'
' 生成周课表 宏
'
' 快捷键: Ctrl+k
'
Application.ScreenUpdating = False Const copycol =
Dim ws As Worksheet, cws As Worksheet, upNo As Integer, r As Integer, cname As String, rg As Range, str As String, curRow For Each ws In Worksheets
'创建新表-周课表
cname = ws.Name + "-周课表"
createsheet cname
Set cws = Worksheets(cname) upNo = ws.Range("a:a").Find("序号").Row '开始复制内容
For i = To upNo -
curRow = * (i - ) +
'简称
ws.Range("C" & i & ":AD" & i).Copy
cws.Range("B" & curRow & ":B" & curRow * copycol).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
'节次
ws.Range("C3:AD3").Copy
cws.Range("f65536").End(xlUp).Offset(, ).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
'星期
ws.Range("C2:AD2").Copy
cws.Range("E65536").End(xlUp).Offset(, ).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True '周序
str = ws.Range("a" & i).Value
cws.Range("a65536").End(xlUp).Offset(, ).Resize(copycol, ).Select
Selection = str Next
'日期处理
cws.Select
addDate ws.Range("b4").Value '删除空行
r = cws.Range("a65536").End(xlUp).Row
delBlank '课程名称
str = ws.Range("f1").Value
cws.Range("C65536").End(xlUp).Offset(, ).Resize(cws.Range("a65536").End(xlUp).Row - , ).Select
Selection = str '页码
str = ws.Range("aa65536").End(xlUp).Value
cws.Range("J65536").End(xlUp).Offset(, ).Resize(cws.Range("a65536").End(xlUp).Row - , ).Select
Selection = str '查找
r = ws.Range("a65536").End(xlUp).Row
For k = upNo + To r
Set rg = ws.Range("g" & k)
If Not IsEmpty(rg) And Not rg.MergeCells Then
For g = To cws.Range("b65536").End(xlUp).Row
Set crg = cws.Range("b" & g)
If (crg.Value = rg.Value) Then cws.Range("G" & g) = ws.Range("b" & k).Value '课程名称
cws.Range("H" & g) = ws.Range("n" & k).Value '任课教员
cws.Range("I" & g) = ws.Range("AA" & k).Value '上课地点
End If
Next
End If
Next
'把星期重新分开
devideMerge '添加边框
cws.UsedRange.Borders.LineStyle = xlContinuous Next
Application.ScreenUpdating = True '生成总周课表
totalSheet
End Sub Sub 查看上课情况()
Application.ScreenUpdating = False Dim jc As String, username As String, startRow As Integer, lastRow As Integer Dim curWs As Worksheet, ws As Worksheet, rg As Range Set curWs = ActiveSheet username = curWs.Range("af2").Value
If Len(username) = Then
MsgBox "请在AF2单元格添写上课教员"
Range("af1") = "上课教员:"
Range("af2").Select
Exit Sub
End If '标记当前活动表
startRow = curWs.Range("a:a").Find("序号").Row
lastRow = curWs.Range("a:a").Find("序号").End(xlDown).End(xlDown).Row
'MsgBox startRow & ":" & lastRow
'找教员上的课程简称
For x = startRow + To lastRow - If (curWs.Range("n" & x).Value Like "*" & username & "*") Then jc = curWs.Range("g" & x).Value
'简称不能为空
If (jc <> "") Then
'如果找到就从课表中寻找上的课并添加底色
For Each rg In curWs.Range("c4:ad" & startRow - )
If rg.Value = jc Then '找到
rg.Interior.ColorIndex =
End If
Next
End If
End If
Next MsgBox "表有" & Worksheets.Count '循环所有表除了本表外
For Each ws In Worksheets
If (ws.Name <> curWs.Name) Then
startRow = ws.Range("a:a").Find("序号").Row
lastRow = ws.Range("a:a").Find("序号").End(xlDown).End(xlDown).Row '找教员上的课程简称
For i = startRow + To lastRow -
If (Range("n" & i).Value Like "*" & username & "*") Then jc = ws.Range("g" & i).Value
'从所有单元格中找
' MsgBox jc
If (jc <> "") Then
For Each rg In ws.Range("c4:ad" & startRow - )
If rg.Value = jc Then '找到
curWs.Range(rg.Address).Interior.ColorIndex =
End If
Next
End If
End If
Next End If Next
Application.ScreenUpdating = True End Sub '清楚背景色标记
Sub 清楚背景色标记()
ActiveSheet.Cells.Interior.ColorIndex =
End Sub

VBA练习-复杂一点的更多相关文章

  1. VB类模块中属性的参数——VBA中Range对象的Value属性和Value2属性的一点区别

    在VB中,属性是可以有参数的,而VBA中属性使用参数非常常见.比如最常用的:Worksheet.Range("A1:A10")  VB的语法,使用参数的不一定是方法,也有可能是属性 ...

  2. excel查看VBA代码快捷键

    公司现在的很多自动化代码生成使用excel VBA,本来这事跟自己一点关系打不着,不过计划年底切换中间件,这得导致部分代码结构调整,自己还得去调整测试,老忘掉这快捷键,特记录下,Alt + F11

  3. MicroStation VBA基础

    实习笔记1 2016年8月1日 14:12 Option Explicit 缺省情况下,如果使用一个没有声明的变量,它将继承“Variant”类型.在模块.窗体和类的通用声明区使用“OptionExp ...

  4. Excel VBA自动添加证书(二)

    继续上次没有写完的随笔,本来是很想一次性写完的,但是到中午一点了还没有吃东西,其实饿的不行了,还好写博客时会自动保存,中间电脑实然蓝屏,花了二个多小时写的没有点击保存,吓我一下,以为会全没了. 前面讲 ...

  5. VBA中自定义类和事件的(伪)注册

    想了解一下VBA中自定义类和事件,以及注册事件处理程序的方法. 折腾了大半天,觉得这样的方式实在称不上“注册”,所以加一个“伪”字.纯粹是瞎试,原理也还没有摸透.先留着,有时间再接着摸. 做以下尝试: ...

  6. VBA对象模型(2)

    Excel对象模型简介 在介绍Excel对象模型之前,让我们先来看一个简单的例子.大多数工厂都是按这样的结构进行设置的:最上层为工厂总部,第二层次分为各个车间,在车间下面又分各班组.就这样组织在一起, ...

  7. excel中VBA的使用

    遇到的问题 在工作中遇到了一点小小的问题,需要给我负责带的班级的同学们测试男生1000米,女生800米的成绩.表格是这样的: 体育成绩表 序号 班级 姓名 性别 男1000.女800 成绩 1 1 张 ...

  8. VBA编程的工程性规划

    看过很多人写的VBA代码,一团一团的,一点规划都没有,为了VBA编程更具工程性,这里讨论一下,并列出自己的一些建议:0.给VBA工程定义一个名字,而非直接使用默认的名称——"VBAProje ...

  9. R语言︱用excel VBA把xlsx批量转化为csv格式

    笔者寄语:批量读取目前看到有以下几种方法:xlsx包.RODBC包.批量转化成csv后读入.本章来自博客:http://www.cnblogs.com/weibaar/p/4506144.html 在 ...

随机推荐

  1. MongoDB入门---文档操作之增删改

    之前的两篇文章,已经分享过关于MongoDB的集合还有数据库的各种操作,接下来就涉及到最主要的喽,那就是数据方面的操作,在这里叫做文档操作.话不多说,大家来看正文.     首先来看一下它的数据结构: ...

  2. NoSQL入门第三天——Redis配置文件与持久化

    一.解析Redis配置文件redis.conf (Linux下配置多于编码) 1.它在哪 由于我是在root的家目录下载安装的,默认的安装位置就是: conf就在这里: 根据经验,出厂的conf永远不 ...

  3. 20154327 Exp3 免杀原理与实践

    实践内容 基础问题回答 (1)杀软是如何检测出恶意代码的? 杀毒软件主要靠特征码进行查杀,匹配到即为病毒. 还有通过云查杀,查看云端库中该文件是否属于恶意代码. 跟踪该程序运行起来是否存在恶意行为,来 ...

  4. cocos2d-x3.7 cclabel文字破碎,异常,变乱

    效果图如下: 无论是按钮(control button),还是普通的label都有小概率出现这种情况. 该问题发现于cocos2d-x3.7 原因: 在3.x中使用ttfconfig创建的label, ...

  5. Redis系列五 Redis持久化

    Redis持久化 一.RDB(Redis DataBase) 1.介绍 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里. Red ...

  6. Java图片转字符

    很久都没有更新博客了,昨天下午一个朋友问我能不能将一张图片转换成字符画,然后我想我这个朋友不知道,也许有的朋友以不知道,我就简单的分享一下 package com.xsl.zhuanhuan; imp ...

  7. 关联分析FPGrowth算法在JavaWeb项目中的应用

    关联分析(关联挖掘)是指在交易数据.关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式.关联.相关性或因果结构.关联分析的一个典型例子是购物篮分析.通过发现顾客放入购物篮中不同商品之 ...

  8. fiddler不经意的功能

    捕获指定客户端的请求,直接食用 窗口分离,直接食用 Hide this column  隐藏此列Ensure all columns are visible   显示默认所有列Customize co ...

  9. Java开发工程师(Web方向) - 04.Spring框架 - 第1章.Spring概述

    第1章.Spring概述 Spring概述 The Spring Framework is a lightweight solution and a potential one-stop-shop f ...

  10. ionic typescript--验证码发送倒计时功能

    1.新建页面 ionic g page forget   2.mode.html文件 <ion-item> <ion-input clearInput [(ngModel)]='co ...