honjarake blog

自分用にテキトーにまとめる

自分用 Microsoft Office C2R版のバージョン戻し

一番参考になったサイト:
prau-pc.jp

cd %programfiles%\Common Files\Microsoft Shared\ClickToRun
OfficeC2RClient.exe /update user updatetoversion=16.0.xxxx.yyyy

上記をバッチファイルとしてサーバーに保存し、ショートカットで各PCに貼り付け
プロパティの詳細設定で管理者として実行とでもしておくと少し楽かと思った。

今回、自作の「管理者権限で実行するexe」を間に挟んだら普通に管理者権限で起動するつもり。
ADならグループポリシー使えばもっと楽なのだろうか。


あとは、バージョン戻した後に、問題のあったバージョンに勝手に更新されないよう
修正版がくるまでOfficeの更新は切っておくこと。

Outlook で 「今後このメッセージを表示しない」にチェック入れてしまったとき

受信拒否リストではなく、SharePointと連動しているメールボックスサイト メールボックス?通知メール?→「SharePointリスト」)の
メッセージを消すのに1件1件削除確認されるのでチェックしたら、二度と表示されなくなった。
Outlookのオプションからは元に戻せない。

HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Outlook\Options\General
以下にある
PONT_STRING
Value Data 35 を削除してください。

値は「52,」が入っていたので、空にすると確認メッセージ表示されるようになった。
引用元に載っているように、対応する番号とカンマを削れば
再表示したいメッセージだけ戻せるのかもしれない。
→引用元に書いてあるサイト(Web Archive):Outlook "Don't Show Again" dialog settings

自分用 OFFICE2007以降 VBA FileSearchについて

pocket9 ドキュメント支援ツール
機能一覧 | 設計書仕様書テンプレート PocketDOC | 株式会社イーイノベーション
の「PocketDocPropertyChangeTool」を利用しようとしてFileSearchでエラーが出た。
調べてみると、Application.FileSearchの構文がOFFICE2007以降で使えなくなっているとの事。

FileSearchをScripting.FileSystemObjectのFileSearchに入れ替えれば動くようなので
クラス化している下記のサイト
Office2007以降廃止となった「FileSearch」の代替クラスを作る - xixiixiiixivの勉強日記
を見つけてそのまま置き換えてみた。
※上記ソースコードをVBEでクラスモジュールとして貼付し、FileSearchClassという名前で保存。

PocketDocPropertyChangeTool側の記述を変更していく。

<shtMain>
[Private Sub cmdAction_Click]
 ' ファイル検索の開始
'   With Application.FileSearch
    With New FileSearchClass

おまけでBrowseForFolderに初期値表示のフォルダを設定

<shtMain>
[Private Sub cmdAction_Click]
 CreateObject("Shell.Application").BrowseForFolder(0, "フォルダを選択してください", &H1 + &H10, vDefFolder)

上記のvDefFolderの部分の引数はVariant型でないと初期値として反映されず少し詰まった。(ずっとString型で指定していた)

ここまでの修正を実行するとFileSearchClassにFileTypeのプロパティがなくてエラーが発生。

<shtMain>
[Private Sub cmdAction_Click]
.FileType = msoFileTypeAllFiles

消してもいいけど、後で処理を追加してみようと思い、クラスにダミーのFileTypeを追加。

端末毎に参照設定いじるのめんどそうだなと思い
FileSearchClass側の fso関連の変数を全部Objectに変更して
new FileSystemObject してるところを CreateObject("Scripting.FileSystemObject") に置き換えた。
FileTypeはmsoFileTypeが使えればそのまま使うが、下記のようにした。

<FileSearchClass>
Public Enum enumFileType
  msoFileTypeAllFiles = 1
  msoFileTypeBinders = 6
  msoFileTypeCalendarItem = 11
  msoFileTypeContactItem = 12
  msoFileTypeDatabases = 7
  msoFileTypeDataConnectionFiles = 17
  msoFileTypeDesignerFiles = 22
  msoFileTypeDocumentImagingFiles = 20
  msoFileTypeExcelWorkbooks = 4
  msoFileTypeJournalItem = 14
  msoFileTypeMailItem = 10
  msoFileTypeNoteItem = 13
  msoFileTypeOfficeFiles = 2
  msoFileTypeOutlookItems = 9
  msoFileTypePhotoDrawFiles = 16
  msoFileTypePowerPointPresentations = 5
  msoFileTypeProjectFiles = 19
  msoFileTypePublisherFiles = 18
  msoFileTypeTaskItem = 15
  msoFileTypeTemplates = 8
  msoFileTypeVisioFiles = 21
  msoFileTypeWebPages = 23
  msoFileTypeWordDocuments = 3
  msoLastModifiedAnyTime = 7
  msoLastModifiedLastMonth = 5
  msoLastModifiedLastWeek = 3
  msoLastModifiedThisMonth = 6
  msoLastModifiedThisWeek = 4
  msoLastModifiedToday = 2
  msoLastModifiedYesterday = 1
