ちくのう症(蓄膿症)は「菌」が原因!?

VBAによる参照設定について教えてください。
以前にOffice2010と2003の互換性の問題について教えていただいた際に、以下のようなやり方を教えていただき、AccessのVBAでExcelの参照設定はできたのですが、ExcelのVBAでAccessの参照設定をしようとした際に「Dim Ref As Reference」の部分が「ユーザー定義型は定義されていません」となってしまいコンパイルできません。Accessの参照設定にチェックを入れると問題ないので、Excelに「Reference」というデータ型が使えないのだと思うのですが、Excelではどのように書いたらよいのでしょうか?

On Error GoTo Err_Rise

Dim Ref As Reference

Const strGUID As String = "{00020813-0000-0000-C000-000000000046}" 'Excelの参照設定をする場合
Const strGUID As String = "{4AFFC9A0-5F99-101B-AF4E-00AA003F0F07}" 'Accessの参照設定をする場合

Set Ref = References.AddFromGuid(strGUID, 1, 3)
Set Ref = Nothing

Err_Rise:
If Err.Number = 32813 Then
Resume Next
End If
On Error GoTo 0

このQ&Aに関連する最新のQ&A

A 回答 (2件)

すこしだけ判ったっぽいかも。



テスト条件
Excel2010

参照設定
Visual Basic for Applications
MIcrosoft Excel 14.0 Object Library
OLE Automation
Microsoft Visual Basic for Applications Extensibirity 5.3
Microsoft Office 14.0 Object Library
(Access にはまだ入れていません)

Excelの設定
ファイル→オプション→セキュリティセンター→マクロの設定から
VBA プロジェクト オブジェクト モデルへのアクセスを信頼する
にチェックを入れて置きます。

Sub refList()
  '要参照設定 Microsoft Visual Basic for Application Extensibility x.x
  Dim ref As Reference
  For Each ref In Application.VBE.ActiveVBProject.References
    Debug.Print ref.Name
    Debug.Print ref.GUID
    Debug.Print ref.Major
    Debug.Print ref.Minor
    Debug.Print "--------------"
  Next
  Set ref = Nothing
End Sub
これでイミディエイトウィンドウに設定のリストが出力されます。
Microsoft Access14.0 Object Library に参照設定のチェックを入れて
行うと
Access
{4AFFC9A0-5F99-101B-AF4E-00AA003F0F07}
9
0
が得られますので
Sub refSet()
  Dim ref As Reference
  With Application.VBE.ActiveVBProject.References
  Set ref = .AddFromGuid("{4AFFC9A0-5F99-101B-AF4E-00AA003F0F07}", 9, 0)
  Set ref = Nothing
  End With
End Sub
のような事をするとAccessに参照設定できました。
Reference オブジェクトは、AccessにもありますのでVBE?を指定してあげないと
うまく行かないようです。(ちょっと怪しい解説)

少し思うのは、参照設定をVBAで自動的に行うよりも
参照設定を行っておいて開発し、出来上がったら参照設定を外して
CreateObject("Access.Application") で実行時バインディングにして
細々とした修正を行った方が良いように感じます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ご指摘の通りにしてみたところ、うまくいきました。ありがとうございます。

自分も最初は参照設定を外しても動くように修正していたのですが、作成したファイルや変数が多すぎて途中で挫折してしまいました。
新たに作成するものは参照設定しなくてもいいように作ってみたいと思います。
ありがとうございました。

お礼日時:2012/08/22 11:26

Excelの参照設定に



Microsoft Visual Basic for Application Extensibility x.x

がありますのでチェックを入れてみてください。
x.x はバージョンによって異なります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ご指摘の通りにしてみると、コンパイルエラーはなくなりました。しかし、実行してみると参照設定は追加されていませんでした。
エラーを確認すると、「オブジェクトが必要です」となっていました。
Set Ref = References.AddFromGuid(strGUID, 1, 3)
の部分だと思うのですが、どのようにしたらよいのでしょうか?

