Excel 功能“;如果;在这种情况下,结果是一个变量

Excel 功能“;如果;在这种情况下,结果是一个变量,excel,vba,if-statement,Excel,Vba,If Statement,我想声明一个名为“taux”的变量,然后在计算中使用它 Dim numLigne, pageClient numLigne = 2 Set pageClient = Sheets.Add(After:=Sheets("paramètre")) '1ere étape: Création a client file from a "parameter" sheet If Range("paramè

我想声明一个名为“taux”的变量,然后在计算中使用它

Dim numLigne, pageClient
    numLigne = 2
    Set pageClient = Sheets.Add(After:=Sheets("paramètre"))
    
    '1ere étape: Création a client file from a "parameter" sheet
    
    If Range("paramètre!B" & numLigne) = "" Then
    Else
    pageClient.Name = Range("paramètre!B" & numLigne)
    End If


    '2ème étape Copy Value from sheet "paramètre"
    
    Range("A1:D7") = Range("paramètre!A1:D6").Value
    Range("D4") = "Mensualité"
    Range("D5") = "Trimestriel"
    Range("D6") = "Semestriel"
    Range("D7") = "Annuel"
    
    '3ème étape: Calculating monthly, quarter, semester, and annual
    
    Dim taux, capital, duree
    
    capital = Range("B4")
    duree = Range("B6")
    
Dim taux 

if Range ("B7") <> "" then 'For information the value range ("B7") depends on the value inserted by userform, this value is related to insurance fee, if the client doesn't take any insurance, the appeared value would be #N/A
taux = Range ("B7") 
Else
taux = Range ("B5")
End If 
    
    Dim mensualité
    
    mensualité = -Pmt(taux / 12, duree * 12, capital)
    Range("E4") = mensualité
    
    Dim trimestriel
    
    trimestriel = -Pmt(taux / 3, duree * 3, capital)
    Range("E5") = trimestriel
    
    Dim semestriel
    
    semestriel = -Pmt(taux / 2, duree * 2, capital)
    Range("E6") = semestriel
    
    Dim annuel
    annuel = -Pmt(taux / 1, duree * 1, capital)
    Range("E7") = annuel
    
    '4ème étape: faire un tableau d'amortissement
    
    Dim numPeriode, interest, rembCap
    
    For numPeriode = 1 To duree * 12
    
        Range("B" & numPeriode + 11) = capital

        interest = capital * taux / 12
        rembCap = mensualité - interest
        capital = capital - rembCap

        Range("A" & numPeriode + 11) = numPeriode
        Range("C" & numPeriode + 11) = interest
        Range("D" & numPeriode + 11) = rembCap
    
    Next

End Sub
Dim numLigne,页面客户端
numLigne=2
设置pageClient=Sheets.Add(后面:=Sheets(“参数”))
'1ereétape:从“参数”表中复制客户端文件
如果Range(“paramètre!B”&numlinge)=“那么
其他的
pageClient.Name=Range(“paramètre!B”&numlinge)
如果结束
“2èmeé磁带从工作表“paramètre”复制值”
范围(“A1:D7”)=范围(“参数!A1:D6”)。值
范围(“D4”)=“Mensualité”
范围(“D5”)=“Trimestriel”
范围(“D6”)=“Semestriel”
范围(“D7”)=“年度”
“3èmeé磁带:计算月度、季度、学期和年度
迪姆陶克斯,首都,杜雷
资本=范围(“B4”)
duree=范围(“B6”)
暗陶克斯
如果范围(“B7”)“那么”对于信息,值范围(“B7”)取决于userform插入的值,该值与保险费相关,如果客户未投保,则出现的值将为#N/A
taux=范围(“B7”)
其他的
taux=范围(“B5”)
如果结束
昏暗的餐桌
mensualité=-Pmt(taux/12,duree*12,大写)
范围(“E4”)=测量值
暗三叶草
trimestriel=-Pmt(taux/3,duree*3,大写)
范围(“E5”)=trimestriel
暗淡的塞梅斯特里尔
semestriel=-Pmt(taux/2,duree*2,大写)
范围(“E6”)=semestriel
暗年金
annuel=-Pmt(taux/1,duree*1,大写)
范围(“E7”)=年
'4èmeé磁带:公平的摊销表
暗淡的努姆佩里奥德、兴趣、回忆
对于numPeriode=1到duree*12
范围(“B”&numPeriode+11)=资本
利息=资本*taux/12
rembCap=mensualité-利息
资本=资本-rembCap
范围(“A”&numPeriode+11)=numPeriode
范围(“C”&numPeriode+11)=利息
范围(“D”和numPeriode+11)=rembCap
下一个
端接头

