如果功能给我带来问题

时间:2017-03-20 04:30:47

标签: excel vba excel-vba if-statement

即使我输入了男性,我的价值也会变得虚假而不是我添加的价值。谁有任何想法?

If gender = "Male" Then
Sheet2.Range("A2").Value = "he" & Sheet2.Range("A3").Value = "him" & Sheet2.Range("A4").Value = "his"
Else
Sheet2.Range("A2").Value = "she" & Sheet2.Range("A3").Value = "her" & Sheet2.Range("A4").Value = "her"
End If

2 个答案:

答案 0 :(得分:4)

您无法在同一语句中分配两次值。在第一个之后的任何=字符被视为逻辑运算符(等于),而不是作为赋值。

所以如果你有:

a = b = c

VBA将语句视为:将“Is b等于c”的结果分配给A. 如果你在一个陈述中有三个相同的符号会变得更复杂,但它不会是你想要的任何速度。

此外,&运算符用于字符串连接。所以

a = "top" & "hat"

将字符串“tophat”分配给。

您可能希望使用:运算符而不是&amp ;.这在单行上将语句分开。所以试试这个:

If gender = "Male" Then
Sheet2.Range("A2").Value = "he" : Sheet2.Range("A3").Value = "him" : Sheet2.Range("A4").Value = "his"
Else
Sheet2.Range("A2").Value = "she" : Sheet2.Range("A3").Value = "her" : Sheet2.Range("A4").Value = "her"
End If

但是,我建议你不要使用:这里。实际上没有必要,我认为它使代码更难阅读。我建议:

If gender = "Male" Then
    Sheet2.Range("A2").Value = "he"  
    Sheet2.Range("A3").Value = "him"
    Sheet2.Range("A4").Value = "his"
Else
    Sheet2.Range("A2").Value = "she"
    Sheet2.Range("A3").Value = "her"  
    Sheet2.Range("A4").Value = "her"
End If

答案 1 :(得分:1)

Rich Holton告诉您代码无效的原因

这里我建议你一些不同的技巧

Option Explicit

Sub main()
    Dim valsArray As Variant '<--| declare a Variant variable to hold an array
    Dim gender As String

    gender = "Male" '<--| gender initialization for testing purposes

    If gender = "Male" Then
        valsArray = Array("he", "him", "his") '<--| fill your Variant with values corresponding to the 'gende'r value
    Else
        valsArray = Array("she", "her", "her") '<--| fill your Variant with values corresponding to the 'gende'r value
    End If
    Sheet2.Range("A2:A4").Value = Application.Transpose(valsArray) '<--| write all values in one shot (you need 'Transpose()' to change the "horizontal" Variant array to a "vertical" one and fit the range you're fill values of        
End Sub

您还可以使用IIf()功能

进一步缩短它
Option Explicit

Sub main()
    Dim gender As String

    gender = "Male" '<--| gender initialization for testing purposes

    Sheet2.Range("A2:A4").Value = Application.Transpose(IIf(gender = "Male", Array("he", "him", "his"), Array("she", "her", "her")))        
End Sub