问题5:如何使用VBA删除所有的空工作表? 解答:可以分两种情形来对待。 (一)如果您想删除同一工作簿中的所有空工作表,可以使用下面的两个程序中的其中一个: ‘************************************************** Sub test1() Dim ws As Worksheet Application.DisplayAlerts = False For Each ws In ActiveWorkbook.Worksheets ws.Activate If ActiveWorkbook.Worksheets.Count > 1 Then If IsEmpty(ActiveSheet.UsedRange) Then ws.Delete End If End If Next ws Application.DisplayAlerts = True End Sub ‘************************************************** Sub test2() Dim ws As Worksheet On Error GoTo Handdle Application.DisplayAlerts = False For Each ws In ActiveWorkbook.Worksheets ws.Activate With ws If Application.CountA(.Cells) = 0 Then .Delete End If End With Next ws Handdle: Application.DisplayAlerts = True End Sub (二)如果您想删除已打开的工作簿中的所有空工作表,可使用下面的程序: ‘************************************************** Sub test() Dim ws As Worksheet Dim wb As Workbook Application.DisplayAlerts = False For Each wb In Workbooks wb.Activate For Each ws In ActiveWorkbook.Worksheets ws.Activate If ActiveWorkbook.Worksheets.Count > 1 Then If IsEmpty(ActiveSheet.UsedRange) Then ws.Delete End If End If Next ws Next wb Application.DisplayAlerts = True End Sub =================================================================== 问题6:如何获取计算机上可供使用的打印机列表? 解答:您可能有时想获取您的计算机上可供使用的打印机列表,然后从中选择打印机输出。最简单的方法是,您可以在代码中添加下面的语句: Application.Dialogs(xlDialogPrint).Show =================================================================== 问题7:如何基于某个单元格更新其它单元格的日期? 例如:我需要做的一个例行工作是依赖于两个特定单元格的内容添加一些日期到另一个单元格。例如,在单元格J2中有W(代表每周)或者B(代表Bi周)或者M(代表每月),单元格N2中的内容为一个可更新的日期,如果J2中包含一个W我需要在单元格L2中添加7天,或者如果J2中包含一个B我需要在单元格L2中添加14天,或者如果J2中包含一个M则在单元格L2中添加30天,……在单元格J2中包含的信息W,B,或M决定计算的天数,单元格N2中包含原先约定的日期作为开始计算的日期,单元格L2中的这个日期基于上面两个单元格的日期更新。 解答:可以粘贴下面的两个程序之一到工作表代码模块中。 (一)区分大小写,您必须在工作表中输入大写的字母W、B或M。 ‘************************************************** Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("J2").Text = "W" Then Range("L2") = Range("N2").Value + 7 ElseIf Range("J2").Text = "B" Then Range("L2") = Range("N2").Value + 14 ElseIf Range("J2").Text = "M" Then Range("L2") = Range("N2").Value + 30 End If End Sub (二)不区分大小写,并使用了Select Case选择语句。 ‘************************************************** Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$N$2" Or Target.Address = "$J$2" Then Dim iDays As Byte Application.EnableEvents = False On Error GoTo ERRORHANDLER Select Case UCase(Range("J2").Value) Case "W" iDays = 7 Case "B" iDays = 14 Case "M" iDays = 30 End Select Range("L2").Value = Range("N2").Value + iDays Application.EnableEvents = True Exit Sub ERRORHANDLER: Application.EnableEvents = True End If End Sub =================================================================== 问题8:如何编写一个宏程序运行另一个宏程序特定的次数? 解答:可以用一个简单的循环来实现。 ‘************************************************** Sub FirstMacro() Dim RunCount as Long Const RunMax As Long=10 ‘定义要运行的次数 For RunCount =1 To RunMax Call SecondMacro ‘调用要运行的宏程序 Next End Sub =================================================================== 问题9:如何在一个组合框中列出所有工作表中单元格D3中的值? 解答:假设用户窗体中有一个名为ComboBox1的组合框,您可在用户窗体中添加以下代码,当用户窗体被激活时,在组合框中将显示出所有工作表中单元格D3的值。 ‘************************************************** Private Sub UserForm_Activate() Dim ws As Worksheet For Each ws In Worksheets ComboBox1.AddItem ws.Range("D3").Text Next ws End Sub =================================================================== 问题10:如何使工作表中的文本闪烁? 解答:为了使文本闪烁,您需要周期性地执行一个程序来变换文本的前景色,OnTime方法可以用于周期性地运行一个程序。 ‘************************************************** Public RunWhen As Double Sub StartBlink() If Range("A1").Font.ColorIndex = 2 Then Range("A1").Font.ColorIndex = xlColorIndexAutomatic Else Range("A1").Font.ColorIndex = 2 End If RunWhen = Now + TimeSerial(0, 0, 1) Application.OnTime RunWhen, "StartBlink", , True End Sub ‘************************************************** Sub StopBlink() Range("A1").Font.ColorIndex = xlColorIndexAutomatic Application.OnTime RunWhen, "StartBlink", , False End Sub 在上面的这些程序中,您可以改变参数A1为您想要使文本闪烁的单元格或单元格区域。在工作簿打开时,您需要初始化这个程序,因此,您可以放置下面的代码到ThisWorkbook代码模块中。 ‘************************************************** Private Sub Workbook_Open() StartBlink End Sub 当工作簿关闭时,您需要取消OnTime事件,因此,您需要放置下面的代码到ThisWorkbook代码模块中。 ‘************************************************** Private Sub Workbook_BeforeClose(Cancel As Boolean) StopBlink End Sub 示例文档见在Excel中闪烁文本.xls。
HL3xux8P.rar
(6.89 KB, 下载次数: 248)
=================================================================== 问题11:如何将工作簿中其它工作表名导入到指定的工作表中? 解答:本问题即将工作簿中除指定的工作表(如名为Name的工作表)外的其它的工作表名导入到指定的工作表中(即Name工作表中)。您可以使用下面的代码。 ‘************************************************** Sub Test() Dim ws As Worksheet Dim i As Long, j As Long Worksheets("Name").Range("A:A").Clear i = Worksheets("Name").Range("A65536").End(xlUp).Row For Each ws In Worksheets If ws.Name <> "Name" Then Worksheets("Name").Cells(i, 1) = ws.Name i = Worksheets("Name").Range("A65536").End(xlUp).Row + 1 End If Next ws End Sub =================================================================== 问题12:如何在单元格中快速输入带秒的时间? 解答:一般,在Excel中快速输入日期和时间时,可使用快捷键,即按Ctrl+:组合键将快速在单元格中输入当前日期,按Ctrl+Shift+:组合键将快速在单元格中输入当前时间,但所显示的时间为“小时:分钟”格式,不会显示秒。如果您想显示“小时:分钟:秒”这样的格式的话,可以使用Onkey方法修改快捷键的缺省设置,如下所示,运行“设置快捷键”代码即可。 ‘************************************************** Sub 设置快捷键() Application.OnKey "+^:", "输入时间" End Sub ‘************************************************** Sub 恢复快捷键() Application.OnKey "+^:" End Sub ‘************************************************** Sub 输入时间() With ActiveCell .Value = Time() .NumberFormat = "hh:mm:ss" End With End Sub 如果您想恢复快捷键的缺省设置,运行“恢复快捷键”过程。 By fanjy in 2006-8-1
|