お礼日時:2012/08/17 17:19

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAで参照設定を行いたい GUIDを知るには?

オフィス2010なのですが、
VBAで参照設定を行いたいのですが
GUIDというのはどうやって調べればいいのでしょうか?

例えばエクセルに参照設定したいのですが
レジストリエディタを立ち上げて、
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel
のどの部分を見れば、GUIDがわかりますか?

http://www.moug.net/tech/acvba/0010004.html
を参考にvbaコードを作っていますが、


Public Function SetGUID()
On Error GoTo Err_Check:
Dim Ref As Reference

'Microsoft Excel 9.0 Objects Library (Excel2000)
Const strExcel As String = "{00020813-0000-0000-C000-000000000046}"

'参照設定
Set Ref = References.AddFromGuid(strExcel, 1, 3)

Func_Exit:
Set Ref = Nothing
Exit Function

Err_Check:
If Err.Number = 32813 Then
Resume Next
Else
MsgBox "Error Number : " & Err.Number & vbCrLf & Err.Description
GoTo Func_Exit:
End If
End Function

やはりこれだと、参照設定できません。
もちろんオフィスのバージョンが違うからだと思いますが。

あと、AddFromGuidメソッドの引数Major、Minorも、どの値を設定してあげればいいのかわかりません。
ご教授よろしくお願いします。

オフィス2010なのですが、
VBAで参照設定を行いたいのですが
GUIDというのはどうやって調べればいいのでしょうか?

例えばエクセルに参照設定したいのですが
レジストリエディタを立ち上げて、
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel
のどの部分を見れば、GUIDがわかりますか?

http://www.moug.net/tech/acvba/0010004.html
を参考にvbaコードを作っていますが、


Public Function SetGUID()
On Error GoTo Err_Check:
Dim Ref As Reference

'Microsoft Excel 9.0 ...続きを読む

Aベストアンサー

そこまで近づいておきながら・・・。
一番下に、
タイプライブラリのGUIDやバージョンを取得する
http://www.moug.net/tech/acvba/0020002.html
がありますよ。

参照設定を自動的に行う (AddFromFileメソッド)
http://www.moug.net/tech/acvba/0010005.html
も一緒に調べてみたほうが吉。

なお、両方ともAccessを対象としているので
Excelの場合は、
http://oshiete.goo.ne.jp/qa/7648287.html
のようになるのかな?と思います。

QExcelでVBAで自動参照設定

Excel VBAで参照設定をモジュールで行いたいのですが、
何かいい方法はありますか。
宜しくお願い致します。

Aベストアンサー

> Excel VBAで参照設定をモジュールで行いたい

このような需要は、例えば WinXP, Win2000 のように異なる OS が
混在する環境であっても使用するライブラリへの参照設定を有効に
するためかと思いますが...

Excel について言えば、開発 PC 以外でそれを実行しようとしても

 ・参照不可となった時点で、ライブラリに依存したコードは
  コンパイルエラーとなり、実行不可となる

つまり、

 ・参照設定を更新するコードも当然動かない

のですけども、その点については大丈夫ですか?

参照設定を更新するというアプローチではなく、#1 ご回答のように、

 ・CreateObject を使う(レイトバインド)
 ・使用が想定される PC の OS, OFFICE の一番下位バージョンに
  合わせてコードを書く
 ・最初から特殊なライブラリは使わない

といった工夫をした方が確実ですよ。

もし上述の問題が問題とならない、またはクリアされている状況での
ご質問でしたら、パス指定の AddFromFile に加え、AddFromGUID
メソッドも考えてみて下さい。

例えば、システムフォルダなら

 WinXP --> C:\Windows\System32
 Win2K --> C:\WinNT\System32

といった違いがありますから。

> Excel VBAで参照設定をモジュールで行いたい

このような需要は、例えば WinXP, Win2000 のように異なる OS が
混在する環境であっても使用するライブラリへの参照設定を有効に
するためかと思いますが...