End Enum

FileSearchClass の方に下記を追加

<FileSearchClass>
Public FileType As enumFileType

shtMainも変更

<shtMain>
[Private Sub cmdAction_Click]
' .FileType = msoFileTypeAllFiles     '検索対象ファイルのタイプを設定
  .FileType = enumFileType.msoFileTypeAllFiles

また、ここまでの修正で

<shtMain>
[Private Sub cmdAction_Click]
.FileName = "*.xls;*.doc;"

の複数拡張子指定で、一切一致するファイルを見つけられなかった。
Likeでも書き方次第で判定できそうだが、正規表現でのマッチングに変更した。

FileSerchClassに下記を追加

<FileSearchClass>
'正規表現マッチング
Private Function ExtRegExp(ByVal Target As String, ByVal FileExt As String) As Boolean
  'RegExpオブジェクトの作成
  Dim reg As Object
  Set reg = CreateObject("VBScript.RegExp")
  
  Dim sPtn As String
  
  'パターン作成
  sPtn = Replace(FileExt, " ", "")
  sPtn = Replace(sPtn, "*.", "")
  sPtn = Replace(sPtn, ";", "|")
  sPtn = IIf(sPtn Like "*|", Left(sPtn, Len(sPtn) - 1), sPtn) '末尾条件整理
  sPtn = ".+\.(" & sPtn & ")"                                 '「*.(拡張子1[|拡張子2]...)」に成形
  
  '正規表現の指定
  With reg
      .Pattern = sPtn     'パターンを指定
      .IgnoreCase = True  '大文字と小文字を区別するか(False)、しないか(True)
      .Global = True      '文字列全体を検索するか(True)、しないか(False)
  End With

  ExtRegExp = (reg.Execute(Target).Count > 0)

End Function

Likeで拡張子の判定している箇所をExtRegExpに置換

<FileSearchClass>
[Private Sub runSearch(sArgSearchPath As String)]
' If Not (oFile.Name Like FileName) Then GoTo CONTINUE ' 処理対象外を除外
 If Not ExtRegExp(oFile.Name, FileName) Then GoTo CONTINUE  ' 処理対象外を除外

これで大体動くようになった。

自分用 サーバーイベントログ解決 Perflib 1008

1008 エラー Microsoft-Windows-Perflib Application

サービス "BITS" のエラー

サービス "BITS" (DLL "C:\Windows\System32\bitsperf.dll") の Open プロシージャに失敗しました。このサービスのパフォーマンス データは利用できません。データ セクションの最初の 4 バイト (DWORD) に、エラー コードが含まれています。

qiita.com

サービス"RemoteAccess" のエラー

サービス "RemoteAccess" (DLL "C:\Windows\System32\rasctrs.dll") の Open プロシージャに失敗しました。このサービスのパフォーマンス データは利用できません。データ セクションの最初の 4 バイト (DWORD) に、エラー コードが含まれています。

あるIT技術者の障害(じゃなくて生涯)対応 : 今日のトピック
少し古い?
訂正
Remote Access | ソフトウェアブログ
RemoteAccessはrasctrs.iniがパフォーマンスカウンタに使用する.iniファイル名
C:\Windows\WinSxS\amd64_microsoft-windows-rasctrs.resources_31bf3856ad364e35_6.3.9600.16384_ja-jp_dfbd247b6f4cfb4bにある模様
引き続き実施する

Windows10 Access 2013以降の環境での円マーク→バックスラッシュ化について

現象の原因がAccessバージョンなのか、OSバージョンなのかハッキリしないがメモ

現象:

WINDOWS10 , ACCESS2013 , ACCESS2016 にて、今まで使用していた額面表示のテキストの「¥」が「\」になる。
(打つのがめんどくさいので、「¥」と「\」はいずれも半角と見なす)

原因:

額面表示用の文字のフォントが「欧文フォント」だったから。
(新環境では)欧文フォントは今までの「¥」のコード(0x5C)に対して「\」が割り振られるようになっている模様。
#この仕様がUnicode本来の仕様らしい

対処:

日本語フォントにすれば従来どおりの「¥」が表示された。
ただし、額面の「0」には斜線が入っていて欲しいので日本語フォントには
IPA情報処理推進機構)のフリーフォントIPAゴシック」を導入した。
#ちなみに「IPAex~フォント」は自分の環境では「0」に斜線が入っていない

結論:

円マークがバックスラッシュになるのは「欧文フォント」が原因。
でも、Windows 7 環境では「¥」がちゃんと出ているのでOSバージョンも関係あるんだろうと思う。
#Windows8は確認していないので知らない

自分用 VectorDirectDLのリンクをファイルの直リンクに差し替えるやつ

変更元は
VectorDirectDL
二重にajaxでGETすることになる事と、テストを一個のページでしかしていない事に注意
重大なミス:複数バージョン存在するときの直リンクに不備有り 要修正

// ==UserScript==
// @name        VectorDirectDL
// @description Vectorのページにダウンロードボタンを追加する
// @version     2.0
// @namespace   phodra
// @include     http://www.vector.co.jp/soft/*
// @exsample    http://www.vector.co.jp/soft/dl/win95/util/se169348.html
// @exsample    http://www.vector.co.jp/soft/dl/winnt/util/se100730.html
// @original    https://greasyfork.org/ja/scripts/7501-vectordirectdl
// ==/UserScript==
/* add //↓ファイル直リンクに入れ替え ~ //↑ファイル直リンクに入れ替え */
(function () {
  // リンクを追加する関数
  var AppendLink = function (page)
  {
    var $page = $(page);
    // 挿入箇所
    $inspos = $('h1');
    // ダウンロードボタンと名前を取得
    $btns = $page.find('a.btn.download');
    $names = $page.find('td>strong.fn');
    if ($names.size() == $btns.size())
    {
      for (i = 0; i < $btns.size(); i++)
      {
        // ダウンローページヘのダイレクトリンクを作成
        var $link = $('<a class=\'downloadlink\'/>');
        $link.text($names.eq(i).text());
        $link.attr('href', $btns.eq(i).attr('href'));
        //↓ファイル直リンクに入れ替え
        $.ajax({
          type: 'GET',
          url: $btns.eq(i).attr('href'),
          success: function (data) {
            var $data = $(data);
            $elm = $data.find('#summary a');
            if ($elm.size() > 0)
            {
              //alert($elm[0]);
              $link.attr('href', $elm[0]);
            }
          }
        });
        //↑ファイル直リンクに入れ替え
        // ソフト名の下に挿入
        $inspos.after($link);
        $inspos.after(' ');
      }
    }
  };
  // ダウンロードタブのエレメント
  var $dltab = $('#v_step>.download');
  if ($dltab.size() > 0)
  {
    // ダウンロードタブページを取得
    $.ajax({
      type: 'GET',
      url: $dltab.attr('href'),
      beforeSend: function (xhr) {
        xhr.overrideMimeType('text/html; charset=Shift_JIS');
      },
      success: function (data) {
        AppendLink(data);
      }
    });
  } 
  else
  {
    // すでにダウンロードタブページの場合
    AppendLink(document);
  }
}) ();

自分用 select option を使った検索ボックス他

greasemonkey 自分用ソースコードまとめ2 - honjarake blog

