現在notes7で開発を行っている(初心者)なのですが

ビュー内の選択している文書からデータを取ってきて
読み込んだexcelファイルに書き足していきたいのですが、

任意のexcelを開くところまではネットを参考にして出来たのですが
詳細を理解していないため、そのファイルにデータを書き足していくことが出来ません。アドバイスをお願い致します。

現在作ってあるプログラムが以下です。

' 既存のEXCELワークブックを開く
Dim xlApp As Variant ' Excelオブジェクト
' マイドキュメントの指定ファイルを開く
Dim wsh As Variant, fso As Variant
Dim FilePath As String, FileName As String
Set wsh = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
FilePath = wsh.SpecialFolders("MyDocuments")
FileName = FilePath & "\sample.xls"
If Not fso.FileExists(FileName) Then
Msgbox "ファイルがありません。" & Chr(13) & FileName, 16
Exit Sub
End If
Set xlApp = CreateObject("Excel.Application") ' Excel OLE起動
xlApp.Workbooks.Open FileName
xlApp.Visible = True


これで、ファイルは開けます。ちなみにビュー内の選択文書の取り込みは出来てます。後は、そのデータをエクセルに書き出すだけなのですが
そこが解りません。

それと、現在マイドキュメント内のファイルを読み込んでますが
同じデータを共有リソースの中に保存してあるので、そっちから開きたいのですが、パスをどのように設定すればいいのか解りません。

すみませんが、アドバイスをお願い致します。

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

A 回答 (3件)

ひとまず、書き出しの方から回答いたします。



エクセルファイルの取得まではできているようですので、今後は「シートオブジェクトの取得」->「セルを指定して処理」の流れでプログラムを作成すればよいと思います。

例えば、作成済みのプログラムの次に以下のコードを追記すれば、Excelに書き出しができると思います。

Dim xlWorksheet As Variant'エクセル・シート
'シート名を指定してシートオブジェクトを取得
Set xlWorkSheet = xlApp.WorkSheets( "Sheet1" )
'セルの1行1列目に「あああああ」という文字をセット
xlWorksheet.cells(1,1).Value = "あああああ"

既に文書の取り込みができているとのことですので、例えば文書オブジェクトがdocだとしたら、以下のコードで実現できるのではないでしょうか。

'文書上のxxxxxフィールドの値を、Excelの1行1列目にセット
xlWorksheet.cells(1,1).Value = doc.GetItemValue( "xxxxx")(0)

蛇足ですが、サイズ幅の変更のような処理も可能です。(マクロをNotes上から実行させるイメージです)

xlWorksheet.cells(1,1).ColumnWidth = 4.13
    • good
    • 0

共有リソースはそちらをさしていたのですね、了解いたしました。


ただし、そうなると、申し訳ありませんが、あまり期待にそえる回答ができなそうです。

共有リソースは、例えば複数のフォームで同じロゴの画像イメージを使いたい場合等に、共有リソースにロゴイメージを1つだけ登録し、各フォームでは共有リソースを参照するという用途に利用いたします。(メンテナンス性とディスクサイズの削減)

また、共有リソースへのパスの指定方法は、申し訳ありませんがちょっと思いつきません。(WebDAVの機能を利用すればできるかもしれませんが、各クライアントに設定が必要になることと、共有リソースは設計要素のため、編集には設計者権限以上が必要となってしまうことから現実的ではないと思います)

どのような要件から、Notes DB上にExcelファイルを共有し、そちらに直接書き込みをしたいのか、ということにもよりますが、対応としては以下の方法が考えられるかと思います。

1. Excelファイルについては、ファイルサーバーで共有する
2. Excelファイルは特定のNotes文書に添付して管理し、書き出し時には一旦ダウンロードして添付しなおすという運用にする
3. (Notes DB内の情報だけでExcelファイルが作成できる場合、)既存のファイルに書き出すのではなく、新規にExcelファイルを作成するロジックを組む
    • good
    • 0
この回答へのお礼

gexさん

回答ありがとうございました!!
無事に、ファイル読み込み→編集→出力 を行うことができました!
本当に助かりました!
ありがとうございます。

ファイルの保持についてですが、
ご指摘のとおり共有フォルダにファイルを保存することにします!

丁寧な説明、有難うございました!

お礼日時:2009/07/30 10:44

続いて、パスの指定方法について。



「共有リソース」といっているのは、エクスプローラーでマイコンピューターの直下にある「共有ドキュメント」(私の環境はWindows XPです)のことでしょうか?

それであれば、以下のように絶対パスを指定するのもありかもしれません。

FileName = "C:\Documents and Settings\All Users\Documents\sample.xls"

また、頻繁に更新ファイル先を変える場合には、以下のように都度Fileパスとシート名をセットさせるのも手かもしれません。

Dim filenames As Variant'ファイルパス&ファイル名
Dim sheetName As String'シート名
Dim objXL As Variant'エクセル・ファイル
Dim xlWorksheet As Variant'エクセル・シート

Dim ws As New NotesUIWorkspace

'ファイルの指定
filenames = ws.OpenFileDialog( False, "上書きするファイルを選択してください",, )

If Not( Isarray( filenames ) ) Then
Msgbox "処理を終了します"
Exit Sub
End If

'シート名の指定
sheetName = Inputbox$("読み込みを実施するシート名を入力ください")

'エクセルファイルの読み込み処理
Set objXL = getObject( filenames(0) )
'シートの読み込み処理
Set xlWorkSheet = objXL.WorkSheets( sheetName )
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます!

とても丁寧な説明で助かります^^
早速明日試してみたいと思います!

共有リソースの話なのですが、マイドキュメント直下の共有フォルダのことではなく、NotesDB内に存在する共有リソースというものです。

Notes Designerで、作成中のDBの項目画面(ページやフォームなどが表示されているところ)に、共有リソース→(画像 or ファイル etc..)
と設定できる箇所があり、共有リソースに1回データを取り込むと
DB内のいたるところに活用でき、例えば画像ファイルを共有リソースに取り込んで、ページの2箇所にその画像を挿入したとします。
画像自体を修正し更新すると、ページ内に挿入されている画像も全て自動的に更新されるというものです。

今作っているDBはローカルで作っていますが、いずれサーバーにUPするので、マイドキュメントのファイルを参照している現在の形ではなく
DB自体にファイルを保存させ、マイドキュメントにファイルを保持していなくてもデータの出力が行えるようにしたいと考えています。

てっきり、共有リソースというのが,DBが保持するデータの集まりなのかと思っていました。

方法は何でもいいのですが、上記に書いたように、DB自体に元となるEXCELファイルを保持させ
それを参照してきて、データを追加していき、ファイルを出力する。ということがやりたいので、そのためのEXCELファイルの保持方法、参照方法がもし解れば教えて頂けると嬉しいです。

お礼日時:2009/07/29 22:01

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

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

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

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

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

QEXCELファイルをロータスノーツのデータベースに流し込めますか

EXCELファイルの表をロータスノーツのデータベースに流し込む、というのはできるでしょうか。
「流し込む」というのは、ファイル読込等の一括した方法で、ということです。
できそうな気がするのですが教えて下さい。

Aベストアンサー

再び登場しました。

基本的な詳しい流れは、R4.6で以下の通りです。

0.まず、Excelの表ををカンマで区切ったテキスト形式で保存し、
  列に対するフィールドとの対応の説明ファイル(拡張子 .COL)を作成します。
(通称.COLファイル)
1.データベース開いて、ソースデータを呼び出すビューを開きます。
  文章(Form)に流し込みたいフィールドが全部記述されているビューにします。
2.[ファイル - 呼び出し] を選択する。
3.[Tabular Text] を選択する。
4.ソースファイルの名前を選択する。
5.[呼び出し] をクリックします。
6.呼び出されたソースデータに適用するフォームを [使用フォーム] リストから選択する。
7.ヘッダ、フッダがある場合は、[ヘッダー行数] または [フッター行数] を選択する。
  (要するに注釈行のことです)
8.ソースファイルに [1ページの行数] の数値を入力する。
9.[形式:] リストは [主要文書] が選択された状態にしておく。
10.[形式ファイルの使用] を選択し、列の説明ファイル(.COL)を選択する。
11.[OK] をクリックします。