从您的代码中我可以看到,您有一个打字错误和双重模糊。我已经纠正了这些问题和其他一些问题:

  • 打字错误(
    capital
    而不是
    capital
  • 删除了
    taux的双dim
  • 添加了
    wb
    ws
    以便正确引用范围
  • 定义每个dim
  • 而不是使用
    =”
    ,改为
    非(isempty())
    /
    isempty()
  • 将对
    “paramètre!B”
    的引用更改为
    wb.WorkSheets(“paramètre”).range()
  • “paramètreB”&numlinge
    为空时,添加了一个
    退出子项

你已经为taux设置了两次dim,这将导致一个错误你没有说明问题是什么谢谢你的帮助,关于这个问题没有说明,我相信我已经提到了,但我是这个论坛的新手,所以我并不真正使用消息格式。非常感谢你的帮助,我是VBA的新手。
Option Explicit                                                                                                     ' forces declaration of all variables

Sub Mechro()

    Dim numLigne As Integer
    Dim pageClient As Object
    Dim wb As Workbook: Set wb = ThisWorkbook
    Dim ws As Worksheet
    Dim capital As Integer
    Dim duree As String
    Dim taux As Integer
    Dim mensualité As Integer
    Dim semestriel As Integer
    Dim trimestriel As Integer
    Dim annuel As Integer
    Dim numPeriode As Integer
    Dim interest As Integer
    Dim rembCap As Integer
        
    numLigne = 2
    Set pageClient = wb.Sheets.Add(After:=wb.Worksheets("paramètre"))
    
    '1ere étape: Création a client file from a "parameter" sheet
    
    If Not (IsEmpty(wb.WorkSheets("paramètre").Range("B" & numLigne))) Then
        pageClient.Name = wb.WorkSheets("paramètre").Range("B" & numLigne)
        Set ws = wb.Worksheets(ActiveSheet.Name)
    Else
        MsgBox "paramètre!B" & numLigne & " is empty. Exiting sub"
        Exit Sub
    End If


    '2ème étape Copy Value from sheet "paramètre"
    
    ws.Range("A1:D7") = wb.Worksheet("paramètre").Range("A1:D6").Value
    ws.Range("D4") = "Mensualité"
    ws.Range("D5") = "Trimestriel"
    ws.Range("D6") = "Semestriel"
    ws.Range("D7") = "Annuel"
    
    '3ème étape: Calculating monthly, quarter, semester, and annual
       
    capital = ws.Range("B4")
    duree = ws.Range("B6")
    

    If Not (IsEmpty(ws.Range("B7"))) Then 'For information the value range ("B7") depends on the value inserted by userform, this value is related to insurance fee, if the client doesn't take any insurance, the appeared value would be #N/A
        taux = ws.Range("B7")
    Else
        taux = ws.Range("B5")
    End If
    
    mensualité = -Pmt(taux / 12, duree * 12, capital)
    ws.Range("E4") = mensualité
    
    trimestriel = -Pmt(taux / 3, duree * 3, capital)
    ws.Range("E5") = trimestriel
    
    semestriel = -Pmt(taux / 2, duree * 2, capital)
    ws.Range("E6") = semestriel
    
    annuel = -Pmt(taux / 1, duree * 1, capital)
    ws.Range("E7") = annuel
    
    '4ème étape: faire un tableau d'amortissement
    
    For numPeriode = 1 To duree * 12
    
        ws.Range("B" & numPeriode + 11) = capital

        interest = capital * taux / 12
        rembCap = mensualité - interest
        capital = capital - rembCap

        ws.Range("A" & numPeriode + 11) = numPeriode
        ws.Range("C" & numPeriode + 11) = interest
        ws.Range("D" & numPeriode + 11) = rembCap
    
    Next

End Sub