// ==UserScript==
// @name            test item
// @namespace       http://espion.just-size.jp/archives/05/136155838.html
// @description     code test
// @grant           none
// @include         *
// @exclude         https://apis.google.com/*
// ==/UserScript==
window.load = (function () {
  //----------------------------------------
  //console.log('test item 1 start');
  //----------------------------------------
  if (window != parent) {
    //iframeで埋めこまれた場合の処理
    return;
  }
  var ElemDiv = document.createElement('div');
  //var Docbody = document.body;
  var Docbody = document.getElementsByTagName('body') [0];
  var t_code;
  //===============================================
  var m_div = ElemDiv.cloneNode(true);
  m_div.id = 'm_div';
  Docbody.insertBefore(m_div, Docbody.firstChild);
  t_code = '';
  t_code += '<ul>';
  //t_code += '     <li><label id="lbB">youtube:</label><input type="text" id="tbB"></input><input type="button" id ="bB"></input>';
  t_code += '     <li><label id="lbc">google</label><input type="text" id="tbC"></input><input type="button" id ="bC"></input>';
  t_code += '     <li><select id="sel_s"></select><input type="text" id="tb_sels"></input><input type="button" id="b_sels"></input>';
  t_code += '</ul>';
  //----------------------------------------
  m_div.innerHTML += t_code;
  //----------------------------------------
  var m_list = m_div.getElementsByTagName('li');
  //--------------------------------------------------------------
  var styleTag = document.createElement('style');
  styleTag.type = 'text/css';
  //----------------------------------------
  t_code = '';
  t_code += '#m_div{ position: fixed; z-index: 999; top:300px; width:205px; left:-200px; text-align:left; padding:1px; background: #FFF8DC; font-size:10px;}' + '\n';
  t_code += '#m_div:hover{ position: fixed; z-index: 999; top:300px; left:0px; padding:1px; background: #dedeff; }' + '\n';
  t_code += '#m_div input[type="text"]{ width:100px !important; margin:2px 2px 5px 5px; }' + '\n';
  //----------------------------------------
  var t_node = document.createTextNode(t_code);
  styleTag.appendChild(t_node);
  //----------------------------------------
  var headerTag = document.getElementsByTagName('head') [0];
  if (!headerTag) alert('header is nothing');
  headerTag.appendChild(styleTag);
  //----------------------------------------
  //console.log('test item 1 end');
  //----------------------------------------
  /*
  var bB = document.getElementById('bB');
  bB.value = 'repeat';
  bB.onclick = function () {
    var tbB = document.getElementById('tbB');
    var re = /http.*:\/\/www.youtube.*\/watch/;
    var found = location.href.match(re);
    if (found) {
      tbB.value = location.href.replace('youtube', 'youtuberepeat');
      document.location = tbB.value;
    } else {
      tbB.value = 'not youtube video';
    }
  }
  */
  var bc = document.getElementById('bC');
  bc.value = 'search';
  bc.onclick = function () {
    var tbc = document.getElementById('tbC');
    if (tbc.value != '') {
      window.open('https://www.google.co.jp/search?q=site:' + document.location.hostname + ' ' + tbC.value);
    }
  };
  // 汎用focus-blur -------------------------
  function tbonfocus() {
    var b = document.getElementById('m_div');
    b.style.left = 0;
  };
  function tbonblur() {
    var b = document.getElementById('m_div');
    if (b.style.removeProperty) {
      b.style.removeProperty('left');
    }
    if (b.style.removeAttribute) {
      b.style.removeAttribute('left');
    }
  };
  // ----------------------------------------
  var tbc = document.getElementById('tbC');
  tbc.onfocus = tbonfocus;
  tbc.onblur = tbonblur;
  // select
  // <select id="sel_s"></select>
  // <input type="text" id="tb_sels"></input>
  // <input type="button" id="b_sels"></input>
  var url = {
    monst: 'http://モンスターストライク.gamewith.jp/search/results?query=',
    twitter: 'http://t-proj.com/twitter/?q=',
  };
  var sels = document.getElementById('sel_s');
  var elopt = document.createElement('option');
  for (key in url) {
    //alert(key + ' : ' + url[key]);
    var opt = elopt.cloneNode();
    opt.id = 'sel_' + key;
    opt.innerHTML = key;
    opt.setAttribute('value', key);
    sels.appendChild(opt);
  }
  var bsels = document.getElementById('b_sels');
  var tbsel = document.getElementById('tb_sels');
  bsels.value = '探す';
  bsels.onclick = function () {
    var tbsel = document.getElementById('tb_sels');
    if (tbsel.value != '') {
      var strSelect = sels.options[sels.selectedIndex].text;
      //alert(url[strSelect]);
      window.open(url[strSelect] + tbsel.value);
    }
  };
  tbsel.onfocus = tbonfocus;
  tbsel.onblur = tbonblur;
  sels.onfocus = tbonfocus;
  sels.onblur = tbonblur;
  if (document.addEventListener) {
    // キーボードを押したときに実行されるイベント
    document.addEventListener('keydown', function (e) {
      var keyID = (e.keyCode)? e.keyCode: e.charCode;
      if (document.activeElement.id == 'tb_sels') {
        if (keyID == 13) {
          bsels.onclick();
        }
      }
    });
  }
  // ----------------------------------------

}) ();