执行控制结构


经典语句大全 2019-08-30 03:51:43 经典语句大全
[摘要]第一篇执行控制结构:For循环控制结构在指定的条件下多次重复执行的一组语句,可通过循环结构来实现。循环语句产生一个重复执行的语句序列,直到指定的条件满足为止。Visual Basic提供了三种不同风格的循环结构,包括计数循环(for-next循环)、当循环(while-end while循环)和do

【www.shanpow.com--经典语句大全】

第一篇执行控制结构:For循环控制结构


在指定的条件下多次重复执行的一组语句,可通过循环结构来实现。  
循环语句产生一个重复执行的语句序列,直到指定的条件满足为止。Visual Basic提供了三种不同风格的循环结构,包括计数循环(for-next循环)、当循环(while-end while循环)和do循环(do-loop循环)。其中for-next循环按规定的次数执行循环体,而while循环和do循环则是在给定的条件满足时执行循环体。
for循环也称for-next循环或计数循环。其一般格式如下:
For  循环变量= 初值 to
 终值 [step
步长]
[ 循环体]
next [ 循环变量]
[, 循环变量]
其中,步长:(可选项)。循环变量的增量,是数值表达式。其值可以是正数(递增循环)或负数(递减循环),但不能为0。如果步长为1,则可以省略不写。
初值,终值和步长均为数值表达式,但其值不一定是整数,可以是实数(即带小数点的数),VB会自动将其取整。
       
 
例如:在窗体的单击事件中输入:
Private Sub
Form_Click()
Dim i As
Integer
For i = 1 To
10
Print
i
Next
i
End
Sub
其执行过程为:
1)把初值赋给循环变量i
2)将i的值与终值10进行比较。若i>10,则退出循环体。执行5),否则执行循环体。
3)i增加一个步长值。即i=i+1
4)返回2)继续执行
5)执行Next语句后面的代码。
在VB中,For-next循环遵循“先检查,后执行”的原则。即先检查循环变量是否超过终值。然后决定是否执行循环体。因此,在下列情况下,循环体将不会被执行:
1)当步长为正数,初值大于终值
2)当步长为负数,初值小于终值
当初值等于终值时,不管步长是正数还是负数。都执行一次循环体。
For语句和next语句必须成对出现,且for语句必须在next语句之前。
 

第二篇执行控制结构:第7章 程序控制结构


