2011-05-02 99 views
2

我还没有任何人发布过此问题,如果我错了,请不要开枪! :PExcel宏 - 选择案例

我有一个怪物,如果其他结构约300-400行。有了一个案例结构,我可以把它削减到100或更少。麻烦的是,你只能找到具有固定值而非单元格值的选择案例。

代码是做什么的?

C17-C22可以给出一个值,1或0.如果该值为1,则将文本复制到工作表中,如果该值为0,则不会发生任何事情。

Select case ??? 
    Case "C17" = 1 
     show me text!! 
    Case "C18" = 1 
     show me text!! 
    ... 
End select 

我知道我可以用不同的选择的情况下

Select case "C17".value 
    Case 1 
     show me text!! 
End select 
... 

做,但我觉得应该可以做在一个大的选择案例,而不是多重选择个案。

非常感谢!

+0

是什么每个案例做?你可以给任何人提供示例代码来了解整体情况吗? – shahkalpesh 2011-05-02 07:33:25

+0

@Shahk,我已经稍微编辑了我的代码。每个案例只是复制/粘贴文本,但我知道如何做到这一点。 – CustomX 2011-05-02 07:38:45

回答

1

这听起来像你让自己的生活变得更加复杂试图鞋拔子您的问题到Select Case构造。 Select Case,顺便说一句,是差不多If Else完全一样;区别主要是化妆品,你原则上可以use them interchangeably

为什么不能是这样的:

Dim i As Long 
Dim varFlags As Variant 
Dim varText As Variant 

' Load flags from sheet. 
varFlags = Range("C17:C22") 

' Load text associated with each flag. Here I'll just hardcode them. 
varText = Array("Text17", "Text18", "Text19", "Text20", "Text21", "Text22") 

For i = LBound(varFlags, 1) To UBound(varFlags, 1) 
    If varFlags(i, 1) = 1 Then 
     'It's a 1. Copy the relevant text. 
     'Here I just MsgBox it. 
     MsgBox varText(i - 1) 'Sorry for the i-1, my varText array is zero-based! 
    Else 
     'It's not a 1. Do nothing. 
    End If 
Next i 
1

选择语句是为了区分一个变量可以有的不同值。即Select Case是等式的左边,下面的等式是等式右边的不同。我认为你的任务不是Select case

如果每个细胞的情况都是相同的,循环遍历你的范围并为每个细胞做选择。但是如果你只检查,如果该细胞是0或1,则使用if

喜欢的东西:

For each c in SourceRange 
    if c.value Then 
     ... 
    end if 
Next c 
+0

嗯,我想你误解了我的问题。每种情况下显示的文字都不相同。使用a For each循环仅适用于1个案例,所以我需要5个For Each循环。对于外人来说,我认为选择案例结构更容易理解。 – CustomX 2011-05-02 08:13:25

+0

你也可以把你的select语句放入For each,并为每个单元格做5件事情。如果每个单元的任务基本相同,那么不要一次又一次地做同样的工作。当然,您可以将每个单元格的不同文本复制到工作表的不同位置。 – stema 2011-05-02 08:18:51