ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的测验 > Excel VBA > 罗刚君VBA免费课作业题】之第20课作业

罗刚君VBA免费课作业题】之第20课作业

作者:绿色风 分类: 时间:2022-08-18 浏览:198
楼主
罗刚君
罗刚君VBA免费课作业题】之第20课作业

提示:此题目是“VBA入门免费教学群”(群号:30729794)的课后作业
请未参与听课者绕道,谢谢配合。
_____________________________________________________

题一:
  1. Sub 创建日期批注()
  2.     Dim Com As Comment     '声明一个代表批注的变量
  3.     Set Com = Range("A1").Comment '将A1的批注对象赋值给变量
  4.     If TypeName(Com) = "Nothing" Then '如果Com未初值化(即A1单元格没有批注)
  5.         Range("a1").AddComment.Text CStr(Date) '那么创建一个批注,批注的内容为今日日期
  6.     Else    '否则
  7.         Com.Text Com.Text & Chr(10) & Date  '在com的原有内容后面追加今日日期
  8.     End If
  9. End Sub
对批注写入字符时,只能使用文本,而日期是一个数值,因此需要利用Cstr函数将日期转换成文本再导入到批注中。
请问为什么第二句“Com.Text Com.Text & Chr(10) & Date”中可以不用Cstr函数也可以让代码正常行行呢?
题目二:
  1. '保存工作簿时执行此过程
  2. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  3.   Dim rng As Range  '声明一个单元格对象变量
  4.   Set rng = Range("a10")  '对对象赋值
  5.   If Len(rng) = 0 Then  '如果变量所代表的单元格是空白的
  6.     Cancel = True     '禁止关闭
  7.     MsgBox rng.Address & "单元格不能空白!", vbOKOnly, "友情提示" '提示用户
  8.   End If
  9. End Sub
以上代码设置了A1单元格空白则禁止关闭工作簿,这是为了禁止他人忘记填写必填项而设计的防错撒施。问题是我们在设计这个工作簿时模板时,我们自己如何保存并关闭工作簿呢?
问题三:
如何实现工作簿只能在2013年7月31日以前打开?如果超过了7月31日,那么打开工作簿后工作簿会自动关闭。
提示:将过程命名为“Auto_open”可让代码随工作簿开启而自动执行,将过程命名为“Auto_Close”可让代码随工作簿关闭而自动执行。



_____________________________________________________
补充:“VBA入门免费教学群”(群号:30729794)每周三上课一次,有兴趣者皆可报名,永远免费。
请提交作业时注明在免费听课群的昵称。三次不交作业者,将踢出群,让出空间让更多的人进来听课,请大家配合。

2楼
静思雨
1、& 连接时 默认就是想string转换 所以不需要cstr转换
2、
'保存工作簿时执行此过程
Private Sub Workbook_BeforeClose(Cancel As Boolean)
   Dim rng As Range  '声明一个单元格对象变量
  Set rng = Range("a10")  '对对象赋值
  If Len(rng) = 0 Then  '如果变量所代表的单元格是空白的
    Cancel = false     '准许关闭
    MsgBox rng.Address & "单元格不能空白!", vbOKOnly, "友情提示" '提示用户
  End If
End Sub

3、
Sub Auto_Open()
     If Date > #2013-7-31# Then
      ThisWorkbook.Close
      Application.Quit
     End If
End Sub
3楼
wendel
1、因为表达式中使用了字符连接运算符:&,日期这里被VBA转变为字符串参与运算。

2、'保存工作簿时执行此过程
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Dim rng As Range  '声明一个单元格对象变量
  Set rng = Range("a10")  '对对象赋值
  If Len(rng) = 0 Then  '如果变量所代表的单元格是空白的
    Cancel = false     '准许关闭
    MsgBox rng.Address & "单元格不能空白!", vbOKOnly, "友情提示" '提示用户
  End If
End Sub

3、Sub auto_open()
    If Now() > #7/31/2013# Then
        MsgBox "该工作簿不能于2013年7月31日后使用", vbOKOnly
        Application.Quit
    End If
End Sub
4楼
kcxs
客城小生的作业
1、答:因为前面有文本内容连接,也就变成文本了。
2、答:方法1:在A10录入任意数据,然后不保存更改关闭。然后新建一个工作薄,在模块中录入如下代码:
Sub 关闭第一个工作簿()
Workbooks(1).Close SaveChanges:=False   '关闭工作簿,不保存更改
End Sub
方法2:新建一个工作薄,在模块中录入如下代码:
Sub 关闭第一个工作簿()
    Workbooks(1).Worksheets(1).Range("a10") = 1 '对第一个工作簿第1个工作表的A10单元格赋值为1
    '关闭第一个工作簿
    Workbooks(1).Close SaveChanges:=False   '关闭工作簿,不保存更改
End Sub
3、答:
Sub Auto_open()
    Dim LastSaveTime As Date    '声明变量,日期型变量
    LastSaveTime = ActiveWorkbook.BuiltinDocumentProperties("Last Save Time").Value    '计算最后一次保存时间
    If LastSaveTime - DateValue("2013-07-31") > 0 Then  '如果超过了2013年7月31日
        ActiveWorkbook.Close , False    '关闭
    End If