第7章 程序控制结构
 
  程序代码需要按一定的顺序执行,有时需要选择某一部分代码执行;有时需要反复执行某一段代码。通过程序结构控制代码可以完成这些功能。
  7.1 算法的概念及表示
  对于稍微复杂一点的应用程序,在开始编写代码之前,应该先设计其算法。本节首先简单地介绍一下算法和流程图方面的知识。
  7.1.1 算法简介
  使用计算机处理各种不同的问题时,必须事先对各类问题进行分析,确定解决问题的具体方法和步骤,再编写好一组让计算机执行的代码,交给计算机,让计算机按设计好的步骤进行工作。这些具体的方法和步骤其实就是解决一个问题的算法。根据算法,选择一种程序设计语言编写完成任务的代码,也就是编制程序。一个算法应该具有以下5个重要的特征。
  a、有穷性,一个算法必须保证执行有限步之后结束。
  b、确切性,算法的每一步骤必须有确切的定义。
  c、输入,一个算法有一个或多个输出,以反映对输入数据加工后的结果。算法是毫无意义的。
  d、可行性,算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后也可完成。
  例如下面设计求三个数中最大数的算法。
  首先,定义三个A,B,C用来保存三个数,再定义一个变量MAX用来保存最大数。其算法如下:
  1)输入三个数分别保存到A,B,C中。
  2)将变量A与B进行比较,如果A大于B,则将A的值存入变量MAX中;否则将变量B的值存入变量MAX中。
  3)将变量C与MAX进行比较,如果C大于MAX,则将C的值存入变量MAX中。
  4)输出最大数MAX的值。
  使用相应的程序设计语言将以上步骤进行编码后,即可交给计算机进行运算处理了。
  7.1.2 流程图
  一般情况下,使用应用程序解决的问题都比较复杂,故大家喜欢用一种框图来描述算法,这样就可以把解决问题的思路更加清晰、形象、直观地表现出来,为下一步的程序编制打下基础。使用图形表示算法的思路是一种极好的方法,因为千言万语不如一张图。常用的流程图符号如图7-1所示。
       
  使用流程图描述上例的算法如图7-2所示。
  
  由图7-2可以看出,使用流程图比用文字描述算法更清晰明了。
  7.2 程序结构概述
  结构化程序设计的基本控制结构有三种:顺序结构、选择结构和循环结构。
  a、顺序结构:就是按照语句的书写顺序从上到下、逐条语句地执行。执行时,排在前面的代码先执行,排在后面的代码后执行,执行过程中没有任何分支。顺序结构是最普遍的结构形式,也是后面两种结构的基础。
  b、选择结构:又叫分支结构。是根据“条件”来选择执行哪一分支中的语句。包括二分支和多分支,以及分支的嵌套。
  c、循环结构:循环结构的程序设计比分支结构复杂。循环结构的思想是利用计算机高速处理运算的特性,重复执行某一部分代码,以完成大量有规则的重复运算。
  7.3 分支程序结构
  在日常生活中,常常需要对给定的条件进行分析、比较和判断,并根据判断结果采取不同的操作。在VBA的程序中对这种情况可通过分支结构程序来解决。利用分支结构使VBA能对数据进行判断,然后选择需要的分支进行处理,从而使系统具有了智能功能。
  7.3.1 If……Then语句
  要在VBA中做出判断,最简单的方法是使用“If……Then”语句。用“If……Then”结构有条件地执行一个或多个语句有两种语法形式。
  1.单行结构条件语句                                                    
  单行结构条件语句是最基本的条件语句,其语法为:                                                                               
  If 逻辑表达式 Then 语句                                                   
   逻辑表达式也可以是任何计算数值的表达式,VBA将这个值解释为True或False: 为零的数值为False,而任何非零数值都被看作True。                                                                      
  该语句的功能为:若逻辑表达式的值是Ture,则执行Then后的语句;若逻辑表达式的值是False,则不执行Then后的语句,而执行下一条语句。其流程图如图7-3所示。
                          
  例如,要删除工作表中的空行,首先检查当前单元格是否为空,如果为空,则删除当前单元格所在的行。
  If ActiveCell = "" Then Selection.EntireRow.Delete
  执行以上语句分两种情况:第一种情况是活动单元格为空,则执行Then后面的语句并删除当前行,然后执行If语句后面的语句;第二种情况是活动单元格不为空,则不执行Then后面的语句,而直接执行If语句后面的语句。
  2.块结构条件语句                
  在“If……Then”语句中,如果条件成立时需要执行多个操作,可将多个语句写在Then后面,并用冒号(:)分隔。“If……Then”语句还提供另外一种块结构的方法,可使执行多行代码的过程更清晰,其语法如下:
  If 逻辑表达式 Then
    语句1
    语句2
    ……
  End If
  块结构条件语句的作用与单行结构条件语句的功能相同。要注意的是“If……Then”的单行格式不用“End If”语句,而块语句则必须在条件语句的结束处有“End If”。例如,如果当前工作表名称为“基础资料”,则向其中添加表头数据:
  If ActiveSheet.Name = "基础资料" Then
            Range("A1") = "姓名"
   Range("B1") = "性别"
   Range("C1") = "住址" 
       End If 
  7.3.2 If……Then……Else语句
  在“If……Then”语句中,当条件为False时,不执行任何语句。若要求在条件为False时执行另一段代码,可用“If……Then……Else”语句完成。“If……Then……Else”语句也有两种格式:单行和多行。单行的格式为:
  If 逻辑表达式 Then 语句1 Else 语句2
  当“逻辑表达式”的值为True时,执行关键字Then后面的“语句1”;当“逻辑表达式”的值为False时,执行关键字Else后面的“语句2”。
  多行条件语句将根据条件表达式的值来判断并执行其中一个语句块。语法格式如下:
  If 逻辑表达式 Then
    语句序列1
  Else
    语句序列2
  End If
  VBA判断“逻辑表达式”的值如果为True,执行“语句序列1”中的各条语句;如果“逻辑表达式”的值为False时,就执行“语句序列2”中的各条语句。其流程图如图7-4所示。
   
  例如,下面的程序用于判断单元格“A1”的值:如果为空,则在该单元格中写入数据“10”,否则将单元格中的值增加10。
  If IsEmpty(Range("A1")) Then
            Range("A1") = 10
        Else
            Range("A1") = Range("A1") + 10
        End If
  7.3.3  IIf函数
  IIf函数可用来执行简单的条件判断操作,它是“If……Then……Else”结构的简写版本,其语法格式如下:
  .result=IIf(逻辑条件表达式,true部分,false部分)
  变量result保存函数的返回值。“逻辑条件表达式”为判断的条件,当条件为True时,IIf函数返回“true部分”;当条件为False时,IIf函数返回“false部分”。
  例如,有以下的If……Then……Else语句:
  If a>10 Then
               b = 1
       Else
              b = 2
       End If
  可改写为IIF函数样式:
  b = IIf(a > 10, 1, 2)
  技巧:“true部分”和“false部分”可以是表达式、变量或其他IIf函数。
  7.3.4 If……Then……ElseIf语句
  在很多情况下,可能需要判断几个不同的条件,并根据不同条件执行不同的语句。这时可使用“If……Then……ElseIf”语句来对多个不同条件进行判断,并在多个语句块中选择执行其中的一个,其语法格式如下:
  If 逻辑表达式1 Then
    语句序列1
  ElseIf 逻辑表达式2 Then
    语句序列2
  ElseIf 逻辑表达式3 Then
    语句序列3
    ……
  Else
    语句序列n
  End If
  在以上结构中,可以包括任意数量的ElseIf子句和条件,ElseIf子句总是出现在Else子句之前。
  VBA首先判断“逻辑表达式1”的值。如果它为False,再判断“逻辑表达式2”的值,以此类推,当找到一个为True的条件,就会执行相应的语句块,然后执行End If后面的代码。如果所有“逻辑表达式”都为False,且包含Else语句块,则执行Else语句块。其流程图如图7-5所示。
   
  例如,用以下代码对企业员工职务进行判断,根据不同的职务返回不同的职务工资标准:
  If Range("职务")="总经理" Then
    curPay = 1000
  ElseIf  Range("职务") = "副总经理"  Then
    curPay = 900
  ElseIf  Range("职务") = "厂长"  Then
    curPay = 800
  ElseIf  Range("职务") = "副厂长"  Then
    curPay = 700
  ElseIf  Range("职务") = "部门主任"  Then
    curPay = 500
  Else
    curPay = 0
  End If
  7.3.5 Select Case语句
  在“If……Then”分支语句中,问题可以添加更多的ElseIf块,但是,当每个ElseIf块都将相同的表达式与不同的数值比较时,这个结构编写起来很乏味,也不易阅读。在这种情况下可以用多分支选择结构“Select Case”语句。
  “Select Case”语句的功能与“If……Then……Else”语句类似,但对多重选择的情况,“Select Case”语句可使代码更加易读。
  “Select Case”在结构的开始处理一个测试表达式并只计算一次,然后,VBA将表达式的值与结构中的每个Case的值进行比较,如果相等,就执行与该Case相关联的语句块,执行完毕再跳转到End Select语句后执行。其语法格式如下:
  Select Case 测试表达式
   Case 表达式列表1
     语句序列1
   Case 表达式列表2
     语句序列2
     ……
   Case Else
     语句序列n
   End Select
  其中“测试表达式”可以是数值型或字符型的表达式,通常是一个数值型或字符型的变量。表达式列表可以是一个或几个值的列表。如果在一个列表中有多个值,就用逗号将各个值分隔开。每一个语句序列中含零个或多个语句。如果不止一个Case与测试表达式相匹配,则只对第一个匹配的Case执行与之相关联的语句块vkjs如果表达式列表中没有一个值与测试表达式相匹配,则VBA执行Case Else子句(此项可选)中的语句。其流程图如图7-6所示。表达式列表可以按以下几种情况进行书写。
  表达式:这种方式用来表达一些具体的取值。例如,Case1,3,5。
  表达式 A To表达式B:这种方式用来表示一个数据范围。例如,Case 1 To 10。
  Is比较运算符表达式。例如,Case Is<60表示所有小于60的值。
  以上三种情况的混合。例如,Case 0 To 60,80,Is>90
    
  注意:Select Case结构每次都要在开始处计算表达式的值;If……Then……Else结构为每个ElseIf语句计算不同的表达式。只有当If语句和每一个ElseIf语句计算的表达式相同时,才能用Select Case结构替换If……Then……Else结构。
  例如,将上例中使用“If……Then……ElseIf”语句编写的程序改写为以下形式:
  Select Case Range("职务")
   Case "总经理"
    curPay = 1000
   Case "副总经理"
    curPay = 900
   Case "厂长"
    curPay = 800
   Case "副厂长"
    curPay = 700
   Case "部门主任"
    curPay = 500
   Case Else
    curPay = 0
  End Select
  在Select Case语句中,可以使用Is关键字后面加上比较运算符来对某一个区间进行判断。例如用以下代码计算个人所得税,其中个人所得税的税率如图7-7所示。
  
  Function 计算个人所得税(curPay As Currency)
    Dim curTemp As Currency
                Dim CurPay1 As Currency
    curPay1 = curPay - 1600
    Select Case curPay
     Case Is <= 500
       curTemp = curPay1*0.05
     Case Is <= 2000
       curTemp = (curPay1-500)*0.1+25
     Case Is <= 5000
       curTemp = (curPay1-2000)*0.15+125
     Case Is <= 20000
       curTemp = (curPay1-5000)*0.2+375
     Case Is <= 40000
       curTemp = (curPay1-20000)*0.25+1375
     Case Is <60000
       curTemp = (curPay1-40000)*0.3+3375
     Case Is <80000
       curTemp = (curPay1-60000)*0.35+6375 
     Case Is <100000
       curTemp = (curPay1-60000)*0.4+10375 
     Case Else
       curTemp = (curPay1-100000)*0.45+15375
     End Select
     计算个人所得税 = curTemp
  End Function
  在使用Is关键字进行条件判断时,条件的先后顺序很重要。如本例中,若将Is<100000写在第一个条件位置,程序运行将得不到正确的结果。
  7.3.6 分支结构的嵌套
   在一个分支结构语句中还可以包含另一个分支结构语句,这称为嵌套。例如,以下程序用于判断当前单元格中保存值的类型:
  Sub 判断当前单元格数据类型()
    If IsEmpty(ActiveCell) Then                 "单元格为空
      MsgBox "当前单元格为空,请输入数据后再执行本程序!" 
     Else                             "单元格不为空
     If IsNumeric(ActiveCell.Value) Then             "单元格为数值
       If ActiveCell.Value = 0 Then              "数据为零
                                 ActiveCell.offset(0,1).Value = "零"
       ElseIf ActiveCell.Value > 0 Then                        "数据为正数
        ActiveCell.offset(0,1).Value = "正数"
       Else                           "数据为负数
        ActiveCell.offset(0,1).Value = "负数"
       End If
     Else                             "数据不为数值,则为文本
       ActiveCell.offset(0,1).Validation = "文本"
                           End If
                      End If
  End Sub
  这段代码使用了If语句的嵌套结构,嵌套的层次最多为三层。程序代码的功能在代码后面的注释中都进行了说明,其流程图如图7-8所示。
   
  注意:在块If语句的嵌套中,每一个If语句都需要一个End If语句与之对应,在输入代码时最好采用缩进结构,以便于看清楚嵌套的层次,防止少写End If语句。
  7.4 循环程序结构
  前面介绍了使用分支结构让VBA程序具有判断能力,从而使程序实现一定的智能化。但是这种分支结构的程序都是从代码的开始处按顺序执行,只是路途跳过一些语句不执行。
  在实际需要中,有时还需要反复操作某一个或几个动作。如果将这种操作编写成VBA代码来完成,则表示程序运行到一个位置后,又返回前面的代码来进行操作,这种结构称为循环结构。VBA中提供了多种循环结构控制语句。
  7.4.1 Do……Loop循环
  用Do循环重复执行一语句块,且重复次数不定。“Do……Loop”语句有4种演变形式,但每种都需要计算条件表达式的值,以决定是否继续执行。在Do循环中可以使用“Exit Do”语句中途退出该循环。
  1. Do While……Loop循环
  “Do While”语句属于先测试循环条件的“Do……Loop”语句,其语法格式如下:
  Do While 逻辑表达式
    语句序列1
    [Exit Do]
    [语句序列2]
  Loop
  其中Do While和Loop都是关键字,在Do While和Loop之间的语句称为循环体。
  当VBA执行这个Do循环时,首先判断逻辑表达式:如果为False(或零),则跳过所有语句,执行Loop的下一条语句:如果为True(或非零),则执行循环体,当执行到Loop语句后,又跳回到Do While语句再次判断条件。在循环体中如果包含有Exit Do语句,当执行到Exit Do语句,马上跳出循环,执行Loop的下一条语句。其流程图如图7-9所示。
    
  这种形式的循环体可能执行零次或多次。只要条件表达式为True或非零,循环就会重复执行。如果逻辑表达式最初就为False,则不会执行循环语句。
  2. Do……Loop While循环
   “Do……Loop While”语句属于后测试循环条件的“Do……Loop”语句,该结构先执行循环体中的语句,然后再进行条件判断。这种形式的循环体至少执行一次,其语法格式如下:
  Do
   语句序列1
   [Exit Do]
   [语句序列2]
  Loop While 逻辑表达式
  其流程图7-10所示。
  3. Do Until……Loop循环
  该语句为先测试结束条件的“Do……Loop”语句,其语法形式如下:
  Do Until 逻辑表达式
    语句序列1
    [Exit Do]
    [语句序列2]
  Loop
  这种形式与“Do While……Loop”类似,不同的是当逻辑表达式的值为False时才执行循环体,否则退出循环。这种形式的循环体可能执行零次或多次。
  4.Do……Loop Until循环
   这是后测试结束条件的“Do……Loop”语句,其语法形式如下:
  Do
   语句序列1
   [Exit Do]
   [语句序列2]
  Loop Until 逻辑表达式
  这种形式与“Do……Loop While”类似,不同的是当逻辑表达式的值为False时才执行循环体,否则退出循环。这种形式的循环体至少能被执行一次。
  例如,在要求用户输入密码时,一般都要给用户三次机会,每次的输入过程和判断过程都相同,这时就可以使用循环语句。
  Sub 输入密码()
   Dim strPassword As String                                                            "保存密码
   Dim i As Integer                   "输入密码的次数
   Do
                  strPasswor = InputBox("请输入密码")                                 "输入密码
                  If strPassword = "wyh" Then                                                     "判断密码是否正确
     Exit Do                                                                                   "退出循环
     Else
                       MsgBox("请输入正确的密码!")
                  End If
                   i = i + 1
                 Loop While i < 3
                 If i >= 3 Then                                                                             "超过正常输入密码次数
                    MsgBox "未登录用户"
                    End
    Else
                     MsgBox "欢迎你使用本系统!"
                End If
       End Sub
  程序中使用“Do……Loop While”循环让循环体至少执行一次。程序的流程图如图7-11所示。
       
  在循环体中,首先是显示一个输入框让用户输入密码;接着对用户输入的密码进行判断,如果密码正确,则执行Exit Do语句退出循环,执行Loop While下面的语句,如果密码错误,将显示一个提示信息,并累计错误次数;最后判断是否继续循环。
  7.4.2 While……Wend循环
  “While……Wend”循环语句的功能与“Do……While”循环相同,是从Basic的早期版本中保留下来的语句,VBA保留它是为了向后兼容,其语法格式如下:
  While 逻辑表达式
    循环体
    ……
  Wend
  如果“逻辑表达式”为True,则所有的“循环体”语句都会执行,一直执行到Wend语句,然后再回到While语句,并再一次检查“逻辑表达式”的值,如果还是为True,则重复执行;如果不为True,则程序会从Wend语句之后的语句继续执行。
  7.4.3 For……Next循环
  “For……Next”语句以指定次数来重复执行循环体。与Do循环不同,For循环使用一个叫做计数器的变量,每重复一次循环之后,计数器变量的值就会增加或减少。在For循环中可以使用Exit For语句随时退出该循环。For循环的语法格式如下:
  For 循环变量=初始值 To 终值 [Step 步长值]
    语句序列1
    [Exit For]
    语句序列2
  Next [循环变量]
  其中:步长值可正可负。如果步长值为正,则初始值必须小于或等于终值才能执行循环体,否则退出循环;如果步长值为负,则初始值必须大于或等于终值,这样才能执行循环体。如果没能设置Step,则步长值默认为1。“For……Next”循环结构的流程图如图7-12所示。
    
  VBA执行For循环时的过程如下:
  步骤1 将初始值赋值给循环变量。
  步骤2 判断循环变量是否超过终值,若为真(True),退出循环,执行Next的下一语句。这里的“超过终值”有两种意思:若步长值为负数时,超过就是循环变量的值小于终值;而当步长值为正数时,超过就是循环变量的值大于终值。
  步骤3 执行循环体。
  步骤4 循环体执行完后到达Next语句时,循环变量累加上步长值。
  步骤5 重复步骤2到步骤4。
  For循环一般都可计算出循环体的执行次数,计算公式如下:
  循环次数=【(终值-初值)/步长值】+1
  这里用中括号表示取整。
  在事先不知道循环体需要执行多少次时,应该用Do循环;而在知道循环体要执行的次数时,最好使用“For……Next”循环。
  例如,要编写代码完成以下工作:在工作表“Sheet2”的前100行中,如果第2列单元格的值为0,则删除所在行。可使用“For……Next”循环语句编写如下代码:
  Sub 使用 For 循环删除为0的行()
    Dim i As Integer
    With Sheets("sheet2")
                      For i = 1 To 100
                           If .Cells(i,2).EntireRow.Delete
           End If
       Next
    End With
  End Sub
  比较两个过程可以看出,使用“For……Next”循环时,不需要开发人员手工编写代码更新循环变量,而使用“Do While……Loop”循环时,必须在循环体中包含更改循环条件的语句,否则循环将一直执行下去,永远退不出来,形成死循环。
  7.4.4 循环的嵌套
  与分支结构类似,循环结构也可进行嵌套,即将一个循环放置在另一个循环中。VBA允许在同一过程里嵌套多种类型的循环。
  在编写嵌套循环程序的代码时一定要注意每个循环语句的配对情况。如图7-13所示,其中(a)是正确的嵌套关系,第一个Next关闭了内层的For循环,而最后一个Loop关闭了外层的Do循环。同样,在嵌套的If语句中,End If语句自动与最靠近的前一个If语句配对。嵌套的Do……Loop结构的工作方式也是一样的,最内圈的Loop语句与最内圈的Do语句匹配。图7-13(b)则是错误的嵌套关系。
     
  第4章中编写的九九乘法表就使用了两个For循环进行嵌套,其代码如下:
  Private Sub cmd99_Click()
   Dim i As Integer
   Dim j As Integer
   Dim StrMsg As String
   For i = 1 To 9
         For j = 1 To 9
      strMsg = strMsg & "*" & j & "=" & i * j & ""
     Next j
     strMsg = strMsg & vbCrLf
   Next i
            MsgBox strMsg , , "九九乘法表"
  End Sub
  分析嵌套循环时,可从最内层的循环开始。以上代码最内层循环的语句为:
  For j= 1 To 9
    strMsg = strMsg & i & "*" & j & "=" & i * j & " "
  Next j
  这部分代码用来生成一行数据,假设i为1,执行完以上代码后,变量strMsg保存的内容如下:
  1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
  将内循环精简为一个命令(如本例中的“输出一行数据”),则九九乘法表的程序变为以下形式:
  Private Sub cmd99_Click()
   Dim i As Integer
   Dim j As Integer
   Dim strMsg As String
   For i = 1 To 9
     输出一行数据
     strMsg = strMsg & vbCrLf
   Next i
   MsgBox strMsg, , "九九乘法表"
  End Sub
  即可得到一个单循环。该单循环执行9次即可得到9行数据,也就得到了需要的乘法表。
  注意:在嵌套结构里的循环结构中使用Exit语句时,退出的只是包含该语句的当前循环结构,而不是整个黄磊结构。
  7.4.5 Goto语句
  使用Goto语句,可无条件地将程序代码跳转到指定的行去执行。VBA中保留Goto语句是为了保持与早期的Basic版本兼容。Goto语句的语法格式如下:
  Goto 行号/标号
  注意:Goto只能跑到它所在过程中的行。
  要使用Goto语句,首先需用了解VBA中语句的行号和标号。在早期的Basic语言中,每一行程序都有一个行号,行号按从小到大的顺序排列,例如:
  Sub 使用Do循环删除为0的行()
  10 Dim i As Integer
  20 i = 1
        30   With Sheets("sheet2")
  40 Do While i <= 100
  50      If .Cells(i,2) = 0 Then
  60            .Cells(i,2).EntireRow.Delete
  70  End If
  80  i = i + 1
  90 Loop
  100 End With
  End Sub
  在VBA中,执行这样的代码也不会出错。为程序添加行号的目的就是方便使用Goto语句跳转到相应的语句去执行。
  随着结构化程序设计方法的使用,使用Goto语句跳转的方式已经不常用了,也就不再需要为每行代码添加行号了。
  为了使Goto跳转到需要的地方,可在程序中添加标号。标号是以英文字母开头的一个标识符后加上一个冒号构成的。在程序代码中输入的标号始终是靠左对齐的。
  例如,以下代码使用Goto语句来进行循环操作,删除单元格为0的行。
  Sub 使用Goto语句删除为0的行()
    Dim i As Integer
    i = 1
  linel:
   With Sheets("sheet2")
    If .Cells(i,2) = 0 Then
      .Cells(i,2).EntireRow.Delete
    End If
    i = i + 1
    If i <= 100 Then GoTo linel
   End With
  End Sub
  注意:这里只是演示Goto语句的用法,不建议读者在程序中使用太多的Goto语句,因为使用Goto语句会使程序代码不容易阅读及调试。应尽可能使用结构化控制语句(Do……Loop,For……Next,If……Then……Else和Select Case)。
 

