2014/08/31

Excel2013をオートメーションで使う場合、色々と注意してください

 いや、やられっぱなしですExcel2013!!
 当方が関わっているもので、Excel2013をVB6からオートメーションで使用するものがあるのですが、どうもいろんな支障が出てきています。
 特にわからなかったものが、ワークブックを2枚開き(ワークブックAとワークブックBとします)、ワークブックAからワークブックBに様式となるシートをコピーし、編集後にワークブックB上にあるコピーしたシートを削除するというもの。
 Excel2013のオートメーションオブジェクトを表示状態(オブジェクト.Visible = True  オブジェクト.ScreenUpdating = True)にして動作させた場合には正常に動作するのですが、非表示モード(前述のプロパティをfalse)の場合、1004ランタイムエラーが発生する始末。

 ネット検索をすると、なんとMSのページに不具合と解決策が出ているではないですか!!

Excel 2013 をオートメーションで実行し、異なるウィンドウのシートをコピー後にブックのシートを削除すると、エラーが発生する

 これで解決と言いたいところですが、当方の環境では、ワークブックBを.Activateしても正常に動作しませんでした。

 おそらくイベントの目詰まりや、スレッドの処理など色々と関係していることがあるように思われます。
 当方は、オートメーションを諦め、Excel 側で処理するマクロにすることで対処しました。

 皆さん、Excel2013をオートメーションで使うつもりの方は、参考にしていただけると幸いです。


2014/08/23

Windows9 9月末にプレビューダウンロード可能に?

 いよいよなのでしょうか? 以前より7月〜8月と言われていたので約1ヶ月遅れになりますが、今度こそ本当でしょうか?


 TechCrunch記事(日本語)

 Windows9はデスクトップを再度重要視した構成となるらしいので、Windows7以降初めての注目株と言ったところでしょうか?
 ともはやMSの新製品には影響を受ける筆者としては複雑な心境です。
それではまた投稿します。
2014/08/21

インストーラの作成

 少々凝ったインストーラの作成が必要となったので、色々と話を聞いているhttp://wixtoolset.org/を調べ始めました。
 以前はxmlを手書き一発という男らしいツールでしたが、wixとwxieditを使ったインストーラ作成でも紹介されているとおり簡単な作成画面が使えるようになったようです。
 これは嬉しいですね。
 作りたいインストーラは、他社製のMSIも同梱したいわゆるネストインストールを使用するものですが、なんとwixではできないとのこと。
&nbps;しかし、インストーラの中から外部プログラムが起動できるので、その中でmsiを実行してしまえば良いのでは?ということで、近々やってみようと思います。
 いろいろわかったことをアップしますので好ご期待。
2014/08/10

Windows9 のその後

 ZDNetのWindows 'Threshold': More on Microsoft's plan to win over Windows 7 users記事によると、Windows9はDesktopを重視したものと、タブレット版とが別れるように書かれています。
 さらに、以下の記事があり、Win32系のレガシーアプリも動作するように思われます。
翻訳
 Win32ないしレガシー・アプリが作動するデスクトップ、ノート版のThresholdのあるSKU(バージョン)ではWindows DesktopがデフォールトのUIとなる。Lenovo YogaやSurface Proのようなタブレット機能も備えた機種の場合、キーボードが接続されない場合はMetroモード、接続された場合は従来のWindowsモードとなる。
原文
 Users running Threshold on a desktop/laptop will get a SKU, or version, that puts the Windows Desktop (for running Win32/legacy apps) front and center. Two-in-one devices, like the Lenovo Yoga or Surface Pro, will support switching between the Metro-Style mode and the Windowed mode, based on whether or not keyboards are connected or disconnected.


 まあ、Win32系のレガシーアプリの動作環境がなくなってしまうと、Windowsの地位はかなり揺らぐと思われ、現実的な選択だと思います。
 やっぱりかぁと思うところですが、今後の動向に注意を払っておきます。

2014/08/09

Excel VBAの作法コピペ素材

少々ExcelVBAを使うことがありましたので、備忘録として記載しておきます。

自分自身のブック

ThisWorkbook.Sheets("シート名").Range("アドレス(A1など)")
ThisWorkbook.Sheets("シート名").Cells(行番号,列番号)