となります。
.COLファイルの作り方などはHelp Fileに書いてあります。
Help Fileは、
「ノーツの基本」から、「データベースの開発及び管理」の下にある、「ビューへ呼び出す/ビューから書き出す」の項目を探してみて下さい。
その中に、「表形式テキストをビューへ呼び出す」「列の説明(COL)ファイルを作成する」等の項目があると思います。

バージョンが違うとまたちょっと違うかもしれませんが、多分似たようなものがあるはずです。

では。

再び登場しました。

基本的な詳しい流れは、R4.6で以下の通りです。

0.まず、Excelの表ををカンマで区切ったテキスト形式で保存し、
  列に対するフィールドとの対応の説明ファイル(拡張子 .COL)を作成します。
(通称.COLファイル)
1.データベース開いて、ソースデータを呼び出すビューを開きます。
  文章(Form)に流し込みたいフィールドが全部記述されているビューにします。
2.[ファイル - 呼び出し] を選択する。
3.[Tabular Text] を選択する。
4.ソースファイルの名前を選択...続きを読む

Q【Notes】CSVファイルを取り込むエージェントの作成について

新規のデータベースを作成しているのですが、CSV形式のファイルを取り込んで、1行で1文書の各フィールドを埋めることができるようなエージェントを作成したいと思っています。

・・・が、スクリプト初心者のため、うまくいかず、既存のものを加工する形で使用したいと思っています。
IBMが提供する標準テンプレートの中で、そのようなエージェントを持っていないものでしょうか・・・?

ご存知の方がいらしたら教えてください。
ちなみにNotesのバージョンはR6.5.3です。

Aベストアンサー

こちらのサンプルを参考にしてみてはどうでしょう?

http://www.aitjapan.com/ndr.html

「Outlook Expressのアドレス帳を個人アドレス帳にインポート」が
CSVファイルから個人アドレス帳にインポートするスクリプトです。

CSVだと区切りのコンマ「,」と文字列のダブルクォーテーション「"」の処理がミソですね。
文字列が「"」で囲まれている場合、その中に「,」が含まれている可能性が有りますが、
それを考慮しなくても良いのであれば、a = split(xxx, ",")という風に簡単にコンマで区切ることができます。
この場合、存在するだけa(n)に配列として格納されますので順次取り出すだけです。

Qノーツのビュー、@If(Status=の式を修正したいです

ノーツのビュー、@If(Status=の式を修正したいです

こんにちは。
とても初歩的なことだと思うので恥ずかしいのですが、一人ではなかなかうまく解決できず、ここで質問させていただきます。
よろしくお願いいたします。

■申請書のフォームに、フィールドを作成しました。
【date】(承認日)
【OverdueDate】(承認日の6ヵ月後)
【Status】(一時保存、申請中、承認済み)

■ビューには、Statusが『申請中』、『承認済み』だけを表示させています。

■『承認済み』の文書のなかで、承認日から6ヶ月経過したものに"●"印をつけたいのです。

それで、ビューの列に、こんな↓関数を書きました。
@If(Status="承認済み"&date<Overdue;"●";"")

『承認済み』の文書すべてに、"●"印がついてしまいます。
不等号の向きを変えると、『申請中』の文書に"●"印がついてしまいます。

文書が承認された日から6ヶ月経過した文書だけに、"●"印をつけるには、どこを修正したらよいか、教えていただけないでしょうか。
よろしくお願いいたします。

ノーツのビュー、@If(Status=の式を修正したいです

こんにちは。
とても初歩的なことだと思うので恥ずかしいのですが、一人ではなかなかうまく解決できず、ここで質問させていただきます。
よろしくお願いいたします。

■申請書のフォームに、フィールドを作成しました。
【date】(承認日)
【OverdueDate】(承認日の6ヵ月後)
【Status】(一時保存、申請中、承認済み)

■ビューには、Statusが『申請中』、『承認済み』だけを表示させています。

■『承認済み』の文書のなかで、承認日から6ヶ月経過したも...続きを読む

Aベストアンサー

どのようなエラーかわかりませんが、タイプが一致していないのではないでしょうか?
比較は文字列と文字列、数値と数値、日付と日付というように合わせる必要があります。

例えば、Dateが文字列なら、以下の要領で。

@ToTime(Date)<@Adjust(@Today;0;-6;0;0;0;0)

Qノーツで、ナビゲータから、フォームを開きたいのです

こんにちは。

ノーツ歴4ヶ月の者です。過去に近い質問が見つからなかったので、質問させていただきます。

ノーツで、部署内の掲示板を作成しています。
とてもシンプルで、部署メンバー全員が投稿できます。

メインナビゲータには、ボタンがあり、
●投稿者別
●日付別
●トピック別
です。
が、もうひとつ、投稿者が入力フォームを開くボタンを作りたいのです。
ボタンとフォームをどうやってつなげたら良いか教えてください。

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

Aベストアンサー

単に入力フォームを開くのであれば、ボタンに以下のようなコマンド式を設定すれば良いです。

@PostedCommand([Compose];"フォーム名")

もし、フレームセットを使用している場合は、上記の式の前に以下のようにフレームを指定する式を入れます。

@SetTargetFrame("フレーム名");

QLotusScript メール作成方法が解りません

lotus script言語で、メールを作成し送信する方法は解るのですが、
送信せず、作成したメールの内容で、メーラーの新規メール作成画面を立ち上げる方法がわかりません。

スクリプト(抜粋)
Set maildoc = db.CreateDocument 'maildoc
Call maildoc.ReplaceItemValue("Form","Memo")
Call maildoc.ReplaceItemValue("SendTo",uidoc.FieldGetText("mail"))
maildoc.CopyTo = uidoc.FieldGetText("itsupport")
Call maildoc.ReplaceItemValue("Subject","テスト")
Set mailritem = New NotesRichTextItem(maildoc,"Body") 'mailritemをBodyとして定義
Call mailritem.AppendText("【テスト】")
Call mailritem.AddNewline(2)
Call mailritem.AppendText("テスト")
Call mailritem.AppendDocLink(uidoc.Document,"")

Call maildoc.Send(False) 'メールを送信する

こんな感じで、普通にメール作成して最後に送信してます。
ここで、最後に送信はせず、このメール内容で新規メール作成画面を立ち上げたいです。

これはボタン内で作成しており、他にも機能をつけてるので、@関数で全体を書き直すことができません。 この新規メール作成の部分だけ@関数使う形なら問題ないのですが、

方法を教えていただけますでしょうか。

lotus script言語で、メールを作成し送信する方法は解るのですが、
送信せず、作成したメールの内容で、メーラーの新規メール作成画面を立ち上げる方法がわかりません。

スクリプト(抜粋)
Set maildoc = db.CreateDocument 'maildoc
Call maildoc.ReplaceItemValue("Form","Memo")
Call maildoc.ReplaceItemValue("SendTo",uidoc.FieldGetText("mail"))
maildoc.CopyTo = uidoc.FieldGetText("itsupport")
Call maildoc.ReplaceItemValue("Subject","テスト")
Set mailritem = New NotesRichTextItem(m...続きを読む

Aベストアンサー

仕様がいまいちわからないのでなんとも言えませんが
多分こんなことがしたいんだろうなぁというソースを書いておきます。

Dim session As New NotesSession
Dim db As NotesDatabase
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim maildb As New NotesDatabase("","")
Call maildb.OpenMail
Set uidoc=ws.CurrentDocument

Set doc = maildb.CreateDocument
Call doc.ReplaceItemValue("Form","Memo")
Call doc.ReplaceItemValue("Subject","テスト")

Set rtitem = New NotesRichTextItem(doc,"Body")
Call rtitem.AppendText("【テスト】")
Call rtitem.AddNewline(2)
Call rtitem.AppendText("テスト")
Call rtitem.AppendDocLink(uidoc.document,"")
Call doc.Save( False, False)
Call ws.EditDocument(True,doc)

ローカルでメールファイルの設定とかきちんとしてあれば
ご自身のメールボックスが開きます
(一部未提示の仕様SendToの指定とか・・・は実装していません)

仕様がいまいちわからないのでなんとも言えませんが
多分こんなことがしたいんだろうなぁというソースを書いておきます。

Dim session As New NotesSession
Dim db As NotesDatabase
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim maildb As New NotesDatabase("","")
Call maildb.OpenMail
Set uidoc=ws.CurrentDocument

Set doc = maildb.CreateDocument
Call doc.ReplaceItemValue("Form","Memo")
Call doc.ReplaceItemValue...続きを読む

Q【ノーツ】添付ファイル保存【ver6.5】  

仕事上、良くノーツを利用します。
利用することで最も多いのが
添付ファイルの保存です。

件名のフォルダを指定フォルダ上に作成し、
選択した添付付きメールの添付ファイルを保存したいと思っています。

自動で、指定フォルダ (例)C:\TEMPFILE_DATA
に件名のフォルダを作り (例)C:\TEMPFILE_DATA\ご案内
そこに、添付ファイルを保存したいです。(例)C:\TEMPFILE_DATA\ご案内\2013年11月の予定.pdf

複数メールを選択し、実行したら
その分のメールのタイトル(件名)のフォルダを作成し、
添付ファイルを保存したいです。

そのようなことは可能でしょうか?

Aベストアンサー

>複数メールを選択し、実行したらその分のメールのタイトル(件名)のフォルダを作成し、添付ファイルを保存したいです。
>そのようなことは可能でしょうか?

可能かどうかというのであれば、可能ではあります。
ただし、ノーツのデザイナーを利用して、プログラミングする必要があります。
また、プログラミングには、Lotus Scriptを記述する必要があります。

もし、ノーツのプログラミングができないのなら、手間がかかりますが、対象の文書を開いて、添付ファイルにマウスを合わせ、保存を実行するしかないです。


ノーツのデザイナーが使えて、Lotus Scriptの理解があるとします。
添付ファイルを保存するには、Lotus Script の Call notesEmbeddedObject.ExtractFile( path$ ) を利用します。

ビュー画面の設計で、以下のようなスクリプトを作成します。
選択された文書の中に添付ファイルがあるかチェックします。(EMBED_ATTACHMENT )
添付ファイルを指定のフォルダーにコピーします。(ExtractFile( path$ ) )
選択した全文書のチェックが終わるまでループします。

プログラミングの書き方は、"lotusscript 添付ファイル 保存"で検索すれば、参考プログラムの紹介があります。

>複数メールを選択し、実行したらその分のメールのタイトル(件名)のフォルダを作成し、添付ファイルを保存したいです。
>そのようなことは可能でしょうか?

可能かどうかというのであれば、可能ではあります。
ただし、ノーツのデザイナーを利用して、プログラミングする必要があります。
また、プログラミングには、Lotus Scriptを記述する必要があります。

もし、ノーツのプログラミングができないのなら、手間がかかりますが、対象の文書を開いて、添付ファイルにマウスを合わせ、保存を実行するしかな...続きを読む

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

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

Aベストアンサー

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

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

QEXCELの表をNotesメール本文に貼り付けたい

過去の質問で、同じようなものがあったのでその通りにしてみたのですが、うまくいきません。
excel2003作成の表の一部をメールの本文に表がずれないように貼りつけたいのです。
解決策として、
1.[ファイル] メニューの [送信] をポイントし、[メールの宛先] をクリックします。

2.ブック全体または現在のシートのどちらを送信するかを確認するメッセージが表示されたら、[メッセージ本文として現在のシートだけを送信] をクリックします。

と説明があるのですが、2の選択ができません。
1の時点で、、[メールの宛先(校閲用)]か、、[メールの宛先(添付ファイル)]を選択させられます。

Lotus Notes6.5を使用しています。

どうぞ宜しくお願いします。

Aベストアンサー

シート=表計算ソフトのエクセルで使う縦の「列」、横の「行」という形でマス目の入った計算表が「シート」。表計算ソフト一般では「ワークシート」と呼ばれることが多い。あるいは表計算、一覧表という意味から「テーブル」ということもある。また複数のシートを1つのファイルとしてまとめたものが「ブック」。ファイル=File。

QLotus Notes 6.5 @prompt[yesno]の使用方法について

WindowsXP上で、Lotus Notes 6.5を使用しており、Notesメール上に@関数式を使用して自動回答ボタンを作成しようと思っています。

ボタンクリック→yesnoダイアログボックス表示→yesの場合には管理者へメール送信、noの場合にはキャンセル
という形にしようと思っており、Helpを見たところ、yesの場合に1が返され、noの場合0が返されるとありますが、この返された数値はどのように拾えば(?)よろしいでしょうか。

たとえば非常に拙い例ですが
1行目 question:= @prompt([yesno];"回答";"よろしいですか?")
2行目 @if(question:=0 ; キャンセルしたときの命令; 実行するときの命令)
とした場合、yesでもnoでもキャンセルが実行されます。
(そもそもExcel関数のifと同じ様に使っている@if文がおかしいのかもしれませんが…。)

どのようにしたらyesだとこれ、noだとこれといった判断をつけさせるかを教えていただければ幸いです。よろしくお願いします。

WindowsXP上で、Lotus Notes 6.5を使用しており、Notesメール上に@関数式を使用して自動回答ボタンを作成しようと思っています。

ボタンクリック→yesnoダイアログボックス表示→yesの場合には管理者へメール送信、noの場合にはキャンセル
という形にしようと思っており、Helpを見たところ、yesの場合に1が返され、noの場合0が返されるとありますが、この返された数値はどのように拾えば(?)よろしいでしょうか。

たとえば非常に拙い例ですが
1行目 question:= @prompt([yesno];"回答";"よろしいです...続きを読む

Aベストアンサー

einsiedlerさんは、ほぼ正解に近いところまでいっております。挙げられてた例をもとに回答するのであれば、以下のロジックで目的が達成できると思われます。

1行目 question:= @prompt([yesno];"回答";"よろしいですか?")
2行目 @if(question=0 ; キャンセルしたときの命令; 実行するときの命令)

「:=」は代入のための演算子なので、比較を行う場合には「=」を用います。2行目をさらにシンプルに記載するのであれば、以下の記載でも良いと思います。

@if(question; 実行するときの命令; キャンセルしたときの命令)

QエクセルVBAからNotesでメール送信

一度、知恵袋で質問しましたが、回答に対して聞くことができないので、こちらで質問させて頂きます。

VBAでNotesからメールを送信する際、宛先に複数のアドレスを配列変数で指定すると、
2人目以降にメールが送信されません。

コードの内容はエクセルシートにあるアドレスリストのA列を順に配列にし、
重複しているアドレスを省いて配列変数(adrsarray)を作成し
配列変数に入っている複数の宛先へ、Notesからメールを送信するというものです。

以下、抜粋ですがコードを記します。

Const EMBED_ATTACHMENT As Integer = 1454
Dim nss As Object ' lotus.NOTESSESSION
Dim ndb As Object ' lotus.NOTESDATABASE
Dim ndoc As Object ' lotus.NOTESDOCUMENT
Dim rtitem As Object ' lotus.NOTESRICHTEXTITEM
Dim nemb As Object ' lotus.NOTESEMBEDDEDOBJECT
Dim fname As String
Dim r, lastr, i As Long
Dim tmp
Dim adrsarray, myarray, mydic, myitm, adrs As Variant


'A列のアドレスを配列変数adrsarrayに代入

For r = 2 To lastr
If Cells(r, 1) <> "" Then
If r = 2 Then
adrsarray = Cells(r, 1)
End If

If r > 2 Then
adrsarray = adrsarray & "," & Cells(r, 1)
End If

End If
Next

Set Dic = CreateObject("Scripting.Dictionary")

myarray = Split(adrsarray, ",")
For i = 0 To UBound(myarray)
If Not Dic.Exists(myarray(i)) Then
Dic.Add myarray(i), myarray(i)
End If
Next i

'(1)データの重複した配列を初期化し(2)で再度重複無しの配列を格納
adrsarray = ""

'(2)重複を除いて配列を作成
myitm = Dic.keys
For i = 0 To UBound(myitm)
If adrsarray = "" Then
adrsarray = myitm(i)
Else
adrsarray = adrsarray & "," & myitm(i)
End If
Next

Set Dic = Nothing


Set nss = CreateObject("Notes.NotesSession")
Set ndb = nss.GETDATABASE("", "")
ndb.OpenMail
Set ndoc = ndb.CREATEDOCUMENT()
ndoc.Subject = "データを送ります。"
ndoc.SendTo =Array(adrsarray)

ここで以下のように複数名のアドレスを指定すると
ndoc.SendTo = Array("○○@○○.com","○○@○○.com","○○@○○.com")
一斉送信できることがわかったのですが、
宛先は固定ではない為、Array(adrsarray)のように
取得した複数アドレスを入れたいのですが
私の作成したコードではうまく動作しません。

長々と申し訳ないですが
ndoc.SendTo =array(adrsarray) で送信するにはどうすればよろしいでしょうか。
ご教授よろしく御願い申し上げます。

一度、知恵袋で質問しましたが、回答に対して聞くことができないので、こちらで質問させて頂きます。

VBAでNotesからメールを送信する際、宛先に複数のアドレスを配列変数で指定すると、
2人目以降にメールが送信されません。

コードの内容はエクセルシートにあるアドレスリストのA列を順に配列にし、
重複しているアドレスを省いて配列変数(adrsarray)を作成し
配列変数に入っている複数の宛先へ、Notesからメールを送信するというものです。

以下、抜粋ですがコードを記します。

Const EMBED_ATTACHMENT ...続きを読む

Aベストアンサー

Notes の事はさっぱりわかりませんが、

> ここで以下のように複数名のアドレスを指定すると
> ndoc.SendTo = Array("○○@○○.com","○○@○○.com","○○@○○.com")
> 一斉送信できることがわかったのですが、

という事なので、

> ndoc.SendTo =Array(adrsarray)

ndoc.SendTo = myitm

にすると、どうなりますか。
(myitm 自体は、重複の無いアドレスの配列になっているようですが)



余計なお世話で、気になった箇所を何点か

> Dim r, lastr, i As Long

Long は i だけで、r, lastr は Variant だったと思います。

コード部分は抜粋で、途中提示されていない処理をされているのかもしれませんが
ひと塊の処理と考えた時、以下のような書き方(雰囲気)もあるのかも(【未検証】)
(ndoc.SendTo = myitm で動いたっていう前提があってのものになりますが)

' ・・・・・
' ・・・・・
  Dim Dic As Object
  Dim ndoc As Object
  Dim r As Long, lastr As Long
  Dim adrsarray As Variant
'  Dim adrsstring As String

' ・・・・・
' ・・・・・
  
  Set Dic = CreateObject("Scripting.Dictionary")

  For r = 2 To lastr
    If (Cells(r, 1).Value <> "") Then
      Dic.Item(Cells(r, 1).Value) = Null
    End If
  Next

  If (Dic.Count = 0) Then
    ' アドレスがなかった場合 Exit ? する
    ' ・・・なら、後始末を忘れずに
  End If

  adrsarray = Dic.keys
  Set Dic = Nothing

'  adrsstring = Join(adrsarray, ",") ' カンマ(,)区切りで1つの文字列に
' ・・・・・
' ・・・・・
  ndoc.SendTo = adrsarray
' ・・・・・


Dic.Item(キー) = 値
では、
キーが登録済みなら値を設定
キーが登録されていなかったら、キーを登録してから値を設定
だったと思います。
今回、値は不要と思うので、Null にしてみました

※ Exists & Add との性能比較・・・・は、わかりません

Notes の事はさっぱりわかりませんが、

> ここで以下のように複数名のアドレスを指定すると
> ndoc.SendTo = Array("○○@○○.com","○○@○○.com","○○@○○.com")
> 一斉送信できることがわかったのですが、

という事なので、

> ndoc.SendTo =Array(adrsarray)

ndoc.SendTo = myitm

にすると、どうなりますか。
(myitm 自体は、重複の無いアドレスの配列になっているようですが)



余計なお世話で、気になった箇所を何点か

> Dim r, lastr, i As Long

Long は i だけで、r, lastr は Variant だったと思いま...続きを読む


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

人気Q&Aランキング