2011-09-12 11 views
2

私はVB.net 2005を使用してデータベースアプリケーションからExcelファイルにデータを入力しています。Excelシートを再プロテクトし、オートフィルタを有効にする

シートの保護を解除し、名前付き範囲を使用して特定のセルにデータを入力してから、シートを再保護します。

自動フィルタリングを有効にして保護されているファイルを実行するまで、これまでのところうまくいきました。シートを再保護すると、オートフィルターのドロップダウンを許可しながらシートを保護しているようには見えません。オートフィルタのドロップダウン矢印はグレー表示され、無効になっています。

次のコードを使用して、データを入力した後でシートを再保護します。

If bolProtected = True Then 
    For i = 0 To intProtectIndexes.Length - 1 
     objExcel.Sheets(intProtectIndexes(i)).Select() 
     objExcel.ActiveSheet.Protect(strPassword) 
    Next 
End If 

また、Timのリンクのコードを使用して試しました。

objExcel.Sheets(intProtectIndexes(i)).Select() 
objExcel.ActiveSheet.Protect(Password:=strPassword, Contents:=True) 
objExcel.activesheet.enableautofilter = True 

これでも、入力されたワークシートでオートフィルタのドロップダウンが無効になります。

VBAでマクロを作成し、使用して:

ActiveSheet.Protect(Contents:=True, AllowFiltering:=True) 

が正常に動作します。シートは保護されており、オートフィルターのドロップダウンを使用できます。しかし、VB.netプロジェクトで同じコードを使用すると、ドロップダウンが有効になりません。

+0

を試してみてください?たぶんこれが役立ちます:http://office.microsoft.com/en-us/excel-help/enable-autofilter-functionality-for-a-protected-worksheet-HA001098270.aspx –

+0

プログラムでシートを再保護すると、データを挿入する前に配置されていたオートフィルタは使用できなくなります。私はあなたが与えたリンクが答えを持っていると思います。答えを出して、私はそれを試して、それがうまくいくかどうかを見て、あなたに信用を与えるでしょう。 – KevenDenen

答えて

3

を使用すると、「自動フィルタリングオプションを可能にしながら、それを守るように見えることはできません」とはどういう意味ですか

With objExcel.Sheets(intProtectIndexes(i)) 
    .Protect(Password:=strPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True) 
    .EnableAutoFilter = True 
End With 

それとも

With objExcel.Sheets(intProtectIndexes(i)) 
    .Protect (Password:=strPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True) 
End With 
+0

2番目のオプションは魅力的に機能しました。 StetsrangeはSheets()オブジェクトでは動作しますが、ActiveSheetでは動作しません。 – KevenDenen

+0

それはあなたのために働いてうれしい。私は両方のオプションが働いたが、持っているだろう。最初のオプションは、必ずUserInterfaceOnly:= Trueを必要とします。 – Reafidy

+0

は最初のオプションを試してみませんでした。私はそれがまた働いたと思います。 – KevenDenen

関連する問題