Excel について言えば、開発 PC 以外でそれを実行しようとしても

 ・参照不可となった時点で、ライブラリに依存したコードは
  コンパイルエラーとなり、実行不可となる

つまり、

 ・参照設定を更新するコードも当然動かない

のですけども、その点については大丈夫ですか?

参...続きを読む

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

QExcel 12.0とExcel 10.0両方を使うアプリの参照設定方

Excel 12.0とExcel 10.0両方を使うアプリの参照設定方法。。。

 こんにちは,いつも勉強させていただいております.
質問させていただきます.どうぞよろしくお願いいたします.

 開発環境:VB2008+XPになります。
 Excel2003とExcel2007両方に使えるアプリを作成したい次第で
ございますが、ビルド時の参照設定はどのようにすべきでございましょうか??

 現在、2台のPCを交互に使用して作成いたしておりますが、
PC1:Excel2003のみインストール この場合、参照設定に
  Excel 10.0 Object Library が必要
  Excel 12.0 Object Library に対し「システムでは指定された参照が見つかりません」
PC2:Excel2007のみインストール
  Excel 10.0 Object Library に対し「システムでは指定された参照が見つかりません」
  Excel 12.0 Object Library が必要

となりますので、Excel 10.0とExcel 12.0を同時に参照することができませんorz
 PCをチェンジする度に参照設定を変えている次第でございますが、
最終的にExeファイルを作成するときは、Excel2003とExcel2007両方を
インストールしたPCでなければいけないのでございましょうか。。。???

 もしお詳しい方がいらっしゃいましたら,是非ともアドバイスいただきたく
どうぞよろしくお願いいたします。

Excel 12.0とExcel 10.0両方を使うアプリの参照設定方法。。。

 こんにちは,いつも勉強させていただいております.
質問させていただきます.どうぞよろしくお願いいたします.

 開発環境:VB2008+XPになります。
 Excel2003とExcel2007両方に使えるアプリを作成したい次第で
ございますが、ビルド時の参照設定はどのようにすべきでございましょうか??

 現在、2台のPCを交互に使用して作成いたしておりますが、
PC1:Excel2003のみインストール この場合、参照設定に
  Excel 10.0 Obje...続きを読む

Aベストアンサー

まぁ無くはないよ、嫌いだけど。(このとき多分参照設定はどちらもしないと思う。やってみてないけど。)

http://www.bnote.net/vb/reflection.shtml

QVBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義がまずいと思うのですが、それ以上の事は分かりません。どなたか、分かる方がおりましたら、よろしくお願いします。また、プログラムは以下のようになります。

Sub 繰り返し()
'繰り返し
Dim s As Integer
For s = 0 To 17
Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select
Range("cells(8,s+2)").Activate
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("20081216_210647").Range( _
"cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)"), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).Name = "=""0810p2x"""
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="0810p2x"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "0810p2x"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t"
.Axes(xlValue, xlPrimary).HasTitle = False
End With
Next
End Sub

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義...続きを読む

Aベストアンサー

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな(Excelで表示されている)シートが上位オブジェクトとして、自動的に認識されます。

≪例2≫
Sheets("Sheet2").Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、Rangeのみシート名が記述されています。
Sheets("Sheet2").Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
Activeなシートが、Sheet2の場合はエラーになりません。
しかし、ActiveなシートがSheet2以外の場合、エラーが発生します。
直前に、
Sheets("Sheet1").Select
などとしていれば、ActiveシートがSheet1になっていますから、エラーになります。

Sheets("Sheet2").Range(Sheets("Sheet2").Cells(8, 1), Sheets("Sheet2").Cells(1587, 2)).Select
と書いておけば安心です。
Withステートメントを使えばスッキリ纏めることができます。
With Sheets("Sheet2")
  .Range(.Cells(8, 1), .Cells(1587, 2)).Select
End With

# Sheets("Sheet2")の上位オブジェクトが省略されていることにも気がついてください。

>そこで自分で基礎を勉強したいのですが推薦できる参考書などがござ
>いましたら、教えていただけませんか?
私自身は、入門書程度の雑誌を1冊買っただけです。どれが良いとかはよく分かりません。
「マクロの記録」を活用して、参考コードを取得し、汎用性のあるコードに編集しています。
新しい単語があれば、文字カーソルを単語の上に置き、F1キーを押してVBAのヘルプを必ず見るようにしています。
躓いた時は、Web検索して欲しい情報を得たり、あるいは、こうした掲示板で先輩方のお力をお借りしています。

Excel(エクセル)VBA入門:目次
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=4651404
エクセル入門・初級編
http://www.kenzo30.com/excel_kiso.htm

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな...続きを読む

QMSCOMCTL.OCXのアップデートの方法

Excel VBAを使っていて
ListviewなどのMSCOMCTL.OCXに依存した
コントロールを使っている場合
MSCOMCTL.OCXに上位互換性がないため、
VBAを含むxlsmファイルを作成したPCとは異なるPCで
そのプログラムを使用するためには
使うPCごとにMSCOMCTL.OCXをアップデートする必要があります。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1198163781

詳細はこのページに書かれてあります。

疑問は、いま、自分が使っているMSCOMCTL.OCXのバージョンが2012年のものなのですが
Windows10にアップグレードするなどした場合に
MSCOMCTL.OCXをアップグレードする必要がありますが
VBAは正常に動作するのでしょうか?

MSCOMCTL.OCXには下位互換性があるのでしょうか?

もし動作しないとして、
一つずつListviewを削除して新規作成するという作業を行う必要があるのでしょうか?
自動更新できる方法があれば教えてください。

Excel VBAを使っていて
ListviewなどのMSCOMCTL.OCXに依存した
コントロールを使っている場合
MSCOMCTL.OCXに上位互換性がないため、
VBAを含むxlsmファイルを作成したPCとは異なるPCで
そのプログラムを使用するためには
使うPCごとにMSCOMCTL.OCXをアップデートする必要があります。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1198163781

詳細はこのページに書かれてあります。

疑問は、いま、自分が使っているMSCOMCTL.OCXのバージョンが2012年のものなのですが
Windows10に...続きを読む

Aベストアンサー

>Win10 PCで作成したVBAをWin7 PCにコピーして使用するためには、
>「~7.0(SP6)(仮称)」にチェックを入れる必要があるはずです。
その場合にはWin7PCではMicrosoft ListView Control 6.0(SP4)にチェックを入れなおせば
まず問題ないはずです。
ちなみに当方のWin7 Office2010 のMicrosoft ListView Controlの実体ファイルの
製品バージョンは6.01.9839
Win10 Office2016(プレビュー版)のmscomctl.ocxのバージョンも同一でした。
単純なテストですが、2016 → 2010 では問題なかったです
VBAはよく言えば枯れた状態ですので大々的なアップデートは無いでしょう。
あったとしたらMicrosoft ActiveX Data Object x.x Libraryと同様
Microsoft ListView Control 6.0・・・
Microsoft ListView Control 7.0・・・
のように複数バージョンが並行して登録されるとおもいます。

>オフィスを常にアップデートして最新の状態にしておく必要があるということでしょうか?
大多数の人は更新プログラムを自動的にインストールする設定にしたままだと思います。
最新にというかリビジョンを合わせた方がつまらないトラブルにならないと思います。
ただ、近年のアップデートは地雷が多すぎて何とも言えなくなりました。。。

>Win10 PCで作成したVBAをWin7 PCにコピーして使用するためには、
>「~7.0(SP6)(仮称)」にチェックを入れる必要があるはずです。
その場合にはWin7PCではMicrosoft ListView Control 6.0(SP4)にチェックを入れなおせば
まず問題ないはずです。
ちなみに当方のWin7 Office2010 のMicrosoft ListView Controlの実体ファイルの
製品バージョンは6.01.9839
Win10 Office2016(プレビュー版)のmscomctl.ocxのバージョンも同一でした。
単純なテストですが、2016 → 2010 では問題なかったです
VBAはよく言えば枯れた状...続きを読む

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング