2017-09-04 14 views
1

私はVBAで別のサブに一つのサブから値を渡すが、エラーを取得しようとイムれるオンラインいくつかの例を以下ました:エクセルVBAの参照問題

コンパイルエラー: プロシージャの宣言は、の説明と一致しません。同じ名前のイベントまたはプロシージャです。

Sub next_sat_click() 

Dim iweekday As Integer 
Dim nextsat As String 
Dim index As Integer 
Dim str_game_date As String 

iweekday = weekday(Now(), vbSunday) 

nextsat = Format((Now + 7 - iweekday), "mm-dd-yy") 

Call set_button_Click(nextsat) 

End Sub 

Sub set_button_Click(ByRef nextsat As String) 
...... 
End Sub 
+0

「set_button」というボタンがありますか?もしそうなら、あなたは 'Click'イベントが予期していたパラメータを変更したことに気が狂っているでしょう。 – YowE3K

答えて

0

変更SetButtonOnClickのような何か他のもので、サブ名。

同じ名前でボタンが呼び出されている場合、_ClickキーワードはボタンのClickイベントのためにExcelによって予約されています。

+0

私はクリックアクションでset_buttonというボタンを持っています。だから私はそのボタンのコードですが、私はちょうどサブプロシージャから_clickを削除することはできますか?それ以外の方法でそのサブプロシージャに値を渡すことはできますか? –

+0

私は何をしようとしているのは、next_sat_clickがクリックされたときに私のuserformに次の土曜日日付を計算し、その値を文字列としてset_button_clickに渡すためです。その後、ユーザーフォーム書式でset_buttonが押されると、その日付はExcelファイルに書き込まれます。それが可能であっても、それとは別のやり方で私はそれにアプローチすべきです。 –

+0

Next_sat_clickがクリックされたときに、その日付をExcelファイルに直接書き込むか、ユーザーフォームで想像しているような場合は、next_sat_clickがその日付を保存するテキストボックスを作成し、set_button_clickを使用してテキストボックスから値を取得して保存しますあなたが望む場所。 – exSnake

0

イベントハンドラのパラメータは変更できません(パラメータ名を除く)。つまり、を追加できない場合は、のパラメータを追加できません。もはやOptional ByRef nextsat As Stringは機能しません。ユーザーフォームでのイベントハンドラの間で値を渡すには、3つの方法があります

:(推奨しません、これまで

  1. グローバル変数を使用するには、
  2. プロパティ(文字列などの単純な値の場合は、UserForm.tagプロパティを推奨)。既に永続的に使用されている場合、明らかに使用することはできません。
  3. hiddenコントロール(複数の値または複雑な値および単純な値の場合に推奨)を介して。あなたのケースでは、より良い解決策は、そう、ユーザーがnext_satをクリックしたときに、あなたが計算された日付を保存する見えるテキストボックスを持っているかもしれません

    Sub next_sat_click() 
    
    Dim iweekday As Integer 
    Dim nextsat As String 
    Dim index As Integer 
    Dim str_game_date As String 
    
    iweekday = Weekday(Now(), vbSunday) 
    
    nextsat = Format((Now + 7 - iweekday), "mm-dd-yy") 
    
    Me.Tag = nextsat 
    
    End Sub 
    
    Sub set_button_Click() 
    Dim nextsat As String 
    nextsat = Me.Tag 
    ...... 
    End Sub 
    

    :私は2番目の方法を使用しました

ユーザーはそれを見ることができる。次に、set_buttonハンドラで、TextBox.Textから取得します。

+0

私は確かにそのショットを与えるでしょう。ありがとう! –