わかりやすく簡潔にしてコードを改善しようとしています。 「ABC」という名前の「MODTEST」とのSheet1という名前のモジュールでは、私は次のようにありますFORを使用してそれぞれの変数名で関数を呼び出す方法は?
Sub Questionnaire_1() ' ModTest
' do something
End Sub
Sub Questionnaire_2() ' ModTest
' do something
End Sub
Sub Questionnaire_3() ' ModTest
' do something
End Sub
Sub Questionnaire_4() ' ModTest
' do something
End Sub
Sub Math() ' ModTest
Dim Question As Integer
Question = Sheets("ABC").Range("G5").Value
If Question = 0 Then
' do something
Else
Select Case Question
Case Is = 1
Call Questionnaire_1
Case Is = 2
Call Questionnaire_1
Call Questionnaire_2
Case Is = 3
Call Questionnaire_1
Call Questionnaire_2
Call Questionnaire_3
Case Is = 4
Call Questionnaire_1
Call Questionnaire_2
Call Questionnaire_3
Call Questionnaire_4
End Select
End if
End Sub
しかし、サブQuestionnaire_1 [私は4件のアンケートを使用していませんが、100私の意図は、ラインを維持することです(...)サブQuestionnaire_100]が選択ケースを排除することでコマンドに以内に「変数」という名前コール機能を改善します
Sub Math()
Dim i, Question As Integer
Dim Variable as String
Question = Sheets("ABC").Range("G5").Value
If Question = 0 Then
' do something
Else
For i = 1 to Question
Variable = "Questionnaire_" & i
Call Variable
Next i
End if
End Sub
缶だれでもしてください 助けて?私は、以下の「VBAコンパイルエラー:予想されるサブ、関数やプロパティ」を受け取る。
よりリッテを考えると、また、働いている他のソリューションでのSelect Caseとコール機能ラウンドを取得することが可能であったと100隻の潜水艦の使用を避けるよう、フォローアップ、新たに改良されて、すべての上記のコードを置き換えます!。私はこのコードをあなたのために働くかもしれないと思われる
Sub Questionnaire() ' ModTest
Dim i, f, g, Question As Integer
Question = Sheets("ABC").Range("G5").Value
If Question = 0 Then
' do something
Else
For i = 1 To Question
f = 18 + 2 * i
g = 19 + 2 * i
With Worksheets("ABC")
.Activate
.Range("V2").Value = i
.Range("X2").Value = "C"
.Range("G2").Select
Selection.Copy
.Range("G" & f).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Range("G3").Select
Selection.Copy
.Range("H" & g).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Range("X2").Value = "I"
.Range("L5").Select
Selection.Copy
.Range("L" & f).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Range("L6").Select
Selection.Copy
.Range("M" & g).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
Next i
End If
End Sub
'変数="アンケート "&i'。文字列を連結するには '&'を使い、ブール演算子として 'And'を使います。 –
可読性と簡潔さを向上させることを目的としている場合は、まずは100のSubsを使用するべきではありません。それらがすべて同じ(名前付けを考慮して)同じであると仮定すると、おそらくパラメータやクラスを調べるべきです。 – Chrowno
[文字列でサブを呼び出そうとしている - VBA](https://stackoverflow.com/questions/15969796/trying-to-call-a-sub-with-a-string-vba) –