Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10375 / 13646 ツリー ←次へ | 前へ→

【21914】実行内容を・・・ pi 05/2/3(木) 17:18 質問[未読]
【21915】Re:実行内容を・・・ IROC 05/2/3(木) 17:28 回答[未読]
【21949】Re:実行内容を・・・ pi 05/2/4(金) 16:50 発言[未読]
【21986】Re:実行内容を・・・ ichinose 05/2/6(日) 14:05 発言[未読]
【22038】Re:実行内容を・・・ pi 05/2/7(月) 17:20 発言[未読]
【22040】Re:実行内容を・・・ IROC 05/2/7(月) 17:26 回答[未読]
【22061】Re:実行内容を・・・ ichinose 05/2/8(火) 8:22 発言[未読]
【22041】Re:実行内容を・・・ sa 05/2/7(月) 17:30 発言[未読]
【22044】Re:実行内容を・・・ pi 05/2/7(月) 17:58 発言[未読]
【22045】Re:実行内容を・・・ IROC 05/2/7(月) 18:04 回答[未読]
【22047】Re:実行内容を・・・ pi 05/2/7(月) 18:31 発言[未読]
【22063】Re:実行内容を・・・ IROC 05/2/8(火) 8:36 回答[未読]
【22094】Re:実行内容を・・・ pi 05/2/8(火) 17:10 発言[未読]
【22118】Re:実行内容を・・・ IROC 05/2/9(水) 9:50 回答[未読]
【22135】Re:実行内容を・・・ pi 05/2/9(水) 16:52 発言[未読]
【22136】Re:実行内容を・・・ りすりす 05/2/9(水) 17:03 発言[未読]
【22137】Re:実行内容を・・・ pi 05/2/9(水) 17:29 回答[未読]
【22139】Re:実行内容を・・・ ichinose 05/2/9(水) 18:35 発言[未読]
【22141】Re:実行内容を・・・ IROC 05/2/9(水) 20:30 回答[未読]
【22149】Re:実行内容を・・・ pi 05/2/9(水) 23:44 発言[未読]
【22151】Re:実行内容を・・・ ichinose 05/2/10(木) 0:07 発言[未読]
【22153】Re:実行内容を・・・ 追伸 ichinose 05/2/10(木) 0:53 発言[未読]
【22227】Re:実行内容を・・・ pi 05/2/12(土) 18:15 発言[未読]
【22246】Re:実行内容を・・・ ichinose 05/2/13(日) 10:30 発言[未読]

【21914】実行内容を・・・
質問  pi  - 05/2/3(木) 17:18 -

引用なし
パスワード
   マクロのコードを、別のファイルから読み出して
使用することは出来ないのでしょうか?

【21915】Re:実行内容を・・・
回答  IROC  - 05/2/3(木) 17:28 -

引用なし
パスワード
   Excelのバージョンは何でしょうか?

Runメソッドというのがありますけど・・・

【21949】Re:実行内容を・・・
発言  pi  - 05/2/4(金) 16:50 -

引用なし
パスワード
   ▼IROC さん今日は 
遅くなって申し訳ありません・・・

Excelのバージョンは97です。

僕の希望としては、テキスト等から読み込めるといいのですが・・・

【21986】Re:実行内容を・・・
発言  ichinose  - 05/2/6(日) 14:05 -

引用なし
パスワード
   ▼pi さん:
こんにちは。

>▼IROC さん今日は 
>遅くなって申し訳ありません・・・
>
>Excelのバージョンは97です。
>
>僕の希望としては、テキスト等から読み込めるといいのですが・・・
↑これは、VBProject を操作することで可能かと思います。
このサイトの検索を使用して「VBProject」で検索してみて下さい。
いくつも引っかかってきます。参考になるものがあると思います。

が、

不特定多数の方に使用してもらうのが、目的なら問題があるということも
認識して下さいネ!!

ひとつは、2002以降では、標準設定では使えない事。
もうひとつは、あまり使用されていないので
未知の部分もありそうなこと。