第三篇执行控制结构:内部控制


内部控制   
内部控制
内部控制是指经济单位和各个组织在经济活动中建立的一种相互制约的业务组织形式和职责分工制度。内部控制的目的在于改善经营管理、提高经济效益。它是因加强经济管理的需要而产生的,是随着经济的发展而发展完善的。最早的控制主要着眼于保护财产的安全完整,会计信息资料的正确可靠,侧重于从钱物分管、严格手续、加强复核方面进行控制。随着商品经济的发展和生产规模的扩大,经济活动日趋复杂化,才逐步发展成近代的内部控制系统。
控制定义
所谓内部控制,是指一个单位为了实现其经营目标,保护资产的安全完整,保证会计信息资料的正确可靠,确保经营方针的贯彻执行,保证经营活动的经济性、效率性和效果性而在单位内部采取的自我调整、约束、规划、评价和控制的一系列方法、手续与措施的总称。
内控背景
在内控管理工作中,您是否遇到过以下情形:
当财务部门审批销售部门的差旅费或交际应酬费时,总听到销售人员在抱怨:审的也太严了吧,我们在前面冲锋陷阵,你们反而在后边拉我们后腿。
在对供应商进行招投标的过程中,采购部门认为处处按照采购部门的规章制度办事,怎么到了法务部或管理部,选中的供应商就迟迟批不下来呢?
公司管理层天天说风险,为什么员工对风险却没什么概念?是领导在危言耸听,还是风险管理和控制就是领导的事儿。
制度整合了,流程也更新了,但在执行的过程中,反而觉得比以前更麻烦了,花的时间更多了。[1]
类似的困惑和问题一定还有不少,它们都和企业的内部控制与风险管理体系息息相关。
内控收益
掌握先进的内部控制、风险管理、职业舞弊及内部审计等理论
掌握快速诊断企业内部控制缺陷的方法,评价内部控制的效果并进行改进
提升管理层对内部控制自我评估的能力,建立有效的内部控制环境
明确如何结合企业自身特点、建立适合企业自身情况的内部控制系统
通过企业运作中的典型实例帮助学员明确主要业务活动中的控制要点、控制标准和控制方法
内控要点
缺乏内部控制的企业常见原因分析  对内部控制相关理论的全面介绍  控制环境  内部控制的实质——风险管理  内部控制活动  内部审计简介  内控的建立和执行
控制要素
内部控制包括控制环境、风险评估过程、与财务报告相关的信息系统和沟通、控制活动、对控制的监督等五个相互联系的要素。
内部控制是为实现经营管理目标、组织内部经营活动而建立的各职能部门之间对业务活动进行组织、制约、考核和调节的方法、程序和措施。
我国中小企业发展迅速,但内控管理不容乐观。中小企业需要结合自身特点,优化控制环境,明确控制目标,改善控制技术,并不断完善内部控制系统,提高内部控制的效果。
目前,受到萨班斯法的影响,财政部加强了内控标准的修订,这需要立法学的指导。
审计准则方面的定义:内部控制是被审计单位为了合理保证财务报告的可靠性、经营的效率和效果以及对法律法规的遵守,由治理层、管理层和其他人员设计和执行的政策和程序。
内部控制是指单位内部的管理控制系统,即为保证单位经济活动正常进行所采取的一系列必要的管理措施,不仅包括单位最高管理当局用来授权与指挥经济活动的各种方式方法,也包括核算、审核、分析各种信息资料及报告的程序和步骤,还包括对单位经济活动进行综合计划、控制和评价而制定的各项规章制度。内部控制的目标尽管理论界有多种表述,但最根本的是保护单位财产,检查有关数据的正确性和可靠性,提高经营效率,贯彻既定的管理方针等四个方面。
基本结构
包括控制环境、会计系统、控制程序三个方面。
一般来说,企业资金的内部控制体系主要可以分为事前防范,事中控制和事后监督三个环节。
事前防范
首先,企业需要建立一套严格的内控规章制度,包括《企业财务管理办法》、《企业预算管理暂行办法》、《资金计划管理办法》、《企业资金授权审批管理办法》等一些与资金管理相关的制度。
在企业的资金管理过程中,要合理设置职能部门,明确各部门的职责,各司其职,建立财务控制和职能分离体系。充分考虑不兼容职务和相互分离的制衡要求。各部门、各岗位形成相互制约、相互监督的格局。
另外企业还应当建立严格的审批手续,授权批准制度,以减少某些不必要的开支。明确审批人对资金业务的授权批准方式、权限、程序、责任和相关控制措施,规定经办人办理资金业务的职责范围和工作要求。
事中控制
事中控制主要体现在保障货币资金安全性、完整性、合法性和效益性资金安全性控制。其范围包括现金、银行存款、其他货币资金、应收应付票据的控制。主要方法有:账实盘点控制、库存限额控制、实物隔离控制等。
事后监督
在资金管理过程中,除事前防范,事中控制环节之外,资金的事后监督也是必不可少的环节。
在每个会计期间或每项重大经济活动完成之后,内部审计监督部门都应按照有效的监督程序,审计各项经济业务活动,及时发现内部控制的漏洞和薄弱环节;各职能部门也要将本部门在该会计期间或该项经济活动之后的资金变动状况的信息及时地反馈到资金管理部门,及时发现资金的筹集与需求量是否一致,资金结构、比例是否与计划或预算相符,产品的赊销是否严格遵守信用政策,存货的控制是否与指标的一致,人、财、物的使用是否与计划或预算相符,产品的生产是否根据计划或预算合理安排等。
这样既保证了资金管理目标的适当性和科学性,也可根据反馈的实际信息,随时采取调整措施,以保证资金的管理更为科学、合理、有效。同时,将各部门的资金管理状况与部门的业绩指标挂钩,做到资金管理的责、权、利相结合,调动资金管理部门和职工的积极性,更好地进行资金管理。
发展阶段
内部控制是社会经济发展的必然产物,它是随着外部竞争的加剧和内部强化管理的需要而不断丰富和发展的。纵观内部控制理论的发展历程,大致上经历了以下六个阶段:
1、内部牵制阶段
2、内部控制制度阶段
1936年,美国颁布了《独立公共会计师对财务报表的审查》,首次定义了内部控制:“内部稽核与控制制度是指为保证公司现金和其他资产的安全,检查账簿记录的准确性而采取的各种措施和方法”,此后美国审计程序委员会又经过了多次修改。1973年在美国审计程序公告55 号中,对内部控制制度的定义作了如下解释:“内部控制制度有两类:内部会计控制制度和内部管理控制制度,内部管理控制制度包括且不限于组织结构的计划,以及关于管理部门对事项核准的决策步骤上的程序与记录。会计控制制度包括组织机构的设计以及与财产保护和财务会计记录可靠性有直接关系的各种措施。”
3、会计控制管理控制阶段
(1)内部会计控制(2)内部管理控制
4、内部控制结构阶段
5、内部控制整合框架阶段
1992年9月,COSO委员会提出了报告《内部控制——整体框架》。该框架指出“内部控制是受企业董事会、管理层和其他人员影响,为经营的效率效果、财务报告的可靠性、相关法规的遵循性等目标的实现而提供合理保证的过程。”1996年底美国审计委员会认可了COSO的研究成果,并修改相应的审计公告内容。
6、风险管理框架阶段
2004年COSO委员会发布《企业风险管理——整合框架》。企业风险管理整合框架认为“企业风险管理是一个过程,它由一个主体的董事会、管理当局和其他人员实施,应用于战略制订并贯穿于企业之中,旨在识别可能会影响主体的潜在事项,管理风险以使其在该主体的风险容量之内,并为主体目标的实现提供合理保证。”该框架拓展了内部控制,更有力、更广泛地关注于企业风险管理这一更加宽泛的领域。风险管理框架包括了八大要素:内部环境、目标设定、事项识别、风险评估、风险应对、控制活动、信息与沟通、监控。
七原则
1.合法性原则,就是指企业必须以国家的法律法规为准绳,在国家的规章制度范围内,制定本企业切实可行的财务内控制度。
2.整体性原则,就是指企业的财务内控制度必须充分涉及到企业财务会计工作的各个方面的控制,它既要符合企业的长期规划,又要注重企业的短期目标,还要与企业的其他内控制度相互协调。
3.针对性原则,是指内控制度的建立要根据企业的实际情况,针对企业财务会计工作中的薄弱环节制定企业切实有效的内控制度,将各个环节和细节加以有效控制,以提高企业的财务会计水平。
4.一贯性原则,就是指企业的财务内控制度必须具有连续性和一致性。
5.适应性原则,指企业财务内控制度应根据企业变化了的情况及财务会计专业的发展及社会发展状况及时补充企业的财务内控制度。
6.经济性原则,是指企业的财务内控制度的建立要考虑成本效益原则也就是说企业财务控制度的操作性要强,要切实可行。
7.发展性原则,制定企业财务内控制度要充分考虑宏观政策和企业的发展,密切洞察竞争者的动向,制定出具有发展性或未来着眼点的规章制度。
控制作用
内部控制主要是指内部管理控制和内部会计控制,内部控制系统有助于企业达到自身规定的经营目标。随着社会主义市场经济体制的建立,内部控制的作用会不断扩展。目前,它在经济管理和监督中主要有以下作用:
1、提高会计信息资料的正确性和可靠性
企业决策层要想在瞬息万变的市场竞争中有效地管理经营企业,就必须及时掌握各种信息,以确保决策的正确性,并可以通过控制手段尽量提高所获信息的准确性和真实性。因此,建立内部控制系统可以提高会计信息的正确性和可靠性。
2、保证生产和经管活动顺利进行
内部控制系统通过确定职责分工,严格各种手续、制度、工艺流程、审批程序、检查监督手段等.可以有效地控制本单位生产和经营活动顺利进行、防止出现偏差,纠正失误和弊端,保证实现单位的经营目标。
3、保护企业财产的安全完整
财产物资是企业从事生产经营活动的物质基础。内部控制可以通过适当的方法对货币资金的收入、支出、结余以及各项财产物资的采购、验收、保管、领用、销售等活动进行控制、防止贪污、盗窃、滥用、毁坏等不法行为,保证财产物资的安全完整。
4、保证企业既定方针的贯彻执行
企业决策层不但要制定管理经营方针、政策、制度,而且要狠抓贯彻执行。内部控制则可以通过袱定办法,审核批准,监督检查等手段促使全体职工贯彻和执行既定的方针、政策和制度,同时,可以促使企业领导和有关人员执行国家的方针、政策.在遵守国家法规纪律的前提下认真贯彻企业的既定方针。
5、为审计工作提供良好基础
审计监督必须以真实可靠的会计信息为依据,检查错误,揭露弊端,评价经济责任和经济效益,而只有具备了完备的内部控制制度,才能保证信息的准确,资料的真实.并为审计工作提供良好的基础。总之,良好的内部控制系统可以有效地防止各项资源的浪费和错弊的发生,提高生产、经营和管理效率,降低企业成本费用,提高企业经济效益。
内部控制的种类
内部控制制度的重点是严格会计管理,设计合理有效的组织机构和职务分工,实施岗位责任分明的标准化业务处理程序。按其作用范围大体可以分为以下两个方面:
内部会计控制
内部会计控制其范围直接涉及会计事项各方面的业务,主要是指财会部门为了防止侵吞财物和其他违法行为的发生,以及保护企业财产的安全所制定的各种会计处理程序和控制措施。例如,由无权经管现金和签发支票的第三者每月编制银行存款调节表,就是一种内部会计控制,通过这种控制,可提高现金交易的会计业务、会计记录和会计报表的可靠性。
内部管理控制
内部管理控制范围涉及企业生产、技术、经营、管理的各部门、各层次、各环节。其目的是为了提高企业管理水平,确保企业经营目标和有关方针、政策的贯彻执行。例如,企业单位的内部人事管理、技术管理等,就属于内部管理控制。
内部控制目标
根据财会[2008]7号《企业内部控制基本规范》,内部控制包括五大目标:合理保证企业经营管理合法合规、资产安全、财务报告及相关信息真实完整,提高经营效率和效果,促进企业实现发展战略。
报告目标:对内对外报告的可靠性
经营目标:对风险做出适当反应,促进运营的效率和效益(为企业目标的实现提供合理保证)
合规目标:法律法规、商业行为的内部政策
内部控制建设
企业内部控制是现代企业管理的重要手段。内部控制有效与否,直接关系到一个企业的兴衰成败。企业实行有效的内部控制制度,有助于促进企业拓展生产,提高经济效益,下面《老板》杂志就简单介绍一下如何建立企业内部控制制度:
1、 健全管理法律法规和公司制度
企业管理内部控制,在很大程度上取决于规章制度的监管,而监管力度的大小与国家颁布的相关法律法规和公司制定的制度有关。所以,国家法律在各行业财务管理中需明确各项权利和职责,对违法行为进行严格惩罚,同时,不断完善各项规章制度,加快各项管理的有效实施;企业管理者需要明确各岗位的工作职责和要求,保证工作和管理的顺利实施。
2、 组织机构控制
组织机构的控制包括组织机构的设置、分工的科学性、部门岗位责任制、人员素质的控制。在设置内部机构时,企业管理者既要考虑工作的需要,也应兼顾内部控制的需要,使机构设置既精炼又合理。因此,对企业内部组织结构和职责分工要有整体规划。
3、预算控制
预算控制是内部控制的重要组成部分,其内容可以涵盖企业经营活动的全过程,包括筹资、采购、生产、销售、投资等诸多方面。所以企业管理者进行预算控制,是为达到企业既定目标而编制的经营、资本、财务等的年度收支总体计划。
4、 风险防范控制
在市场经济中,企业不可避免的会遇到各种风险,因此为防范规避风险,企业管理者应建立风险评估机制。企业常有的风险评估内容有筹资风险评估、投资风险评估、信用风险评估。
5、 财产保全控制
企业的各种财产物资只有经过授权,才可以被接触或处理,以保证资产的安全。主要内容有:(1)限制接近资产。只有经过企业管理者授权批准的人员才能够接触现金、其他易变现资产、存货资产等。(2)定期盘点实物。企业管理者建立对资产定期盘点制度,对盘点中出现的差异应进行调查,对盘亏资产应分析原因、查明责任。(3)财产保险。企业管理者通过对资产投保增加实物受损后的补偿机会,从而保护实物的安全。[2]
内部控制原则
一般来说,金融机构在内部控制建设方面应遵循以下原则:
有效性
要使内部控制充分发挥控制作用,在各部门和各岗位得到贯彻实施,建立的内部控制必须具有有效性,即各种内部控制制度包括最高决策层所制定的业务规章和发布的指令,必须符合国家和监管部门的规章.必须具有高度的权威性,必须真正落到实处,成为所有员工严格遵守的行动指南;执行内控制度不能存在任何例外,任何人(包括董事长、总经理)不得拥有超越制度或违反规章的权力。
审慎性
内部控制的核心是有效防范各种风险.为了使各种风险控制在许可的范围之内,建立内部控制必须以审慎经营为出发点,要充分考虑到业务过程中各个环节可能存在的风险,容易发生的问题.设立适当的操作程序和控制步骤来避免和减少风险,并且设定在风险发生时要采取哪些措施来进行补救。
全面性
内部控制必须渗透到金融机构的各项业务过程和各个操作环节,覆盖所有的部门和岗位,不能留有任何死角和空白,做到无所不控。
及时性
是指内部控制的建立和改善要跟上业务和形势发展的需要开设新的业务机构或开办新的业务种类,必须树立“内控先行”的思想.首先建章立制,采取有效的控制措施,即使在金融创新的领域,也不能因为法律没有规定或监管当局没有要求而不采取必要的控制措施。
独立性
内部控制的检查、评价部门必须独立于内部控制的建立和执行部门,直接的操作人员和直接的控制人员必须适当分开,并向不同的管理人员报告工作;在存在管理人员职责交叉的情况下,要为负责控制的人员提供可以直接向最高管理层报告的渠道。
十大问题
1.出纳领取银行对账单、编制银行存款余额调节表。
2.领导“一只笔”审批,缺乏完善内控制度和流程保障。
3.过于依赖业务人员,企业资源掌握在个人手中,企业对业务开展失去控制。
4.内部控制制度文字描述性东西较多,清晰的流程图和配套表单较少。
5.内部控制制度“救火式”的较多,制度体系缺乏系统性和完整性,甚至政出多门,相互打架。
6.员工临时休假或出差时,缺乏明确的工作交接制度。
7.人员招聘时注重笔试和面试的考察,忽视背景调查。背景调查是不难发现的。
8.关键岗位无强制轮换或带薪休假制度。
9.过分强调控制成本,经常将效率作为弱化或逾越内部控制的理由。
10.说一套,做一套,制度放空炮。
控制措施
企业内部控制的核心是控制活动,控制活动是企业根据风险评估结果,结合风险应对策略,确保内部控制目标得以实现的方法和手段。企业内部控制措施通常包括风险控制、不相容岗位分离控制、授权审批、会计系统控制、财产保护控制、预算控制、营运分析控制、绩效考评控制等。企业应当结合风险评估结果,通过手工控制与自动控制、预防性控制与发现性控制相结合的方法,运用相应的控制措施,将风险控制在可承受度之内。
1、风险控制 。 风险控制要求单位树立风险意识,针对各个风险控制点,建立有效的风险管理系统、通过风险预警、风险识别、风险评估、风险分析、风险报告等措施,对财务风险和经营风险进行全面防范和控制。
2、不相容岗位分离控制。不相容岗位分离控制要求单位不相容职务分离的原则,合理设置会计及相关工作岗位,明确职责权限,形成相互制衡机制。主要包括:授权批准、业务经办、会计记录、财产保管、稽核检查等职务。
3、授权批准控制。授权批准控制要求单位明确规定涉及会计及相关工作的授权批准的范围、权限、程序、责任等内容,单位内部的各级管理层必须在授权范围内行使职权和承担责任,经办人员也必须在授权范围内办理业务。
4、会计系统控制。会计系统控制要求单位依据《会计法》和国家统一的会计制度,制定适合本单位的会计制度,明确会计凭证、会计账簿和财务会计报告的处理程序,建立和完善会计档案保管和会计工作交接办法,实行会计人员岗位责任制,充分发挥会计的监督职能。
5、预算控制。预算控制要求单位加强预算控制、执行、分析、考核等环节的管理,明确预算项目,建立预算标准,规范预算的编制、审定、下达和执行程序,及时分析和控制预算差异,采取改进措施,确保预算的执行。预算内资金实行责任人限额审批,限额以上资金实行集体审批。严格控制无预算的资金支出。
6、财产保全控制。 财产保全控制要求单位限制未经授权的人员对财产的直接接触,采取定期盘点、财产记录、账实核对、财产保险等措施,确保各种财产的安全完整。
7、内部报告控制。内部报告控制要求单位建立和完善内部报告制度,全面反映经济活动情况,及时提供业务活动中的重要信息,增强内部管理的时效性和针对性。
8、系统自动控制。在信息技术飞速发展的今天,大多数企业都有自己的信息系统,应尽量使用系统自动控制代替人工控制。
内部控制制度不能有效执行原因
1.制度本身制定得不合理,或过于理想化,或随着新情况出现,原有制度已不能适应却没有及时修改,从而使得制度不具可操作性,自然也就不会被执行;
2.缺乏保证制度执行的机制,一些单位对内部控制执行情况既没有检查监督,又没有相应的奖惩措施,内部
控制制度成为墙上摆设和一纸空文也就不奇怪了。
为此,企业一方面需要提高制度可操作性,另一方面要加强制度执行力,不能为制度而制度。

本文来源:https://www.shanpow.com/mrmy/433086/

《执行控制结构.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

相关阅读
  • 天天金句50例 天天金句50例
  • 攻坚克难类排比句40例 攻坚克难类排比句40例
  • 比学赶超类排比句金句40组 比学赶超类排比句金句40组
  • “不”字型排比句40例 “不”字型排比句40例
  • 公文写作实用排比句100组 公文写作实用排比句100组
  • 公文写作实用金句100组大全 公文写作实用金句100组大全
  • “攻坚克难”排比句金句40组 “攻坚克难”排比句金句40组
  • “加油鼓劲”排比句金句40组 “加油鼓劲”排比句金句40组
为您推荐