この問題は、MS Office / AccessまたはWindows10の最近の更新の結果であると思います。このコードを実行すると、次のようになります。
Dim s As String
With CreateObject("Scriptlet.TypeLib")
s = Left(.Guid, 9)
newguidx = Right(s, 8)
End With
エラーが発生します:Withステートメントでアクセスが拒否されました。これは、管理者がシステムを更新した後にのみ切り取られた新しいものです。更新をロールバックするオプションがありません。誰かがこれに出くわし、回避策がありますか?
OS:Windows 7 Enterprise Accessバージョン:2010
ありがとう
この問題は、7月のセキュリティ更新時点での仕様によるものです。このコントロールは、悪意のあるコードがOfficeアプリケーションで実行されるのを防ぐためのセキュリティ対策としてブロックされています。推奨される方法でナレッジベースの記事を公開するよう取り組んでいます。そのKBの準備ができるまで、ここにコンテンツを投稿します。
回避策推奨される方法は、代わりにWindows API CoCreateGuid(https://msdn.microsoft.com/en-us/library/windows/desktop/ms688568(v = vs.85).aspx )を使用するようにコードを変更することです。
CreateObject("Scriptlet.TypeLib").Guid
' No VT_GUID available so must declare type GUID
Private Type GUID_TYPE
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type
Private Declare PtrSafe Function CoCreateGuid Lib "ole32.dll" (Guid As GUID_TYPE) As LongPtr
Private Declare PtrSafe Function StringFromGUID2 Lib "ole32.dll" (Guid As GUID_TYPE, ByVal lpStrGuid As LongPtr, ByVal cbMax As Long) As LongPtr
Function CreateGuidString()
Dim guid As GUID_TYPE
Dim strGuid As String
Dim retValue As LongPtr
Const guidLength As Long = 39 'registry GUID format with null terminator {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
retValue = CoCreateGuid(guid)
If retValue = 0 Then
strGuid = String$(guidLength, vbNullChar)
retValue = StringFromGUID2(guid, StrPtr(strGuid), guidLength)
If retValue = guidLength Then
' valid GUID as a string
CreateGuidString = strGuid
End If
End if
End Function
別の回避策
これにより使用できるようになりますが
CreateObject("Scriptlet.TypeLib")
、Office 2017年7月のセキュリティ更新プログラムによって追加されたセキュリティ保護が弱まります。Scriptlet.TypeLib
Officeアプリケーション内でインスタンス化できるようにするレジストリキーを設定できます。このレジストリキーが設定されている場合、OfficeはこのCOMコントロールの使用をブロックしません。
- レジストリエディタを開きます。
- 次の場所に移動します:Computer \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Office \ 16.0 \ Common \ COM Compliance {06290BD5-48AA-11D2-8432-006008C3FBFC}
- 注:インストールされているOfficeのバージョンに基づいて、HKEY_LOCAL_MACHINEの下の正しい場所を見つけるために、レジストリを検索する必要がある場合があります。
- ActivationFilterOverrideを追加します
- DWORDを設定:1
詳細な手順:
- [スタート]、[ファイル名を指定して実行]の順にクリックし、[名前]ボックスにregeditと入力して、[OK]をクリックします。レジストリで次のキーを見つけてクリックします:HKEY_LOCAL_MACHINE
- [編集]メニューの[検索]をポイントし、[検索対象:]テキストボックスに次のように入力します。COMの互換性
- キーが選択され、値とデータが選択解除されていることを確認します。次に、[文字列全体にのみ一致]を選択し、[次を検索]をクリックして、次のキーをクリックします。{06290BD5-48AA-11D2-8432-006008C3FBFC}注:キーが存在しない場合は、追加する必要があります。[編集]メニューの[新規]をポイントし、[キー]をクリックします。{06290BD5-48AA-11D2-8432-006008C3FBFC}と入力します
- [編集]メニューの[新規]をポイントし、[DWORD(32ビット)値]をクリックします。
- DWORDの名前としてActivationFilterOverrideと入力し、Enterキーを押します。
- ActivationFilterOverrideを右クリックし、[変更]をクリックします。
- [値のデータ]ボックスに1と入力してレジストリエントリを有効にし、[OK]をクリックします。
- ActivationFilterOverride設定を無効にし、0(ゼロ)を入力して、[OK]をクリックすることに注意してください。
- レジストリエディタを終了し、開いているOfficeアプリケーションを再起動します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加