End Sub
5楼
健康快乐123
第一题:因为第一个是空的所有需要把日期变为文本才能填入,而第二个中已经有文本了再连接上日期它还是文本,所以可以填入。
第二题:
第三题:
6楼
冰淇林的冬天
第一题
数值单独存在的时候是数值,当数值和文本在一起的时候,数值就自动转为文本
就像在A1单元格输入1时,1表是数值,但在输入一个文本字符时,A1单元格的内容就变成了文本
第二题
Sub 关闭工作薄()
    If Range("A10") = "" Then
        Range("A10") = " "
        Application.DisplayAlerts = False
        ThisWorkbook.Close
    End If
End Sub
Sub AUTO_OPEN()
    If Range("A10") = " " Then Range("A10").Clear
End Sub
第三题
Sub AUTO_OPEN()
    Dim ti As Date
    ti = Now()
    If ti < CDate("2013-7-31") Then
        Exit Sub
    Else
        Application.DisplayAlerts = False
        ThisWorkbook.Close
    End If
End Sub
7楼
♂苯尛藸
1 text属性本身返回字符类型,而且& 连接符是连接字符串的,自动隐形转换
2 代码多加判断,比如点一个H21单元格就直接退出保存,或者按下特殊健,捕捉键码来退出。
3 在打开事件,或者active事件判断date与2013--7-1比较,如果不符合就关闭工作簿
8楼
manuel442
QQ昵称:智山仁水
1、&运算将最后 的结果 转换成了字符型的
2、'保存工作簿时执行此过程
  If Format(Now(), "yyyy/m/d h:m") <> "2013/7/24 22:6" Then
     If Len(rng) = 0 Then  '如果变量所代表的单元格是空白的
        Cancel = True     '禁止关闭
        MsgBox rng.Address & "单元格不能空白!", vbOKOnly, "友情提示" '提示用户
     End If
  End If

3、Sub auto_open()
If Format(Now(), "yyyy/m/d") > "2013/7/31" Then
ThisWorkbook.Close (False)
End If
End Sub
9楼
ynzsvt
题一:
因为 & 进行运算时已经将前后的非字符转换成字符啦。

题目二:
在cancel处设置断点,中断执行就能保存文件。

问题三:
Sub auto_open()
If Date >= #7/31/2013# Then ThisWorkbook.Close False
End Sub
10楼
本人号被盗,
不太懂。
1、前面有&连接
2、不知道哦
3、根据老师的提示,应该编制两个过程,中间如何连接,不懂。
11楼
mmice
交作业:
问题一:Com.Text Com.Text & Chr(10) & Date   因为第二个Com.Text在这里是方法,后面可直接跟函数
==========================================
问题二:Private Sub Workbook_BeforeClose(Cancel As Boolean, ByVal Target As Range)
  Dim rng As Range, Y As Interge '声明一个单元格对象变量
    Set rng = Range("a10")  '对对象赋值
        If Len(rng) = 0 Then  '如果变量所代表的单元格是空白的
      
          Y = MsgBox(rng.Address & "单元格不能空白!", vbOKOnly, "友情提示") '提示用户
          If Y = vbYes Then
          Workbooks.Close
          End If
   
       End If
  
End Sub

==============================================
问题三:
'如何实现工作簿只能在2013年7月31日以前打开?如果超过了7月31日,那么打开工作簿后工作簿会自动关闭。
'提示:将过程命名为“Auto_open”可让代码随工作簿开启而自动执行,将过程命名为“Auto_Close”可让代码随工作簿关闭而自动执行。
Sub Auto_Open()
    Application.DisplayAlerts = False '关闭警告信息
    If CStr(Date) < "2013-7-31" Then
    Workbooks.Open "C:\Documents and Settings\mmice\My Documents\下载\替代.xlsx"
    Application.DisplayAlerts = True '打开警告信息
    End If
End Sub


Sub Auto_Close()
    Application.DisplayAlerts = False '关闭警告信息
    If CStr(Date) > "2013-7-31" Then
    Workbooks.Close '这个加True会报错
    Application.DisplayAlerts = True '打开警告信息
    End If
End Sub


群名片:小白
12楼
lb425319789
本次作业感觉并不算难,可是因听课中间知识有些断层,还是听老师下次上课讲解本次作业吧。
13楼
jsrgsunny
江苏-阳光明媚
1、前面的Text是方法,是一个动词,后面的Text是名词,它是属性,也就是文本。
3、Sub Auto_Open()
   If date> CDate("2013-7-31") Then ThisWorkbook.Close False
End Sub
14楼
lfwxszw
第一题:    因为有批注的话,已经是文本格式的,连接日期后也就直接变成文本格式了。
第二题:
                  Application.EnableEvents = False

                  Application.EnableEvents = True

第三题:
                 Sub auto_open()
                 Dim odate As Date                                                     '定义odate变量
                 odate = Date                                                             '当前日期赋值给变量
                 If odate > "7/31/2013" Then ActiveWorkbook.Close '如果日期大于2013-7-31,关闭工作簿
                 End Sub

                 也能放在workbook的 Workbook_Open() 事件中
15楼
lb425319789
问题三:
如何实现工作簿只能在2013年7月31日以前打开?如果超过了7月31日,那么打开工作簿后工作簿会自动关闭。
sub auto_open()
    if date >= #7/31/2013#  then ActiveWorkbook.saved = true
    ActiveWorkbook.close
end sub

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap