2017-07-16 22 views
0

我在我的工作表("Sheet1")下有一個Command按鈕。如何分配WorkSheet模塊中的宏,並將多個參數分配給用於在受保護的工作表中插入新TableRow的命令按鈕?

我的工作表已被保護,我需要讓用戶添加新行。

婁宏被寫爲做到這一點:(這是一個工作表模塊)

Sub TblNewLine(Sht As String, Tbl As String, Pass as String, Filtering As Boolean, Pivot As Boolean) 
if Nor Pass = vbNullString then 
    Dim strP as String 
    strP = InputBox ("Please input Password","Password") 
    if Not strP = Pass Then 
     if not strP = vbNullString Then MsgBox "Wrong Password!", vbCritical, "Error!" 
     Exit Sub 
    End If 
End If 
    Sheets(Sht).Unprotect 
    Sheets(Sht).ListObjects(Tbl).ListRows.Add 
    Sheets(Sht).Protect AllowFiltering:=Filtering, AllowUsingPivotTables:=Pivot 
End Sub 'TblNewLine 

例如:論點是:

sht:= "sheet1", Tbl:="PvtReport", Pass:="", Filtering:=True, Pivot:= True

因此我需要分配此宏準備在表下的命令按鈕。

並按下按鈕傳遞參數。

在分配宏窗體時,我無法在宏名稱組合框中找到上面的宏。

如何將上述宏及其相關參數分配給命令按鈕?

或者是否有更好的解決方案將新行插入到受保護的工作表中?

+0

在Sub之前刪除'Private'關鍵字。有關詳細信息,請參閱[this](https://superuser.com/questions/309524/how-do-i-use-a-private-sub-in-excel)。 – Mrig

+0

已刪除,但尚未在分配宏中顯示。當我在Assign宏的宏名字段中寫入我的子程序名時,它的名字被調用。但是我的子程序中存在傳遞參數的問題。 – mgae2m

回答

1

嘗試類似下面:

Sub Button1_Click() 
    Call TblNewLine("Sheet1", "PvtReport", True, True) 
End Sub 

Sub TblNewLine(Sht As String, Tbl As String, Filtering As Boolean, Pivot As Boolean) 
    Sheets(Sht).Unprotect 
    Sheets(Sht).ListObjects(Tbl).ListRows.Add 
    Sheets(Sht).Protect AllowFiltering:=Filtering, AllowUsingPivotTables:=Pivot 
End Sub 

編輯:


參考

enter image description here

+0

謝謝。似乎沒有辦法直接使用按鈕傳遞參數。 – mgae2m

+0

如何通過命令按鈕在'Sheet1'模塊中調用'Buton1_Click'宏。因爲在分配宏組合框中沒有找到Button1_Click()。 – mgae2m

+0

您可以簡單地編寫'Call Buton1_Click',但您應該能夠在'assign macro'列表中看到所有的子名稱。是否有可能與您的工作簿共享虛擬數據,以便我可以看看。 – Mrig

0

有了十分感謝查看圖像從Mrig的指導;對於更多的解釋,我呈現我達到了什麼,作爲一個答案:

有一種方法用命令按鈕傳遞參數,我在QA Collective的答案閱讀相關問題的答案。

起初,我遇到'不能從Microsoft Excel運行宏'錯誤,但是當我關閉並打開工作簿文檔時,看到指定宏中的宏名稱字段被更改爲波紋管,並且我的子例程通過傳遞常量通過點擊按鈕。

'FileName.xlsm'!'TblNewLine "SheetName", "tblReminder","",True,False' 

請不要說'字符爲包圍子程序名稱和參數列表字符串,都在扭曲'。

在上面的例子中,我的子需要5個參數,所以他們傳遞每個命令按鈕,要調用這個子。

有關分配宏沒有參數的一點,並且Worksheet模塊中有Asign Macro組合列表的下面列出,而不是按子程序在其他模塊中的順序。

如果子程序宏有參數,那麼在Asign Macro中沒有列出,並且應該在相關字段中輸入它們,如上面我解釋的例子。

相關問題