wie

2016-08-08 33 views
2

alle Tabelleninformationen mit dynamischen vba Zellen in Excel zu kopieren habe ich eine Tabelle in einem Blatt wie untenwie

enter image description here

Auch habe ich Codes in allen OptionButtons vba gezeigt. Meine Codes für OptionButtons sieht wie folgt aus:

Private Sub OptionButton11_Click() 
    Worksheets("Sheet1").Activate 
    Range("$J$6").Activate 
    ActiveCell.FormulaR1C1 = "=RC[-5]*4" 
    ActiveCell.Offset(5, 0).Select 

    ActiveCell.Select 
    ActiveCell.FormulaR1C1 = "=SUM(R[-7]C:R[-1]C)" 
End Sub 

Und wie folgt aus:

Private Sub 
    Worksheets("Sheet1").Activate 
    Range("$J$8").Activate 
    ActiveCell.FormulaR1C1 = "=RC[-5]*2" 
    ActiveCell.Offset(3, 0).Select 

    ActiveCell.Select 
    ActiveCell.FormulaR1C1 = "=SUM(R[-7]C:R[-1]C)" 
End Sub 

Ich habe 45 solche Tabellen auf demselben Blatt, und ich will nicht mit dem Code für jeden Radiobutton. Mein Code funktioniert gut für den ersten Tisch, aber wie kann ich das für den Rest kopieren?

Ich möchte wie in ein Blatt tun Befestigungs

enter image description here

Antwort

0
  1. Sie müssen zuerst verstehen, was das Muster durch den Code gefolgt ist. Wenn Sie das Muster identifizieren können, müssen Sie nur einen sehr einfachen Code für alle Schaltflächen verwenden.

  2. Verwenden Sie statt ActiveX Option Button auch Form Control Option Button. Der Grund dafür ist, dass wir Assign Macro

  3. Der nächste Trick alle Optionsschaltflächen auf den gleichen Code binden können, die wir verwenden werden, ist die Option Button in einer Folge zu nennen, so dass wir die Zahl (zB verwenden können: 1 aus „Option Button 1“) für unsere Berechnungen

Hier ist ein sehr einfaches Beispiel, wie man mehrere Tasten verwenden, um die gleiche Funktionalität

sagen wir unser Arbeitsblatt sieht wie folgt aus zu erreichen. Nun, was wir wollen ist, welcher Knopf wir die Zelle J in der jeweiligen Zeile wählen, sollte einen gewissen Wert haben.

enter image description here

diesen Code in einem Modul Put. Weiter in jedem Option Button, klicken Sie mit der rechten Maustaste und klicken Sie auf Assign Macro. Wählen Sie den gemeinsamen Code, den Sie geschrieben haben. In diesem Beispiel wählen wir Sample.

Beachten Sie, wie wir die Application.Caller verwenden, um den Namen der Optionsschaltfläche zu erhalten, um zu erreichen, was wir wollen.

Sub Sample() 
    Dim i As Long 

    i = Val(Trim(Replace(Application.Caller, "Option Button", ""))) 

    Sheet1.Range("J" & i + 1).Value = "Blah Blah Blah" 
End Sub 

enter image description here

enter image description here

In Ihrem Fall kann der Code so etwas wie diese geschrieben werden. Sie müssen das Muster identifizieren und den folgenden Code entsprechend ändern.

Sub Sample() 
    Dim i As Long 
    Dim multiplier As Long 

    i = Val(Trim(Replace(Application.Caller, "Option Button", ""))) 

    multiplier = i + 3 

    With Sheet1.Range("J" & i + 5) 
     .FormulaR1C1 = "=RC[-5]" & "*" & multiplier 
     .Offset(i + 5, 0).FormulaR1C1 = "=SUM(R[-7]C:R[-1]C)" 
    End With 
End Sub 

Hinweis: Die oben kann mit ActiveX-Steuerelemente auch erreicht werden, aber dann haben Sie mit Array-Steuerelementen arbeiten, wie in VBA – Control Arrays

+0

'Application.Caller' gibt Ihnen den Namen der Optionsschaltfläche, die den Code aufgerufen hat und in' Replace (Application.Caller, "Option Button", "") 'Ich erhalte die Nummer durch Ersetzen von' Option Button 'in' Option Button 1' EDIT: Ich sehe, Sie haben Ihren Kommentar gelöscht? –

+0

Hey Siddharth, ich bin sehr froh für deine Antwort. Ich versuche deine Antwort zu verstehen. Also kann ich nicht '(Ersetzen (Application.Caller, "Option Button", "")) und wenn ich diesen Code in meine OptionButton schreiben, aber es schreibt immer in der gleichen Spalte. –

0

gezeigt Sie können einen VBA-Code schreiben Subroutinen hinzufügen in Schleife zu einem Modul. Zum Beispiel, wenn Sie Subroutinen Private Sub OptionButton1(), Private Sub OptionButton2(), Private Sub OptionButton3() und so weiter zu Ihrem Module1 dann hinzuzufügen,

Sub AddProcedureToModule() 
    Dim VBProj As VBIDE.VBProject 
    Dim VBComp As VBIDE.VBComponent 
    Dim CodeMod As VBIDE.CodeModule 
    Dim LineNum As Long 
    Const DQUOTE = """" ' one " character 

    Set VBProj = ActiveWorkbook.VBProject 
    Set VBComp = VBProj.VBComponents("Module1") 
    Set CodeMod = VBComp.CodeModule 

    With CodeMod 

    For i = 1 To 5 
     LineNum = .CountOfLines + 1 
     .InsertLines LineNum, "Private Sub OptionButton" & i & "_Click()" 
     LineNum = LineNum + 1 
     .InsertLines LineNum, " MsgBox " & DQUOTE & "Hello World" & DQUOTE 
     LineNum = LineNum + 1 
     .InsertLines LineNum, "End Sub" 
    Next i 

    End With 
End Sub 

Dies wird den folgenden Code in Ihre Module1 einfügen

Private Sub OptionButton1_Click() 
    MsgBox "Hello World" 
End Sub 
Private Sub OptionButton2_Click() 
    MsgBox "Hello World" 
End Sub 
Private Sub OptionButton3_Click() 
    MsgBox "Hello World" 
End Sub 
Private Sub OptionButton4_Click() 
    MsgBox "Hello World" 
End Sub 
Private Sub OptionButton5_Click() 
    MsgBox "Hello World" 
End Sub 
+0

1 Tabelle hat 28 Optionsfelder. So Sagen wir mal für 6 Tabellen, dass Sie ihn bitten, den Code 168 mal zu replizieren ??? Ich frage mich, was mit seinem Projekt passieren wird, wenn er mehr Tische hat;) –

+0

für jetzt habe ich 6 Tische, aber ich werde mehr als 50 Tische haben von Proejct. :) –

+0

mein Chef wollte von mir ein Torchendiagramm für einen Wettbewerb. es gibt mehr als 50 Projekte. Ich werde das der Jury überlegen machen. –