カテゴリー別アーカイブ: VBA

[VBA]CreateObjectが失敗する時の対処方法

VBAにてCreateObjectが失敗する時について。

例えば、XXXXX.APIをCreateObject()で読み込んでいるところで「ActiveXコンポーネントを作成できません」と出た場合に何が考えられるか?

イベントログにもエラーがでず困り果てることがあるが、そもそも外部オブジェクト(外部プログラム)が使える状態にあるか疑うべきである。

WEBマニュアルを見てみよう。

エラー番号"429" ProgId が見つかりません。または指定されていません。
またはServerName が DnsValidateName 関数に失敗する場合の原因のほとんどは、63 文字より長いか、無効な文字が含まれているためです。

これで何のことがわかれば幸いだが、ほとんどの人は意味不明になるだろうが、ようは文字列が長すぎることはまずない。
だから、まずファイルを見つけられていないと考えてもよいだろう。

CreateObjectの参照で読み込める外部オブジェクトは、以下のコマンドをコマンドプロンプトに打ち込み実行することで登録状態をリスト表示して確かめることができる。

reg query HKEY_LOCAL_MACHINE\Software\Classes\

たぶん、たくさん出てきて見つからない。
その場合はfindstrを使用して見つけ出そう。
ここでは.APIの拡張子で終わる外部オブジェクトをさがすため、
以下のコマンドをコマンドプロンプトで実行する。

reg query HKEY_LOCAL_MACHINE\Software\Classes\ | findstr \.API | more

これで目的の外部オブジェクトが表示されない場合は、何らかの原因でレジストリに目的の外部オブジェクトが紐づけられていない。

アプリケーションを再インストールするなどして追加されるようにすること。

VBAでセル内の改行を無くしたい時のマクロ

以下は特定列のデータの改行を取り除くコードです。

テストという名称のマクロ(サブルーチン)を生成して実行すればOK

全体やシートに適用したい場合や環境(OS)が異なる場合は、
一工夫しなければなりませんが、基本的にこれで行けるのではないか?

Sub test()
Dim i As Integer
Dim s As String

For i = 1 To 200
s = Range("L" & i).Text
s = Replace(s, vbLf, vbCrLf)
Range("L" & i).Value = Replace(s, vbCrLf, "")
Next
End Sub