VBA開発者のツールとしてなら私は、賛成なんですが・・・。

【22038】Re:実行内容を・・・
発言  pi  - 05/2/7(月) 17:20 -

引用なし
パスワード
   ▼ichinose さん、今日は。

>不特定多数の方に使用してもらうのが、目的なら問題があるということも
>認識して下さいネ!!

>ひとつは、2002以降では、標準設定では使えない事。
>もうひとつは、あまり使用されていないので
>未知の部分もありそうなこと。

申し訳ありません、VBProjectって、何か分かりません。

ところで、
確かにいろいろと引っかかってきたのですが。
ちょっと、どれを見ていいのかさっぱり分かりません。
申し訳ありません。

【22040】Re:実行内容を・・・
回答  IROC  - 05/2/7(月) 17:26 -

引用なし
パスワード
   使用目的は何ですか? Runメソッドではできないのでしょうか?

【22041】Re:実行内容を・・・
発言  sa  - 05/2/7(月) 17:30 -

引用なし
パスワード
   そのモジュールをエクスポートして保存
使いたいファイルにインポートすれば
同じモジュール(マクロ)
が使えます

▼pi さん:
>マクロのコードを、別のファイルから読み出して
>使用することは出来ないのでしょうか?

【22044】Re:実行内容を・・・
発言  pi  - 05/2/7(月) 17:58 -

引用なし
パスワード
   ▼sa さん 今日は
>そのモジュールをエクスポートして保存
>使いたいファイルにインポートすれば
>同じモジュール(マクロ)
>が使えます

説明不足でした、申し訳ありません・・・
マクロ実行時に、テキストからコードを読み取って使いたいのです。

▼IROC さん 今日は
>使用目的は何ですか? Runメソッドではできないのでしょうか?

使用目的は、友達に自分の作ったファイルを送った後に、
テキストファイルを使い、マクロを拡張したいと考えているからです。

Runメゾットも使ってみたのですが、
Runメゾットは失敗しました'_Application'メゾット
と出てきます。

------------------------
Dim es As Variant
Sub Macro1()
es = Application.Run("90.txt!My_Func_Sum")
End Sub

Sub macro1()   '|追加したいコード、
msgbox "abcde"  '|ファイルの名前は 90.txt
End Sub     '|です。

【22045】Re:実行内容を・・・
回答  IROC  - 05/2/7(月) 18:04 -

引用なし
パスワード
   マクロブックのバージョンアップ管理の問題ですよね?
わざわざそのようなことをしなくても
マクロブックをそのまま渡せばよいのではないですか?
シート上にデータがあるのなら
そちらをマクロブックに取り込むしようにすればよいと思いますが?

データブックとマクロブックを分けてアドインのように管理すれば
そのようなウィルスっぽい処理は不要のはずです。

【22047】Re:実行内容を・・・
発言  pi  - 05/2/7(月) 18:31 -

引用なし
パスワード
   ▼IROC さん:
>マクロブックのバージョンアップ管理の問題ですよね?
>わざわざそのようなことをしなくても
>マクロブックをそのまま渡せばよいのではないですか?
>シート上にデータがあるのなら
>そちらをマクロブックに取り込むしようにすればよいと思いますが?
>
>データブックとマクロブックを分けてアドインのように管理すれば
>そのようなウィルスっぽい処理は不要のはずです。


申し訳ありません。
データブックとマクロブックを分けてアドインのように管理する。
これがよく分かりません。すみません。

【22061】Re:実行内容を・・・
発言  ichinose  - 05/2/8(火) 8:22 -

引用なし
パスワード
   pi さん、皆さん、おはようございます。
>Runメゾットも使ってみたのですが、
>Runメゾットは失敗しました'_Application'メゾット
>と出てきます。
runメソッドは、テキストファイルへのアクセスではないですよ!!
マクロコードが入ったExcelブックに対して行って下さい。
つまり、テキストファイルを媒体にするのはやめて
マクロコードを含んだExcelを媒体にしてみては? という意味です。

>使用目的は、友達に自分の作ったファイルを送った後に、
>テキストファイルを使い、マクロを拡張したいと考えているからです。

そのお友達とVBAの共同開発をしているのですか?
もしそうだとしたら、Vbprojectを使うと言うのもありかなあ・・
と思います。

今回の事例で使用するしないはもうちょっと内容を聞いてみないと
わかりませんが、

90.txtというテキストファイルがマクロを含むブックと同じフォルダにあったとして

'=============================================================
Sub main()
  ret = addcode(ThisWorkbook.Path & "\90.txt", ThisWorkbook, "addmdl")
  If ret = 0 Then
   msgbox "挿入成功"
   'Application.Run "macro1"
  Else
   msgbox Error(ret)
  End If
End Sub
'=======================================================================
Function addcode(flnm As String, wk As Workbook, Optional mdnm As String = "", Optional prnm As String) As Long
' 機能:指定されたテキストファイルから、指定されたブックにコードを追加又は、書き換える
' input : flnm---コードが書かれたテキストファイルのパス名
'     wk-----コードを書き込むブックオブジェクト
'     mdnm---書き換える、又は、追加するモジュール名(追加の場合は、標準モジュール)
'         指定されたモジュール名があれば、書き換え、なければ追加
'     prnm---書き換えるプロシジャー名
  On Error Resume Next
  Dim vbcp As Object
  With wk.VBProject
   Set vbcp = .VBComponents(mdnm)
   If Err.Number <> 0 Then
     Set vbcp = .VBComponents.Add(1)
     If mdnm <> "" Then vbcp.Name = mdnm
   Else
     If prnm <> "" Then
      Err.Clear
      stln = vbcp.CodeModule.ProcStartLine(prnm, 0)
      edln = vbcp.CodeModule.ProcCountLines(prnm, 0)
      vbcp.CodeModule.DeleteLines stln, edln - stln + 1
      End If
     End If
   Err.Clear
   vbcp.CodeModule.AddFromFile flnm
   End With
  addcode = Err.Number
  On Error GoTo 0
End Function

上記コードでテキストファイル中のコードを標準モジュールに
読み込みます。
この方法を使用するか否かは十分検討の上で行って下さい。


結果的にpi さんの今回の事例に使用しない場合でも近い将来、
piさんが開発者にとって便利なツールの作成する場合、何らかのきっかけになれば
投稿した意味はあります!!

【22063】Re:実行内容を・・・
回答  IROC  - 05/2/8(火) 8:36 -

引用なし
パスワード
   >申し訳ありません。
>データブックとマクロブックを分けてアドインのように管理する。
>これがよく分かりません。すみません。

そのマクロブックをどのように使っているのですか?
アドインはご存じありませんか?


以下に対する回答はどうなのでしょう?
>マクロブックをそのまま渡せばよいのではないですか?
>シート上にデータがあるのなら
>そちらをマクロブックに取り込むしようにすればよいと思いますが?

【22094】Re:実行内容を・・・
発言  pi  - 05/2/8(火) 17:10 -

引用なし
パスワード
   ▼IROC さん:
何度もしつこく質問して申し訳ありません。
マクロブックとやらが、いまいち分かりません。

【22118】Re:実行内容を・・・
回答  IROC  - 05/2/9(水) 9:50 -

引用なし
パスワード
   >マクロブックとやらが、いまいち分かりません。
マクロを記述してあるブックのことです。


Book1.xls にマクロを書きます。
 ↓
Book1.xlsを配布します。
 ↓
使用者はBook1のSheet1でデータ作成したり、マクロを利用します。
 ↓
マクロを変更したいです。
Book1.xlsのマクロを修正しBook1_v1.xlsを作成します。
 ↓
Book1_v1.xls として配布します。
 ↓
Book1_v1.xlsに前回配布したBook1.xlsのsheet1をコピーします。
 ↓
旧Book1.xlsを破棄して、以後、Book1_v1.xlsを使用します。

−−−−−−−−−−−

マクロをアドインブックにするのであれば、Book1.xlaとして配布します。
アドインブック上のシートは使用できないので、
使用者はデータブックを作成し、それに対してアドインからマクロ呼んで実行します。
データブック.xlsとBook1.xlaが分離しているので、
Book1.xlaのマクロをいくら変更してもデータブックに影響がありません。

【22135】Re:実行内容を・・・
発言  pi  - 05/2/9(水) 16:52 -

引用なし
パスワード
   ▼IROC さん 今日は
>>マクロブックとやらが、いまいち分かりません。
>マクロを記述してあるブックのことです。
>
>
>Book1.xls にマクロを書きます。
> ↓
>Book1.xlsを配布します。
> ↓
>使用者はBook1のSheet1でデータ作成したり、マクロを利用します。
> ↓
>マクロを変更したいです。
>Book1.xlsのマクロを修正しBook1_v1.xlsを作成します。
> ↓
>Book1_v1.xls として配布します。
> ↓
>Book1_v1.xlsに前回配布したBook1.xlsのsheet1をコピーします。
> ↓
>旧Book1.xlsを破棄して、以後、Book1_v1.xlsを使用します。
>
>−−−−−−−−−−−
>
>マクロをアドインブックにするのであれば、Book1.xlaとして配布します。
>アドインブック上のシートは使用できないので、
>使用者はデータブックを作成し、それに対してアドインからマクロ呼んで実行します。
>データブック.xlsとBook1.xlaが分離しているので、
>Book1.xlaのマクロをいくら変更してもデータブックに影響がありません。

ようやく、理解することが出来ました、有難うございます。
つまり、マクロだけ更新したシートを送り。
シートのデータは、そのマクロだけ更新したシートにコピーする。
ということですね。

▼ichinose さん 今日は

Sub main()
  ret = addcode(ThisWorkbook.Path & "\90.txt", ThisWorkbook, "addmdl")
  If ret = 0 Then
   msgbox "挿入成功"
   'Application.Run "macro1"
  Else
   msgbox Error(ret)
  End If
End Sub
'=======================================================================
Function addcode(flnm As String, wk As Workbook, Optional mdnm As String = "", Optional prnm As String) As Long
' 機能:指定されたテキストファイルから、指定されたブックにコードを追加又は、書き換える
' input : flnm---コードが書かれたテキストファイルのパス名
'     wk-----コードを書き込むブックオブジェクト
'     mdnm---書き換える、又は、追加するモジュール名(追加の場合は、標準モジュール)
>'         指定されたモジュール名があれば、書き換え、なければ追加
>'     prnm---書き換えるプロシジャー名
>  On Error Resume Next
>  Dim vbcp As Object
>  With wk.VBProject
>   Set vbcp = .VBComponents(mdnm)
>   If Err.Number <> 0 Then
>     Set vbcp = .VBComponents.Add(1)
>     If mdnm <> "" Then vbcp.Name = mdnm
>   Else
>     If prnm <> "" Then
>      Err.Clear
>      stln = vbcp.CodeModule.ProcStartLine(prnm, 0)
>      edln = vbcp.CodeModule.ProcCountLines(prnm, 0)
>      vbcp.CodeModule.DeleteLines stln, edln - stln + 1
>      End If
>     End If
>   Err.Clear
>   vbcp.CodeModule.AddFromFile flnm
>   End With
>  addcode = Err.Number
>  On Error GoTo 0
>End Function

>上記コードでテキストファイル中のコードを標準モジュールに
>読み込みます。

申し訳ないのですが、このマクロを実行したとき、
msgbox Error(ret) のところが実行されてしまいます。
どうすれば、いいのでしょうか?

【22136】Re:実行内容を・・・
発言  りすりす  - 05/2/9(水) 17:03 -

引用なし
パスワード
     ret = addcode(ThisWorkbook.Path & "\90.txt", ThisWorkbook, "addmdl")
 
ThisWorkbook.Pathの最後に\がついているので
\90の\をとるといいかもしれません

【22137】Re:実行内容を・・・
回答  pi  - 05/2/9(水) 17:29 -

引用なし
パスワード
   ▼りすりす さん:
>ThisWorkbook.Pathの最後に\がついているので
>\90の\をとるといいかもしれません

試してみたのですが、変化が見られませんでした。
返答有難うございます。

【22139】Re:実行内容を・・・
発言  ichinose  - 05/2/9(水) 18:35 -

引用なし
パスワード
   ▼pi さん、りすりす さん、こんばんは。

>>ThisWorkbook.Pathの最後に\がついているので
>>\90の\をとるといいかもしれません
>
>試してみたのですが、変化が見られませんでした。
>返答有難うございます。
Pathの最後、"\"は、付いてませんよ!!
mainは、そのままで良いです。

addcode(ThisWorkbook.Path & "\90.txt",ThisWorkbook, "addmdl")

この呼び出ししておいてください。

>'=======================================================================
>Function addcode(flnm As String, wk As Workbook, Optional mdnm As String = "", Optional prnm As String) As Long
>' 機能:指定されたテキストファイルから、指定されたブックにコードを追加又は、書き換える
>' input : flnm---コードが書かれたテキストファイルのパス名
>'     wk-----コードを書き込むブックオブジェクト
>'     mdnm---書き換える、又は、追加するモジュール名(追加の場合は、標準モジュール)
>'         指定されたモジュール名があれば、書き換え、なければ追加
>'     prnm---書き換えるプロシジャー名

  MsgBox flnm & ":" & wk.Name & ":" & mdnm
' これでパラメータが正しいか確認して下さい 
  'On Error Resume Next
'  ↑コメントにして下さい
' このサブルーチン内でエラーになりますから、
' どのコードでどんなエラーが発生したか確認して下さい
>  Dim vbcp As Object
>  With wk.VBProject
>   Set vbcp = .VBComponents(mdnm)
>   If Err.Number <> 0 Then
>     Set vbcp = .VBComponents.Add(1)
>     If mdnm <> "" Then vbcp.Name = mdnm
>   Else
>     If prnm <> "" Then
>      Err.Clear
>      stln = vbcp.CodeModule.ProcStartLine(prnm, 0)
>      edln = vbcp.CodeModule.ProcCountLines(prnm, 0)
      vbcp.CodeModule.DeleteLines stln, edln
'        ↑ここ今回のエラーとは関係ないですが、訂正して下さい。
>      End If
>     End If
>   Err.Clear
>   vbcp.CodeModule.AddFromFile flnm
>   End With
>  addcode = Err.Number
>  On Error GoTo 0
>End Function


97では確認してませんが、2000では正常にインポートされています。
心配なのは、97にAddFromFileメソッドがあったかどうかですが・・・。
これで、エラー箇所が特定できると思います。

【22141】Re:実行内容を・・・
回答  IROC  - 05/2/9(水) 20:30 -

引用なし
パスワード
   >つまり、マクロだけ更新したシートを送り。
>シートのデータは、そのマクロだけ更新したシートにコピーする。
>ということですね。

ちょっと単語が違います。
マクロだけ更新したブックを送り、
シートのデータは、そのマクロだけ更新したブックのシートにコピーする。

【22149】Re:実行内容を・・・
発言  pi  - 05/2/9(水) 23:44 -

引用なし
パスワード
   ▼ichinose さん 今晩は
コメントや、パラメータといったものがよく分かりません。
申し訳ないです。

Sub main()
  ret = addcode(ThisWorkbook.Path & "\90.txt", ThisWorkbook, "addmdl")
  If ret = 0 Then
   MsgBox "挿入成功"
   'Application.Run "macro1"
  Else
   MsgBox Error(ret)
  End If
End Sub
Function addcode(flnm As String, wk As Workbook, Optional mdnm As String = "", Optional prnm As String) As Long
  On Error Resume Next
  Dim vbcp As Object
  MsgBox flnm & ":" & wk.Name & ":" & mdnm
  With wk.VBProject
   Set vbcp = .VBComponents(mdnm)
   If Err.Number <> 0 Then
     Set vbcp = .VBComponents.Add(1)
     If mdnm <> "" Then vbcp.Name = mdnm
   Else
     If prnm <> "" Then
      Err.Clear
      stln = vbcp.CodeModule.ProcStartLine(prnm, 0)
      edln = vbcp.CodeModule.ProcCountLines(prnm, 0)
      vbcp.CodeModule.DeleteLines stln, edln
      End If
     End If
   Err.Clear
   vbcp.CodeModule.AddFromFile flnm
   End With
  addcode = Err.Number
  On Error GoTo 0
End Function
この通りに実行すると、まず、
C:\(途中省略) \デスクトップ\90\90.txt:121212.xls:addmdl
と、出てきます。ちなみに121212.xlsと90.txtは90という名前のフォルダに
入っています。90という名前のフォルダは、
デスクトップにあります。
その後に、"オブジェクト変数 または Withブロック変数が設定されていません
と、出てきます。

▼IROC さん 今晩は
>ちょっと単語が違います。
>マクロだけ更新したブックを送り、
>シートのデータは、そのマクロだけ更新したブックのシートにコピーする。

あ、ブックの中にシートがあり、シートはファイルではないんですよね。
ちょっと勘違いしてました、すみません。

【22151】Re:実行内容を・・・
発言  ichinose  - 05/2/10(木) 0:07 -

引用なし
パスワード
   ▼pi さん:
こんばんは。
>この通りに実行すると、まず、
>C:\(途中省略) \デスクトップ\90\90.txt:121212.xls:addmdl
>と、出てきます。ちなみに121212.xlsと90.txtは90という名前のフォルダに
>入っています。90という名前のフォルダは、
>デスクトップにあります。
>その後に、"オブジェクト変数 または Withブロック変数が設定されていません
>と、出てきます。
ちょっと、どの行でエラーが発生しているの完全に特定できないので、
Addcodeというファンクションプロシジャーのコードを単純にしてみます。

'=======================================================================
Function addcode(flnm As String, wk As Workbook, Optional mdnm As String = "", Optional prnm As String) As Long
  Dim vbcp As Object
  With wk.VBProject
   Set vbcp = .VBComponents.Add(1)
   Err.Clear
   vbcp.CodeModule.AddFromFile flnm
   End With
  addcode = Err.Number
End Function

mainのコードはそのままです。
これで実行して下さい。どこかでエラーが発生するはずなんです。
エラーが発生した箇所とエラーの内容を教えて下さい。
何となく想像つきますが、確定したいのでこれで再度実行してみてください。

【22153】Re:実行内容を・・・ 追伸
発言  ichinose  - 05/2/10(木) 0:53 -

引用なし
パスワード
   ちょっと機能縮小で恐縮ですが、
以下のコードも試してみてください。
'============================================================
Sub main()
  ret = addcode(ThisWorkbook.Path & "\90.txt", ThisWorkbook, "addcode")
  If ret = 0 Then
   msgbox "挿入成功"
   'Application.Run "macro1"
  Else
   msgbox ret & " : " & Error(ret)
  End If
End Sub
'=======================================================================
Function addcode(flnm As String, wk As Workbook, Optional mdnm As String = "") As Long
' 機能:指定されたテキストファイルから、指定されたブックにコードを追加する
' input : flnm---コードが書かれたテキストファイルのパス名
'     wk-----コードを書き込むブックオブジェクト
'     mdnm---追加するモジュール名(標準モジュール)
  On Error Resume Next
  Dim vbcp As Object
  With wk.VBProject
   Set vbcp = .VBComponents.Import(flnm)
   End With
  If Err.Number = 0 Then
   vbcp.name = mdnm
   addcode = 0
  Else
   addcode = Err.Number
   End If
  On Error GoTo 0
End Function

importは、使えたと思います。
前回のコードの結果も知りたいのですが、
これも試してみてください。

【22227】Re:実行内容を・・・
発言  pi  - 05/2/12(土) 18:15 -

引用なし
パスワード
   ▼ichinose さん 今晩は
事情により、大変返信が送れてしまいました。
申し分けまりません。
>'=======================================================================
>Function addcode(flnm As String, wk As Workbook, Optional mdnm As String = "", Optional prnm As String) As Long
>  Dim vbcp As Object
>  With wk.VBProject
>   Set vbcp = .VBComponents.Add(1)
>   Err.Clear
>   vbcp.CodeModule.AddFromFile flnm
>   End With
>  addcode = Err.Number
>End Function
>
>mainのコードはそのままです。
>これで実行して下さい。どこかでエラーが発生するはずなんです。
>エラーが発生した箇所とエラーの内容を教えて下さい。
>何となく想像つきますが、確定したいのでこれで再度実行してみてください

このコードを実行したところ、
"実行エラー 1004"
"プログラミングによるVisual Basic プロジェクトへのアクセスは
信頼性に欠けます"
と、出てきました。どういう意味でしょうか?

>ちょっと機能縮小で恐縮ですが、
>以下のコードも試してみてください。
>'============================================================
>Sub main()
>  ret = addcode(ThisWorkbook.Path & "\90.txt", ThisWorkbook, "addcode")
>  If ret = 0 Then
>   msgbox "挿入成功"
>   'Application.Run "macro1"
>  Else
>   msgbox ret & " : " & Error(ret)
>  End If
>End Sub
>'=======================================================================
>Function addcode(flnm As String, wk As Workbook, Optional mdnm As String = "") As Long
>' 機能:指定されたテキストファイルから、指定されたブックにコードを追加する
>' input : flnm---コードが書かれたテキストファイルのパス名
>'     wk-----コードを書き込むブックオブジェクト
>'     mdnm---追加するモジュール名(標準モジュール)
>  On Error Resume Next
>  Dim vbcp As Object
>  With wk.VBProject
>   Set vbcp = .VBComponents.Import(flnm)
>   End With
>  If Err.Number = 0 Then
>   vbcp.name = mdnm
>   addcode = 0
>  Else
>   addcode = Err.Number
>   End If
>  On Error GoTo 0
>End Function
>
>importは、使えたと思います。
>前回のコードの結果も知りたいのですが、
>これも試してみてください。

このコードを実行したところ、
"91:オブジェクト変数 または Withブロック変数が設定されていません"
と、出てきました。

以上です。どうかよろしくお願いします。

【22246】Re:実行内容を・・・
発言  ichinose  - 05/2/13(日) 10:30 -

引用なし
パスワード
   ▼pi さん:
おはようございます。
>事情により、大変返信が送れてしまいました。
>申し分けまりません。
>>'=======================================================================
>>Function addcode(flnm As String, wk As Workbook, Optional mdnm As String = "", Optional prnm As String) As Long
>>  Dim vbcp As Object
>>  With wk.VBProject
>>   Set vbcp = .VBComponents.Add(1)
>>   Err.Clear
>>   vbcp.CodeModule.AddFromFile flnm
>>   End With
>>  addcode = Err.Number
>>End Function
>>
>>mainのコードはそのままです。
>>これで実行して下さい。どこかでエラーが発生するはずなんです。
>>エラーが発生した箇所とエラーの内容を教えて下さい。
>>何となく想像つきますが、確定したいのでこれで再度実行してみてください
>
>このコードを実行したところ、
>"実行エラー 1004"
>"プログラミングによるVisual Basic プロジェクトへのアクセスは
>信頼性に欠けます"
>と、出てきました。どういう意味でしょうか?
Excelのバージョンは、97ですよね?

う〜ん、わかりません・・・。

Excel2002では、確かにこのメッセージが表示されますが、
メッセージ表示後、「デバッグ」をクリックすると、

With wk.VBProject

でエラーが発生している事が確認できます。

もし、Excel2002なら、設定が必要です。

10375 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free