セルの指定

Workbooks("エクセルファイル名(フォルダ名は含まない)")_ 
  .Sheets("シート名").Range("アドレス(A1など)")
Workbooks("エクセルファイル名(フォルダ名は含まない)")_
  .Sheets("シート名").Cells(行番号,列番号)
複数プロパティーの指定
With Workbooks("エクセルファイル名(フォルダは含まれない)")_ 
 .Sheets("シート名").Range("アドレス(A1など)")
   .Value = "12000"
   .Formula = "#,##0"
End With
エクセルファイル名にはフォルダ名は含まない。拡張子は必ずつけたほうが良い。(拡張子を省略した場合、エクスプローラの「登録済の拡張子は表示しない」とした場合で動作が異なる場合あり?)

複数シートの選択

Workbooks("エクセルファイル名(フォルダ名は含まない)")_ 
    .Sheets(Array("シート1","シート2")).Select 
シート3,シート4と続く場合は、Arrayの中に追加する。

複数シートの選択解除

Workbooks("エクセルファイル名(フォルダ名は含まない)")_ 
    .Sheets(1).Select 
一番フロントのシートを選択状態にしたほうが良いかもしれません。

選択中のシートを調べる

選択中のシート数を調べる。
Windows(Workbooks("エクセルファイル名(フォルダ名は含まない)").Name)_
     .SelectedSheets.Count
選択中のシート名を一覧する。
For Each sh In Windows( _
  Workbooks("エクセルファイル名(フォルダ名は含まない)").Name).SelectedSheets 
   MsgBox sh.Name
Next


シートの順序入れ替え

With Workbooks("エクセルファイル名(フォルダ名は含まない)")
      .Sheets("移動対象シート").Move Before:= .Sheets("シート")
End With
移動対象シートをシート名の前に移動する。後ろに移動する場合はBeforeの箇所にAfterを指定する。

異なるワークブックからシートをコピー

With Workbooks("エクセルファイル名(フォルダ名は含まない)")
   .Sheets("コピー対象シート").Copy Before:= _ 
  Workbooks("コピー先エクセルファイル名(フォルダ名は含まない)").Sheets("コピー先シート")
End With
コピー先シートの前にコピー対象シートをコピーする。後ろにコピーする場合、Beforeの箇所にAfterを指定する。

セルコピー

With Workbooks("エクセルファイル名(フォルダ名は含まない)")
  .Sheets("コピー元シート").Range("セル範囲(A1:A2など)").Copy _ 
    .Sheets("コピー先シート").Range("セル範囲(B1:B2など)")
End With
Copyメソッドは必ずクリップボードが使われます。 MS Excel VBA Range.Copyリファレンスには、コピー先を省略した場合、クリップボードにコピーされますとありますが、コピー先を指定してもクリップボードが使われます。注意してください。

描画停止/再開

停止
Application.Screenupdateing = False
再開
Application.Screenupdateing = True


計算停止/再開

停止
Application.calculation = xlManual
再開
Application.calculation = xlAuto


プリンタとの通信を停止/再開

停止
Application.PrintCommunication = False
再開
Application.PrintCommunication = True
停止するとPageSetupの高速化が図れる。ただし、当該プロパティはExcel2010より前のバージョンには存在しないので注意。

プロパティーの存在チェック

少々雑なコードですが...PrintCommunicationがあるかどうか調べています。
  If hashasPrintCommunication(Application) Then
   MsgBox "PrintCommunicationあります"
Else
   MsgBox "PrintCommunicationありません"
End If
Function hasPrintCommunication(o As Object) As Boolean
   On Error Goto hasPrintCommunication_error:
   Dim s As Boolean
   s = o.PrintCommunication
   hasPrintCommunication = True
hasPrintCommunication_exit:
   Exit Function
hasPrintCommunication_error:
   Resume hasPrintCommunication
End Function
プロパティの存在チェックを調べたところ、TypeLib Informationを使って調べる方法があるようです。こちらは今後使ってみます。

VBEの起動

ALT+F11キーで、VBEが起動します。

2014/08/08

Office 2003 2007 2010の完全アンインストール方法

あわせて読みたい。
Office2010ボリュームライセンスでハマりました
Office2013が出たばかりですが、次期バージョンが早々に出るようです
MSSより2015/5/4にOffice2016Public Previewが公開された模様。

 この記事非常によく読まれています。
 困っている方、以下に対策が書かれています。皆さん改善を実感されているようなので、対処してみてください。

本当にこまった Office2010評価版をインストールしてしまったばっかりに

 本当に困りました。事の発端は 以前Office2007インストール済の環境に、Office2010評価版を試しにインストールしたことです。
 評価版は期限が切れると使えなくなるので、まあOffice2007に戻せばいいやと思っていたのですが、なんとOffice2010評価版は、コントロールパネルから削除してもスタートメニューに残ったままになりました。

なぜか2010のインストーラがゾンビのように...

 その状態でもExcelはExcel2007がデフォルト起動するようになったのですが、WordについてはWord2010が起動しようとしてインストーラが走りだし、途中で異常になってしまう始末。
 Wordは困ったものなのですが、エクスプローラからWordファイルをダブルクリックするのではなく、スタートメニューからWord2007を選択して起動すれば正常に動作するので、我慢しながら使っていたいのですが、少々仕事でWindowsScriptingHostからのExcel操作が必要となり、ややこしくなった環境に、Office2000を入れてしまったことで収集つかなくなってしまいました。
 なんと今まで正常に動作しているExcel2007を起動するとインストーラが走る始末。
 しばらく待てば操作可能となるのですが、WindowsScriptingHostからプログラムで操作したいのに、その都度インストーラが作動するなんて仕事になりません。

解決策はMSのサイトにありました

 ということで、ネットを散策するとOffice系をアンインストール後にインストールすれば正常になるとの話を見つけたため、初心に戻ってコントロールパネルより削除し、再インストールをしましたが状況改善せず、仕方なく別環境を準備して間に合わせていました。

 しかし、ダメになってしまった環境というのは少々気になるもの、職場の面々に確認したところ、MSよりアンインストールツールが提供されている情報を得ました。

 調べてみるとあるものです、
 このサイトから Fixit からダウンロードできるインストーラを使えば完全アンインストール出来ました。
 使い方は、まずははじめにコントロールパネルから通常どおりOfficeをアンインストールします。その後、一番古いOffice製品に対応する Fixitを順次実行していく手順になります。
 筆者は 2000,2007,2010評価版(アンインストールしているのですが残留)を対象に作業しましたところ、約40分ぐらいでアンインストールが完了しました。
 この状態で、スタートメニューを観ますと、あれだけ残留していたOffice2010のメニューが消え、感動です。
 再度、2000,2007とインストールし、無事完全な環境を整備することが出来ました。
 同様の症状に困っている方は参考にしてみてください。

 この記事、根強く人気があるようです。皆さんOfficeには手痛くやられているのですね。
 何かのお役に立てると嬉しいです。


値頃感が好きなあなたに。
SIMフリースマホとMVNOが2000円チョットで持てます
白ロムスマホとMVNOで1710円/月額 使い放題 Wifi付きの構成発見!!
SIMフリースマホとMVNOで1821円/月額 使い放題 Wifi>付きの構成発見!!
大満足 月額480円スマホ完成 MVNO WirelessgateLTE+WiFi
2014/08/02

Windows9来年出荷らしい影響は?

 この記事が最近閲覧されていることに驚いています。
 続きは次に記載しておりますので、そちらを参照ください。

Windows10 インストールしてみました 今回もVB6.0動くようです

 Windows9ですが、なんだか32bitデスクトップアプリが使えなくなるとか、いろんな噂が飛び交っています。
 ところでみなさん!! VB6.0のシステムって業務で使ってたりしませんか?
 噂ではVB6.0のシステムが動かなくなるらしいのです。
 業務で使っているものは技術的に良いかどうかは別として、維持するには高額なリプレース費用を請求される可能性も含んでいるので、ヒヤヒヤです。
 ともはや、8〜9月にはRCが出るようなので、目を皿のようにして調べあげようと思います。
リリースの時期は2015年の4月 ■32bitのデスクトップアプリはサポートされない
 あと、巷ではベータ版のダウンロードサイトがいろいろあるようですが、まともに提供しているところはないようです。
 情報が分かり次第アップします。