Excel

2023年1月 1日 (日)

Officeのライセンス認証が外れた

macOSをCatalinaからVenturaに上げたせいなのか、Microsoft Office Home & Business 2019のライセンス認証が外れてしまっていた。OSのアップグレード前までは問題なく使えていたのだが。バージョンも気づいたら2021になっていて、Excelの更新日は2022/12/10だった模様。Officeが最新版に更新されたせいなのか、昨年末にOSをアップグレードしたせいなのか・・・。そういえば昨日Onyxでキャッシュ類(アプリケーションキャッシュなど)を削除したけど、そのせいか? タイミングとしてはOnyxだな orz

Microsoftアカウントにサインインし直してライセンスを認証させて復活。

| | コメント (0)

2021年11月 1日 (月)

FormsとSharePointとExcel VBA

Microsoft Formsで作ったフォームを、Teamsのグループに移動することができる。グループのフォームにすると機能は増えるのだが、個人用フォームとは色々扱いが異なるので、そのメモ。

個人用としてのフォームでは、管理画面の応答タブの「Excelで開く」から応答の全てをExcelのファイルとしてダウンロードできる。しかし、グループのフォームでは「Excelで開く」で開かれるのはSharePoint上に作成されたファイルになる。

SharePoint上のExcelファイルに応答を自動で反映させることができるので、この機能を使ってフォームの回答状況をチェックするマクロを作ってみた。SharePoint上のExcelファイルをExcelで開き、内容を読み取るというもの。

SharePoint上に応答とリンクしたExcelファイルを作成して開き(ブラウザ内で開かれる)、共有ボタンで共有のためのURLを取得する。https://なんとかかんとか という普通のURLとなるが、グループ名やフォーム名が長いとExcelで開くのが難しくなる。パスが短ければWorkbooks.Openメソッドや Hyperlinks(1).Followメソッドで開くことができるが、長い場合はShellステートメントを使ってWindowsに開かせないといけない。取得したURLをExcelで開くようにShellステートメントに書くのがミソ。実行前にExcelのオプション→詳細設定でリンクの処理の「Officeファイルへのサポート対象ハイパーリンクをOfficeデスクトップアプリで開く」にチェックを入れておく。

で、以下のような文を実行するとExcelでSharePoint上のファイルを開くことができる。

Shell Excel.exeのフルパス SharePoint上のExcelファイルのURL

ここで、SharePoint上のExcelファイルのURLは共有ボタンで取得した文字列すべてを使う。

ShellステートメントでWindowsにSharePoint上のファイル開かせる場合、自分の環境では数秒時間がかかる。Workbooks.OpenやHyperlinks(1).Followで開く場合は、ファイルが開かれるまで処理が次に進まないが、ShellではWindowsにコマンドを発行したらファイルが開かれていなくても次に処理が進んでしまう。これではまともに動かないので、ファイルが開かれるまでVBAに待たせる必要がある。

そこで、Excelで開かれているブックの数が一つ増えるまで待つことにした。ただVBAでループを回しているだけだとWindowsに制御が返らず、ファイルが開かれないのでDoEventsでOSに制御を戻すようにする。

Dim NextWbCount as Long, CharDQ as String, ResponseFile as Workbook
CharDQ = Chr$(34)
NextWbCount = Workbooks.count + 1
' HLStrは共有ボタンで取得したURL
Shell CharDQ + Application.Path + "¥Excel.exe" + CharDQ + " " + CharDQ + HLStr + CharDQ
' Shellステートメントで開いたファイルが開くまで待つ
Do
    DoEvents
Loop Until Workbooks.count = NextWbCount

これでファイルは開かれるのだが、それで安心してはいけない。開いたファイルの内容が少し遅れて転送されてくるので、ファイルを開いたからといってVBAで即処理を始めると、空のファイルに対して処理をすることになってしまう。A列は応答に対する連番であり、A1セルは"ID"という文字列になるので、とりあえずA1セルが空欄でなくなるまで待つことにしてみる。このときもDoEventsでOSに制御を戻さないと、いつまで経っても内容が転送されてこないことになる。

Set ResponseFile = Workbooks(Workbooks.count)
With ResponseFile.Worksheets(1)
' 更新が反映されるまで待つ
Do
    DoEvents
Loop While .Cells(1, 1).Value = ""

条件判定は、Loop While IsEmpty(.Cells(1, 1)) でもいいかもしれない。

| | コメント (0)

64 bit版ExcelでVBAマクロを走らせたら

もともと32 bit版Excelで作ったVBAマクロを64 bit版Excelで実行したら、Declare文でDLL内の関数を呼び出しているところでエラーとなった。

表示されたメッセージはPtrSafeをどうとか書いてあるので、検索して調べてみた。DLLの関数の呼出しに引数としてLongなどを与えてある場合はLongPtrへ型を変えた上でDeclare PtrSafeと書く必要があるとのこと。幸い(?)自分が作ったマクロの引数はStringだけなので、PtrSafeを加えるだけで問題なく動いた。

指定したネットワーク上のフォルダでファイルダイアログを開くために、カレントディレクトリをUNCパスで指定するためにDLLの中の関数を呼び出しているのだが、方法を変えたほうが良さそうだ。

今まではApplication.GetOpenFilenameでファイルを選んでいた。これからはFileDialogオブジェクトを使ってみよう。

| | コメント (0)

2021年5月23日 (日)

Excelのリボンに「アドイン」が表示されなくなった

Excelの自作VBAアドインではメニューを表示するようにしている。これは通常は「開発」と「ヘルプ」の間に表示されるが、いつの間にか「アドイン」メニューが表示されなくなっていた。

Excelを終了し、次の設定ファイルを捨ててExcelを起動して表示されるようになった。このファイルを捨てるとクイックアクセスツールバーとリボンの項目が初期化される。

C:¥Users¥自分のアカウント¥AppData¥Local¥Microsoft¥Office¥Excel.officeUI

| | コメント (0)

2020年6月20日 (土)

Excel 365 2002 12527.20612でのアドインの挙動

Excel 365 2002 12527.20442では、他のxlamアドインを参照しているxlamアドインファイルを開くことができなくなっていたのだが、Excelのバージョンが2002 12527.20612に上がったら、20442より前の挙動に戻った。おそらく20442のバグだったのだろう。

今の所、他のxlamアドインを参照しているxlamアドインを読み込む場合、参照先のxlamはアドインマネージャで読み込む設定にしていなくてもその中にある関数を使用できる。

| | コメント (0)

2020年5月30日 (土)

Excel 365 2002 ビルド12527.20442 参照設定しているアドインを読み込めない

前回、Excelのアドインの挙動が変わったと書いたが、大きな問題があることがわかった。


曾の問題だが、他のVBAの.xlamファイルを参照設定しているVBAアドインが読み込めないことに気づいた。そのファイルはすでに開かれているのでアクセスできない、というエラーメッセージが出る。


幸いもう少し古いビルドのExcelが入っているPCがあるので、そちらで問題のアドインの参照設定を解除し、参照していた諸々の関数が入っているモジュールをコピーして保存。応急処置でアドインは使えるようになったけど、モジュールごとコピーしてしまったのでワークシートから使うつもりでPublicにした関数が複数見えてしまう。


12527.20442に更新した他のPCでも同じ様に読み込めなかったので、多分このバージョンのバグだと思うんだけど・・・

| | コメント (0)

2020年5月23日 (土)

Excel 365 2002 ビルド12527.20442

Excel 365の話

12527.20278からビルド番号が上がったら、アドインの挙動が変わった。


20278まで
参照設定で参照しされたアドインの中にある関数を、そのアドイン自身をアドインマネージャーで読み込まなくても参照しているアドインが読み込んであれば、ワークシートから使うことができた。
アドインマネージャーで参照先のアドインも読み込む設定にすると、アドインはすでに開かれているというようなエラーになった記憶がある。


20442
20278までと同じ設定ではワークシートから関数を使うことができない。参照先のアドインもアドインマネージャーで読み込む必要がある(もちろん読み込み時にエラーとはならない)。
たしか、1年か2年ぐらい前までもこちらのパターンの動作だった。あるビルド番号から20278のような動作になってしまっていた。

元に戻ったということなのかな。ここしばらくの挙動はバグだったのかも?

| | コメント (0)

2019年10月12日 (土)

最近よくあること

職場のPCはWindows 10 Professional 1809なのだが、自分のものも含めて何台かのPCで次のような症状に遭遇することがたまにある。いずれもWindows Updateなど負荷の高いものが動いているという状況ではない。

  • PC立ちあげ後、サインイン後に表示が黒地にマウスポインタだけの表示。ポインタの操作はできる。→Ctrl+Alt+Delからサインアウトし、もう一度サインインしても同様。→Ctrl+Alt+Delからサインアウトし、再起動したら正常にサインインできた
  • サインアウトに数分間(5分以上)かかる。サインアウトを妨げているアプリケーションがあるという表示は出ない。これはPC立ち上げ後にサインインして、ネットワークをちゃんと認識していないのでサインイン後にあまり間を置かずにサインアウトしたためかもしれないが、別のPCでは同じような時間間隔でサインアウトしても問題ないので、そのPCの問題か、たまたまだったのか。
  • Office 365のバージョンが1902から1908に更新後、Excelでセル内の文字の削除に異常に時間がかかる。そのままExcelが落ちることもある。

どれも問題の原因を突き止められない。

| | コメント (0)

2019年10月 5日 (土)

Excel起動時の「現在このブックは他のブックから参照されているため、閉じることはできません」

Excelの起動時に「現在このブックは他のブックから参照されているため、閉じることはできません」というメッセージが出るようになった。先日Office 365のバージョンが1902から1908に上がったのだが、そのタイミングに一致しているような気がする。

よくある対策である
C:¥Users¥自分のアカウント¥AppData¥Roaming¥Microsoft¥Excel¥Excel15.xlb
を削除したが、状況は変わらず。

Excelには自作VBAマクロをアドインとして登録してあり、あるアドインが別のアドイン内の関数を使うために参照設定で呼び出すようになっている。今までも、アドインマネージャーへの登録順によってはこのようなメッセージは出ていたので、アドインを疑うことにした。

アドインを登録解除して登録し直したり、アドインファイルをオリジナルと入れ替えてもやはり状況は変わらず。

今までは参照されるアドインもアドインマネージャーでチェックを入れて登録してあったのだが、今回は参照先アドインをアドインマネージャーで登録しないで起動してみた。するとメッセージは出なくなり、アドインメニューには登録していない参照先のアドインのメニューも表示されて使える状況になっていた。別のPCのOffice 365 1902のExcelでも参照先アドインをマネージャーでチェックを入れなくても使えるのを確認した。ひょっとして、最初からこういう仕様だったのだろうか?

| | コメント (2)

2019年3月 2日 (土)

Office 365のExcel書類のアイコンが白紙に

Office 365のExcel書類のアイコンが白紙になっていた。白紙アイコンをダブルクリックしても開くソフトの選択パネルが出るだけ。普段自分が使っているPCではないので、原因や経緯は不明。
Officeのインストールフォルダを見ると、Excel.exeはちゃんとある。このExcel.exeをダブルクリックすると、Excelのスプラッシュスクリーンは表示されるが、表示されたまま起動してこない。
一旦Windowsからサインアウトし、数時間後にサインインすると、ExcelとPowerPointは起動するようになっていた。Wordはスプラッシュスクリーンが表示された後に黙って落ちてしまう。
コントロールパネルのプログラムと機能からOffice 365の変更→修復を実行。修復後はWordも開けるようになった。

| | コメント (0) | トラックバック (0)

より以前の記事一覧