• 締切済み

WHSとEXCELの連携について教えて下さい

EXCELで、 (1) Public で変数を宣言 Public strA as String (2)標準モジュールで、そのBOOKのデータをいろいろ編集し、(1)の[strA] 変数に入れています test() (3)WHSで、(2)を呼出しています ExcelApp.Run( "Test.xls!Module1.test" ); ここまでは、できていいるのですが... WHSで(1)の[strA] 変数の値を取得する事はできるのでしょうか? 何か方法があれば教えて下さい PS. なぜこのような事をするかというと、 EXCELでは(2)test() 終了後、(1)の[strA] 変数の値を別シートに吐き出しています それとは別に、WEBシステムからも、(1)の[strA] 変数の値をWEB上に載せたいのです JAVASCRIPTでガリガリデータ編集する事もできますが、 せっかく(2)のモジュールがあるので、それが利用できないかと考えています ご教授、宜しくお願いします

みんなの回答

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.4

「JAVASCRIPTでガリガリデータ編集する事もできます」とか「WEBシステムから」とお書きなのですが、そもそもどのような場面で、その システム をお使いなのでしょうか?  例えば、aqua_kaiji さんご自身だけが、業務上使用される システム なのか、あるいは、複数の クライアント(?) が、とある WEbページ に アクセス して、そこに配置された ボタン でも クリック すると、「(3)WHS」によって「(2)を呼出」すみたいなことでしょうか?  少なくとも、「Excel VBA」・「WSH」・「JavaScript」の3つの プログラム をお使いのようですが、もう少し操作内容を整理なさって、(折角、利用されているのであれば)「Excel VBA」で殆どの作業をされてはいかがでしょうか?  例えば、「Excel VBA」から「CreateObject("InternetExplorer.Application")」によって、「WEBシステム」の フォーム などに「値」を書き込むとか、あるいは、「CreateObject("Scripting.FileSystemObject")」によって、別途、txtファイル に「値」を書き込み、その値を「WSH」から取得するとか。。。  問題なのは、「変数の値をWEB上に載せ」る方法論かと存じますが、それは、「WEBシステム」を使われるのが aqua_kaiji さんだけなのか、それとも複数の ユーザー なのかによっても変わりますし、また、aqua_kaiji さんが変更できる(資格/スキルがある)のが「WEBシステム」なのか「Excel VBA」なのかによっても話が変わろうかと存じます(今のご質問のままでは回答者が、自身の スキル と相談しようがありません)。

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.3

No2ですが、ライセンス的には禁止されていますが、それは、ターミナルサービスや、クラウドなどエクセルを商用的に、個人、法人にサービスを提供する事を禁止しています。あくまでシステムの一部として使用されている場合のみ、条件付でエクセルから出力されるデーターのみの使用です。エクセルそのものを使う事は昔から禁止されています。 ほんまかいな????

aqua_kaiji
質問者

お礼

いろいろ教えて頂きありがとうございました 勉強になりました

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.2

>ライセンス違反になるとしています 本家の公式コメント http://office.microsoft.com/ja-jp/excel-help/HP005256165.aspx (検索の仕方) http://search.yahoo.co.jp/search?b=1&n=10&ei=UTF-8&fr=ie8sc&p=WEb%E4%B8%8A%E3%81%A7MS+Office%E3%82%92%E3%83%87%E3%83%BC%E3%82%BF%E3%83%BC%E3%83%99%E3%83%BC%E3%82%B9%E3%81%A8%E3%81%97%E3%81%A6%E4%BD%BF%E3%81%86 つまり、使用可能です(条件付です)。 >WHSで(1)の[strA] 変数の値を取得する事はできるのでしょうか そもそも、その発想は間違っていると言うより、認識違いです。 エクセルは、COMインターフェースを通じて利用するものであって、 WSH(スペル間違っていましたね) の機能ではありません。なのでCOMが使えるプログラム言語からな、どこからでも呼び出せるわけです。 あなたが問題にしているのは、そのCOMで開いたインスタンスの変数の値が呼び出し元で取得できるか? と言うことだと思いますが、できます。 エクセルなら、いろんなやり方があるかと思います。 例えば、どこかのセルに受けこみ、そのセルの値を取得すればいいし、COMオブジェクトのプロパティーの値やメソッド(クラス定義)を自作して、渡す方法もあります。 誤解してはいけないのは エクセルの変数 strAを呼び出しもとの言語の変数に直接代入する var wshvar = strA ====== Dim wshvar wshvar=strA なんて事はできません。呼び出すのはあくまでCOMオブジェクトなのでエクセルの中で使用しているVBAを呼び出しているわけではありません。 逆に言えば、そのCOMオブジェクトにぶら下がっているオブジェクトなら、ほぼ全てにアクセスできます。もちろんCOM(エクセル)側がCOMの流儀にしたがって公開していれば、と言うことです。 なので、あなたがまず勉強しないといけないのはCOMです。 及び、オブジェクト指向のプログラミングです。 これが分かって初めて、簡単に発想し、できるようになります。 そのためにも、エクセルオブジェクトのモデル構造を理解しましょう。ヘルプに出ています。 理解したら、VBAで(エクセル中で)そのモデルにユーザー定義プロパティなどを追加できるように勉強しましょう。もちろんメソッドでも、オブジェクトでもかまいません。

aqua_kaiji
質問者

お礼

いろいろ教えて頂きありがとうございました 勉強になりました

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

(2)のモジュールはExcel VBAでしょうか。 でしたら、マイクロソフトはWebから不特定多数の人向けにExcelを利用させるようにすることはライセンス違反になるとしています。 また、上記のライセンス問題がなかったとしても、Excelはマルチスレッドセーフティな造りになっていないため、タイミングによっては複数のブックのデータがごちゃ混ぜになるおそれがあります。 さらに、何らかの問題が発生してエラーとなった場合はサーバーにダイアログが表示されるだけでWebからアクセスしている人にはなにもできないしどうなっているかも分かりません。 (前にやった仕事の関連で調査して、そういうことを書いてるページに行き当たったんだけど、どこだったかなぁ) というわけで、回答としては、「JAVASCRIPTでガリガリデータ編集」してください、としかいえません。

aqua_kaiji
質問者

お礼

即回答頂きありがとうございました 勉強になりました

関連するQ&A

  • Access2000:VBAを使用したエクセル操作

    下記のように既存のエクセルファイルにクエリからとってきたデータを挿入したいと考えております。 既存のエクセルファイルを開くことは成功したのですが、ある条件だとシートを追加するという処理(オブジェクト記述)がわかりません。 シート追加、あわせてブック追加方法もお願いします。 Set ExcelApp = CreateObject("Excel.Application") Set Book = ExcelApp.Workbooks.Open("C:\query\module\VBExcel.xls") Set Sheet = Book.Worksheets("test1")←追加したい

  • [ExcelVBA] Module1で定義した変数の(代入した)値を、Module2でも使う方法

    基本中の基本のことで誠に申し訳ございません。 ある標準Moduleで宣言した変数に値を代入します。 その後、別のModuleでその変数を使用しますが、 その変数の中の値が消えてしまいます。 たとえば下記のように、プログラムを書きます。 test1を実行すると、続いてtest2も実行されます。 この場合、変数の値が0になってしまいます。 このような場合どうやったらいいのでしょうか? Hensuu1の値をセルに一度出力させて、 別のModuleで、セルの値をもう一度変数に代入させて使用する という方法で何とかしていたのですが、大変で困っています。 Module1に記載------------ dim Hensuu1 as integer sub test1() Hensuu1 = 100 test2 end sub ------------------------- Module2に記載------------- sub test2 range("A1") = Hensuu1 end sub --------------------------

  • 別スレッド上の変数を参照する方法について

    VB2010で、別スレッドの変数をメインフォームが閉じられた時に 表示するプログラムを書いたのですが、変数の中身が空になってしまいます。 色々試してみたのですが、うまく値を参照できません。 別スレッド上の値をどうやったら参照できるのでしょうか? 以下のような感じで記述したのですが、何か特別な書き方があるのでしょうか? わかりにくい質問ですが、ご回答おねがいします。m(_ _)m 簡単なイメージを書きました。 http://www.progoo.com/rental/img_bbs1/img_data/18133_730_30ba642aac.jpg 'メインフォーム Public Class Form1  '★変数testをpublicで宣言   Public test As String=""  '★ロードしたらBackgroundWorker1を動かす   Private Sub Form1_Load() Handles MyBase.Load     BackgroundWorker1.RunWorkerAsync()   End Sub  '★BackgroundWorker1はModule1.test()を動かしてtestに"成功"の文字列を入れる   Private Sub BackgroundWorker1_DoWork() Handles BackgroundWorker1.DoWork     Module1.test()   End Sub  '★フォームを閉じた時に変数testを表示する   Private Sub Form1_closing() Handles MyBase.FormClosing     MsgBox(test)   End Sub End Class '別モジュール Module Module1   Public Sub test()     Form1.test = "成功"   End Sub End Module

  • AccessからExcelを編集

    Access2003からExcelを編集したいのですが、 いろいろとWebで見ているのですが、よくわかりません。 例えば、 AccessからTEST.xlsのシート「データ」のA10のセルに「てすと」と入れるとします。 最後に上書きします。 申し訳ありませんが、わかる方、教えて下さい。

  • VB.NETからVBAマクロ(引数)を呼び出す方法

      VB.NETから参照型引数付きのFunctionのVBAマクロを呼び出す方法 Excel2003のVBEの標準モジュールModule1にあるFunctionのマクロtest(引数)をVB.NETから呼び出して、引数に設定した値をVBA側で加工して、加工された値をVB.NETで取り出したいのですが、VB.NET側でどのように記述してよいのかがよく分かりません。 具体的には、以下のVBAをVB.NETから呼び出すにはどのように記述すればよいのでしょうか。できましたらそのままVB.NETのConsoleApplicationのModule1のSub Main()の中にコピーペーストして動くコードと参照設定を教えていただけると助かります。 ---Excel2003のVBA(C:\test\Book1.xls)---------- Function test(ByRef data As Long) As Long  If data = 0 Then   test = 0   data = 0  Else   test = 1   data = 100 / data  End If End Function ---------------------------------------------- よろしくお願いします(WindowsXP,VisualStudio2010,Excel2003VBE)  

  • アクセスからエクセルファイルを全て閉じたい

    アクセスからエクセルファイルを全て閉じるにはどうすればいいでしょう?(保存して閉じたいです) エクセルファイルは名前やファイル数はランダムです。 アクセスの標準モジュールに Sub Test1() Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") ExcelApp.Application.Visible = False Set ExcelApp = Nothing End Sub と書きました。 このあいだにコードをいれるのですが 思いつきません。 まず数を取得して 一つ一つ保存→閉じるかな?と思い MsgBox ExcelApp.Worksheet.Count を入れてみましたが エラーになりました。 オフィスのバージョンは2003です。 ご教授よろしくお願い致します。

  • 「Excel」Microsoft Visual Basicで教えてください。

    本で調べてもインターネットでも、 ExcelのMicrosoft Visual Basicで下記の内容の処理がわかりません。 困ってます。 わかる方、教えてください。よろしくお願いします。 <内容> “あああ.xls” [sheet1]にデータがあれば、“かかか.xls” [sheet1]にデータの値をコピーする。 なければ、「データがありません」とメッセージボックスをだしてキャンセル。

  • Word vbaからexcel vbaへ値を渡すことができますか?

    Word vbaからexcel vbaへ値を渡すことができますか? 現在Wordでvbaを組んでいますが、Wordで取得した値をexcel vbaで利用したいのに変数の値がnullになってしまい四苦八苦しています。Application間で値を渡すには何か特別な処理がいるのでしょうか?(参照は設定済みです) やりたい事は、Wordで「ShipTo」文字列をsearch→後ろの番号を変数へ格納→excel vbaを起動→シートの表中からWordで取得した番号を元に文字列を検索しセルに入れる(VLOOKUPを使用)→セルの文字列をWord vbaへ返しWord側で利用、という処理です。excel vbaの起動は以下のように記述しています。 ------------------excelVBAの起動 Sub getExcelTable() Dim xLobj As Object, myObj As Object Set xLobj = CreateObject("excel.application") xLobj.Visible = True Set myObj = xLobj: workbooks.Open (ThisDocument.Path & "\sample.xls") myObj.Run ("'sample.xls'!getStr") MsgBox strA ←これがでない MsgBox strB ←これがでない Set xLobj = Nothing End Sub -----------------excel vbaのコード Option Explicit Dim endRow As Integer, ShipTo As Variant Dim strA As Variant, strB As Variant Sub getStr() endRow = Range("a65536").End(xlUp).Row MsgBox ShipTo ←これがでない Cells(endRow + 2, 1).Select Selection.Value = "=VLOOKUP(" & ShipTo & ",$A$1:$T$" & endRow & ",3,0)" strA = ActiveCell.Text Cells(endRow + 2, 2).Select Selection.Value = "=VLOOKUP(" & ShipTo & ",$A$1:$T$" & endRow & ",13,0)" strB = ActiveCell.Text End Sub Word vbaからexcel vbaは起動します。Word側、excel側で使う関数はグローバル変数にし、variant型にしてみましたが値がわたりません(Wordでは取得できています)。Application間で値を渡す方法、もしくは根本的にもっとうまい方法があればご教示ください! WinXP、Office2003を使用です。

  • AccessVBAから、Excelシート内の列の書式設定がしたい!!

    とうとう朝になってしまいました。 もう丸2日間も悩んでいます。 どなたか解決方法をご存知の方、よろしくお願いいたします。 AccessVBA内のモジュールからExcelファイルを開いて、そこへデータを出力するという処理は動きます。 そこで、出力する前に、Excelのセルの書式設定を列毎にしようとしていますが、どうしても上手くいきません。 下記のような感じでは、使えないのでしょうか? Set xls = GetObject("c:AAA\TEST.xls") xls.Application.Windows(1).Visible = True xls.Application.worksheets("sheet1").Activate xls.Application.worksheets("sheet1").RANGE("A:A").Selection.NumberFormatLocal = "\#,##0;\-#,##0" なにか良い方法がありましたら教えてください!! よろしくお願い致します。

  • メインルーチンの変数をモジュールに渡す

    Perlの勉強をし始めの者なんで、恥ずかしい質問ですけど・・・ モジュールの使い方です。 以下のプログラムではTest_module.pmで定義した変数$testをメインルーチンでprintしています。 ***** メインルーチン *****  #perl /usr/bin/perl  use Test_module;  our $test=10;  print $Test_module::test; ***** Test_module.pm *****  package Test_module;  our $test=10;  1; これはちゃんと動いています。 ところが逆にメインルーチンで定義した変数$testをTest_module.pmに渡そうとすると、うまくいきません。 以下のプログラムをどう直せばいいのでしょうか。 ***** メインルーチン *****  #perl /usr/bin/perl  use Test_module;  our $test=10;  &Test_module::print_test(); ***** Test_module.pm *****  package Test_module;  sub print_test {  print $Main::test;  }  1;

    • ベストアンサー
    • Perl