2017-09-04 75 views
1

我下面的一些例子在線在即時通訊試圖從一個子值傳遞到VBA中另一個子,但得到的錯誤:Excel的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關鍵字由excel保留用於按鈕上的Click事件。

+0

我確實有一個名爲set_button的按鈕,帶有點擊操作。所以,即使這是該按鈕的代碼,我可以從子程序中刪除_click嗎?或者我怎麼能把一個值傳遞給子程序? –

+0

,因爲im試圖做的是在我的用戶表單中,當點擊next_sat_click時,它計算下一個星期六日期,然後將該值作爲字符串傳遞給set_button_click。然後當用戶窗體中的set_button被按下時,將該日期寫入到excel文件中。如果這甚至可能或不同的方式,我應該接近它。 –

+0

只需直接點擊Next_sat_click將該日期寫入excel文件,或者,如果您喜歡我在用戶窗體中想象的那樣,請創建一個文本框,其中next_sat_click將保存該日期,並使用set_button_click只需從文本框中獲取值並將其保存你想在哪裏。 – exSnake

0

您不能更改事件處理程序的參數(參數名稱除外)。這也意味着你不能添加任何參數,如果沒有預期。甚至不會Optional ByRef nextsat As String將工作。

有三種方式來傳遞一個用戶窗體事件處理程序之間的值:

  1. 使用全局變量(不推薦,曾經);
  2. 通過UserForm.tag屬性(推薦用於簡單的值,如字符串)。如果它已經有永久使用,顯然不能使用;
  3. 通過一個或多個隱藏控件(推薦用於多個或複雜的值以及簡單的值)。

我用第二種方法:

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 

在你的情況下更好的解決方案可能是在其中存儲計算的日期,當用戶點擊一個next_sat可見文本框,所以用戶可以看到它。然後在你的set_button處理程序中,從TextBox.Text中獲取它。

+0

我肯定會給你一個鏡頭。謝謝! –