[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シートの保護をかけるとVBAが実行時エラーになる』(でめたん)
こちらの掲示板よりコードを拝借して、以下のマクロ内容で「科目リスト」を表示できるようにし、シート1〜10まで同じ仕様で作りました。
他の使用者が数式があるセルを変更できないように「シートの保護」の「ロックされていないセルの選択」にチェックし保護を設定後、
VBA設定セル部分に入力しようとすると「アプリケーション定義またはオブジェクト定義エラー」が出てしまいます。
============
「シートオブジェクト」
Private Sub Worksheet_Change(ByVal target As Range)
'DicSheetNameは辞書のシート名、 'DicRangeAddressは辞書の範囲を指定する ' Const DicSheetName = "勘定科目リスト" Const DicRangeAddress = "A"
'※入力セル以外の変更は無視 If Intersect(target, Range("B10,B12,B14,B16,B18")) Is Nothing Then Exit Sub
If target.Count > 1 Then '選択セルが2つ以上は無効 MsgBox "複数セル同時変更はサポートしません" & vbLf & "入力を取消し元に戻します" Application.EnableEvents = False Application.Undo Application.EnableEvents = True Exit Sub End If
Application.EnableEvents = False If Not 入力候補表示(DicSheetName, DicRangeAddress, target) Then MsgBox "リストにない値の入力は無効です" & vbLf & "入力を取消し元に戻します" Application.Undo
End If
Application.EnableEvents = True End Sub
「標準モジュール」
Function 入力候補表示(Sh As String, Rg As String, Tg As Range) As Boolean
Dim c As Range Dim v() As String Dim k As Long
If Len(Tg.Value) = 0 Then 'クリア Tg.Validation.Delete 入力候補表示 = True 'OK Exit Function End If
With Sheets(Sh) With .Range(Rg & "1", .Range(Rg & .Rows.Count).End(xlUp)) ReDim v(1 To .Count) For Each c In .Cells If c.Value Like Tg.Value & "*" Then k = k + 1 v(k) = c.Value End If Next End With End With
If k = 0 Then Exit Function 'NG
If k = 1 Then Tg.Validation.Delete Tg.Value = v(1) Else '入力規則のセット With Tg.Validation '入力規則を設定 .Delete .Add Type:=xlValidateList, Formula1:=Join(v, ",")←この行が黄色なっています .ShowError = False .InCellDropdown = True End With Tg.Select SendKeys "%{DOWN}" End If
入力候補表示 = True 'OK
End Function
============
マクロの初心者なので、どこを修正すればエラーが出なくなるのでしょうか?
教えてください。
Excel2010/ WindowsXP
参考ページ。 http://www.officepro.jp/excelvba/sheet_ope/index2.html 定数 UserInterfaceOnly をご覧くだされ。 (ROUGE)
UserInterfaceOnlyを入れてみましたが、やはりエラーが同じエラーが出てしまいます。
シート保護設定をかけると、入力規則設定のVBAは使えないんでしょうか?
(でめたん)
>シート保護設定をかけると、入力規則設定のVBAは使えないんでしょうか?
残念ながら入力規則の設定は(削除はOKだったと記憶)UserInterfaceOnly:=True の保護下では 処理不可能みたいね。 これが必要なら、
シート保護解除 必要処理 シート保護
こうせざるをえないねぇ。
(ぶらっと)
ぶらっと さん
>残念ながら入力規則の設定は(削除はOKだったと記憶)UserInterfaceOnly:=True の保護下では >処理不可能みたいね。
やはりできないんですね。
>シート保護解除 >必要処理 >シート保護
のVBAを追加して、エラーが出ずに可能になりました。
ありがとうございました!
(でめたん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.