excel2000のVBAを配布用に改造したい

このQ&Aのポイント
  • excel2000のVBAを配布用に改造する方法を教えてください。
  • 多数のユーザーに配布するための自動的なPERSONAL.XLSのModule 1への追記方法を教えてください。
  • さらに「mailsheetopen」のコマンドをツールバー右下に自動的に表示させる方法を教えてください。
回答を見る
  • ベストアンサー

excel2000のVBAを配布用に改造したい

下記のコードを、多数のユーザーに配布するため、自動的にPERSONAL.XLSのModule 1に登録させられるようなコードを教えていただけるとありがたいです。よろしくお願いいたします。 ■お願いしたいこと (1)下記コード「passget」と「mailsheetopen」を自動的にPERSONAL.XLSのModule 1に追記するコードを教えてほしい (2)さらに「mailsheetopen」のコマンドをツールバー右下に自動的に表示させられるようにしたい Private sub passget() Dim TempObject As MSForms.DataObject Set TempObject = New MSForms.DataObject With TempObject .SetText "<<http://" & ActiveWorkbook.FullName & ">>" .PutInClipboard End With Set TempObject = Nothing End Sub '------------------------------------------------------------ Sub mailsheetopen() On Error Resume Next Call passget Dim target_dir As String Dim target_file As String Dim target_sheet As String target_dir = "C:\Users\new\Desktop" target_file = "rensyu.xls" target_sheet = "rensyu" 'ブックを開く Workbooks.Open Filename:=target_dir & "\" & target_file 'シートを指定 Sheets(target_sheet).Select 'セルを指定 Range("B6").PasteSpecial End Sub

  • puyopa
  • お礼率87% (459/525)

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1さんと同様にアドインをお勧めしますが、アドインについての記事は詳しく正確に書こうとされているのでしょうが、どうも敷居が高い気がして、自分も長いこと手が出せないでいました。 あるブックから、他のブックを操作できる(ブック名や、シート名を指定して、selectやactivateしないで操作)スキルがあれば、アドインを作るのは難しくありません。売り物にするような完成度を求める場合は別だとは思いますが。 simpleAddin.xls というブックを作成し、次の様なコードを組み込み、アドインとして保存します。(simpleAddin.xla) メニューからツール/アドイン/参照でsimpleAddin.xlaを組み込めば使用できます。 なお、Projectに保護をかけないと、コードが見えてしまいます。また当方もxl2000です。 ☆Thisworkbookモジュールに、アドイン組み込み時のメニュー組み込み、取り外し時のメニュー削除のコードを書きます。 Private Sub Workbook_AddinInstall() Dim NewM As Variant, NewC As Variant ''新しいメニューを追加する Set NewM = Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlPopup) NewM.Caption = "simpleAddin" ''オリジナルコマンドを追加する Set NewC = NewM.Controls.Add With NewC .Caption = "メールシートを開く" .OnAction = "mailsheetopen" .BeginGroup = False End With 'セルの右クリックメニューを追加 Dim Newb Set Newb = Application.CommandBars("Cell").Controls.Add() With Newb .Caption = "選択セルの合計" .OnAction = "sumSelection" .BeginGroup = True End With End Sub Private Sub Workbook_AddinUninstall() On Error Resume Next Application.CommandBars("Worksheet Menu Bar").Controls("simpleAddin").Delete Application.CommandBars("Cell").Controls("選択セルの合計").Delete On Error GoTo 0 End Sub ☆標準モジュールに、目的のコードを書きます。  ちょっといじってあります。また、右クリックメニューの事例はおまけです。 Private Sub passget() Dim TempObject As MSForms.DataObject Set TempObject = New MSForms.DataObject With TempObject .SetText "<<http://" & ActiveWorkbook.FullName & ">>" .PutInClipboard End With Set TempObject = Nothing End Sub Private Sub mailsheetopen() Dim target_dir As String Dim target_file As String Dim target_sheet As String Call passget target_dir = "C:\Users\new\Desktop" target_file = "rensyu.xls" target_sheet = "rensyu" If Dir(target_dir & "\" & target_file) = "" Then MsgBox "File not found" Exit Sub End If Workbooks.Open Filename:=target_dir & "\" & target_file With Workbooks(target_file) .Sheets(target_sheet).Range("B6").PasteSpecial End With End Sub 'おまけ 右クリックメニュー登録事例用 Private Sub sumSelection() Dim myCell As Range Dim mySum As Double Dim CB As New DataObject On Error GoTo errHandle If TypeName(Selection) <> "Range" Then Exit Sub For Each myCell In Selection.Cells mySum = mySum + myCell.Value Next myCell With CB .SetText CStr(mySum) .PutInClipboard End With MsgBox "合計:" & CStr(mySum) & vbCrLf & "をクリップボードにコピーしました" Set CB = Nothing errHandle: End Sub

puyopa
質問者

お礼

mitarashi様 回答ありがとうございます。 まだうまく作れていませんが、アドインを作るきっかけが出来そうです。 私にとってとても難しいことなので、もっと時間をかけて、作っていきたいと思います。 ありがとうございました。

その他の回答 (1)

回答No.1

(1)可能ではありますが、あまりお勧めではありません。 マクロウィリスが自分自身のコピーを、他のExcelファイルに書き込むのと同じ手法を 使用するからです。 アドインを作成し、それを配布するというのはいかがですか? 以下のサイトが参考になると思います。私も大変お世話になっています。 http://www.asahi-net.or.jp/~ef2o-inue/haifu/sub06_010.html (2)の”「mailsheetopen」のコマンド”というのはmailsheetopenを起動させる コマンドボタンのことでしょうか? だったら、以下でよい? Sub Macro1() ActiveSheet.Buttons.Add(ActiveWindow.UsableWidth - 72, 1, 72, 20).Select Selection.OnAction = "mailsheetopen" End Sub ただし、列見出しをOFFにしなければきっちり右下になりません。

puyopa
質問者

お礼

回答ありがとうございます。 ご紹介頂いたサイトはとても丁寧で親切にきめ細かく作られていたと思います。 しかし、私の理解力不足で、まだ実践投入出来そうにありませんでした。 もう少し、時間をかけて理解を深めていきたいと思います。 ありがとうございました。

関連するQ&A

  • EXCEL2000とEXCEL2003のVBAについて

    現在、EXCEL2000で下記のコードを実行しています。 が、EXCEL2003で実行すると、 .UsedRange.Copy myb のコードが実行されているのにコピー出来ていません。 ファイルは開いていて、エラーは出ていないのです。 問題点わかる方教えていただけますか? Sub 日別データ読込() Dim rngsaki As Range Dim pathmacrobook As String Dim namebook As String Dim motobook As Workbook Dim myb As Variant Set rngsaki = Workbooks("残高集計用.xls").Worksheets(3).Range("a2") pathmacrobook = ThisWorkbook.Path & "\CSV読込データ12\" namebook = Dir(pathmacrobook & "*.xls") Do While Not namebook = "" Set motobook = Workbooks.Open(pathmacrobook & namebook) Set myb = Workbooks("残高集計用.xls").Worksheets(3).Range("A65536").End(xlUp) With motobook.Worksheets("Sheet1") .UsedRange.Copy myb End With motobook.Close False namebook = Dir() Loop MsgBox "完了しました" End Sub

  • VBA フォルダ内のファイル名一覧

    下のようなコードですが、Dir("C:\見積\*.xls")の部分を このコードを書いてあるブックのあるフォルダの名前をもっと簡単に取得してコードにできないでしょうか。 もうひとつ付け加えたいこともあります。ファイル名一覧にする際、このブックと「XXX.xls」という名前のブック名以外の一覧にしたいのですが、これもお手上げですので、あわせてお願いします。 Sub test() Dim myFile As String Dim fl As Integer myFile = Dir("C:\見積\*.xls") fl = 9 Do While myFile <> "" fl = fl + 1 Cells(fl, 3).Value = myFile myFile = Dir() Loop End sub

  • 【VBA】 ファイル名の取得

    23歳OLです。 会社でマクロを組んでいるのですが、 できないところがあったのでご相談させてください。 ▼やりたいこと ================================================ ・フォルダを自分で指定して、選択したファイルの名前をシートに書き込む 1.txt 2.log 3.xls とフォルダに入っていたら 1.txt 2.log 3.xls とシートに名前を書き込んでほしいです。 ・ファイルの種類はいろいろある。(txt.logなど) ================================================ ▼現在書いてみたコード ======================== Sub Sample1() Dim buf As String, cnt As Long Const Path As String = "" buf = Dir(Path & "*.*") Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Loop End Sub ======================== これだと、初めから指定したフォルダしか取得することができないらしいです。 そもそもConst Path As String = "このぶぶん" このぶぶんにフォルダを指定しても動きませんでした。? どこが原因なのでしょうか? ご教示お願いします。

  • アクセスvbaでクリップボードにコピーの動作を実行

    アクセスvbaでクリップボードにコピーの動作を実行したいです。 エクセルなら、 Sub test() Dim buf As String Dim CB As New DataObject buf = "test" With CB .SetText buf ''変数のデータをDataObjectに格納する .PutInClipboard ''DataObjectのデータをクリップボードに格納する .GetFromClipboard ''クリップボードからDataObjectにデータを取得する Debug.Print .GetText ''DataObjectのデータを変数に取得する End With End Sub これが実行できるのですが、 どうやらアクセスだと Dim CB As New DataObject これがエラーになるようです。 Dim CB As Objectにすると .SetText buf で実行時エラー91になります。 (「オブジェクト変数またはWithブロック変数が設定されていません」) http://officetanaka.net/excel/vba/tips/tips20.htm によると、 「DataObjectオブジェクトはMSFormsのメンバです。使用するには、Microsoft Forms 2.0 Object Libraryを参照設定します。または、ブックにUserFormを挿入すると自動的に参照設定されます。」 なので、アクセスvbaの参照設定で「Microsoft Forms 2.0 Object Library」を探したのですが、 ありませんでした。 当方バージョンは2010です。 アクセスでは不可能と言うことでしょうか? ご教授よろしくお願いします。

  • エクセルVBAのエラー

    よろしくお願いします。 VBA初心者のものです。 下記のコードを作成しましたが、 アプリケーション定義?がされていません というエラーが出ます。 わかりやすく教えていただけないでしょうか。 修正方法を教えてください。 0901名簿.xlsという名前の ファイルAのsheet1の 情報(ファイルBのセルBD1に日付4桁が記入されている)を ファイルBのセルA1の情報を元にファイルBのセルB1に抽出したい Sub 関数の挿入() Dim i As Long Dim あ As String Dim い As String Dim う As String あ="=VLOOKUP(A1,[" い=Range("BD1") う="名簿.xls]Sheet1!$F:$I,1,0)" For i = 2 To 50 Range("A" & i )= あ & い & う Next i End Sub

  • ActiveWorkBook VBA

    Sub test() Dim myCSV As String Dim Fname As Variant Dim Aname As String Dim Fullp As String Application.ScreenUpdating = False Fullp = ActiveWorkbook.FullName Pos = InStrRev(Fullp, "\") Fname = Left(Fullp, Pos) myCSV = Dir(Fname & "*.csv") Do Until myCSV = "" Workbooks.Open Fname & myCSV Aname = Left(Fullp, InStr(1, Fullp, ".") - 1) ActiveWorkbook.SaveAs filename:=Aname & ".xls", FileFormat:=xlExcel9795 ActiveWorkbook.Close myCSV = Dir() Loop Kill Fname & "*.csv" End Sub あるフォルダにあるcsvファイルをxlsで保存したいと思いましたが、アクティブになるBOOKがバラバラ? で、うまくいきません。csvファイルを開いたときに そのファイルがアクティブになり、うまくloopできないでしょうか?

  • VBAでフォルダにあるエクセルファイルを開く

    こんにちは このコードがうまく動かないのですが、 どこがいけないのかわからなく助けてください。 なおフォルダの中には******データ.xlsと言うファイルがあり、アスタリスク部分は日付が不規則に変化して上書きされるのです。 このファイルを開くマクロを作りたいのですが。 うまく行きません。 よろしくおねがいします。 Sub excelopen() ' ' Dim エクセル As String 'エクセル = Dir(ActiveWorkbook.Path & "\*データ.XLS") If エクセル = "" Then Exit Sub エクセル = ActiveWorkbook.Path & "\" & エクセル Workbooks.Open Filename:=エクセル End Sub

  • VBAでハイパーリンクをつける

    仕事で画像のファイル名をExcelに書き出し、書き出しものにハイパーリンクで見がうまくいきません。下記のものです。どこが悪いのでしょうか? Option Explicit Dim ドライブ As String Dim フォルダ As String Dim 拡張子 As String Dim 記入シート As String Dim パス As String Dim ファイル名 As String Dim 貼付行 As Integer Sub フォルダ中のファイル名をシートに書く() ドライブ = "C" フォルダ = "分析" 拡張子 = "*." & "JPG" 記入シート = "ファイル一覧" End Sub Private Sub 指定フォルダ中の指定拡張子のファイル名をシートに書く() Sheets(記入シート).Activate Cells.Clear Range("A1").Select パス = ドライブ & ":\" & フォルダ & "\" ファイル名 = Dir(パス & 拡張子) 貼付行 = 0 Do While ファイル名 <> "" 貼付行 = 貼付行 + 1 Cells(貼付行, 1).Value = ファイル名 ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=ファイル名, TextToDisplay:=ファイル名 ファイル名 = Dir() Loop End Sub 実行すると初めの一行だけリンクができ後は一行もできません。よろしくお願い致します。

  • VBAでFTPサーバーへのアップデート

    BASP21でのFTPサーバーへのアップデートが出来ないです。 BASP21をインストールし、サーバーのユーザー名やパスワードも あっている状態です。 しかし、アップデートすると 「を送信できませんでした。」 と表示され、アップデートできませんでした。 「FTP接続できませんでした。」は抜けているので、 それ以外が原因だとは思うのですが分かりません。 Visual Basicのサンプルから書きました。 以下の通りです。 初心者のため質問に不備があるかもしれません。 予めお許しください。 Sub FTPサーバーにUP() Dim FTP, rc As Long, Server As String, User As String, Pass As String Dim Target As String, Folder As String Set FTP = CreateObject("basp21.FTP") ''FTPオブジェクト Server = "ftp.●●●●●●.jp" ''ホストアドレス User = "●●●●●●" ''ユーザー名 Pass = "●●●●●●●●" ''パスワード Target = "C:\Users\●●\Desktop.エクセルファイル.xls" ''送信ファイル If Target = "False" Then Exit Sub Folder = "/home/●●●●●●/●●●●/●●●/状況" rc = FTP.Connect(Server, User, Pass) If rc <> 0 Then MsgBox "FTP接続できませんでした。", vbCritical FTP.Close Exit Sub End If rc = FTP.PutFile(Target, Folder) If rc <> 1 Then MsgBox Dir(Target) & "を送信できませんでした。", vbCritical FTP.Close Exit Sub End If MsgBox Dir(Target) & "を送信しました。", vbInformation FTP.Close End Sub

  • VBAに関して

    VBA超初心者の者ですが、ある一つのシートにいくつかの別のファイルを開いて順にコピーして貼り付けていくというプログラムを作成したいと思っています。 Sub naka() Dim k As Integer Dim r As String k = InputBox("ファイル数を記入してください") r = InputBox("範囲を指定してください") Call s1(k, r) End Sub Sub s1(i As Integer, rangearea As String) Dim v As Integer Dim x As String For v = 1 To i Dim OpenFileName As String With OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") ThisWorkbook.Sheets(1).Range("rangearea").Copy ActiveSheet.Range("1+(rangearea.rows.count*(v-1)),1").PasteSpecial End With Next v End Sub こんな感じでかいてみたものの全く異なったものをかいているようです。同じフォルダ内にコピーするファイルが存在しているものと仮定していますが、マイ ドキュメント内のファイルとしたいです。コピーすべきシートは1としています。大変分かりづらい文章ですが、おかしい部分の指摘、見本等示していただけたらありがたいです。

専門家に質問してみよう