Excel97でUserFormを表示して
消すのにUnloadでは消えてくれません

UserForm.show
処理1
処理2
unload UserForm

としているのですが、なぜかUserForm.showで
止まったまま制御が流れません

ちょっと教えていただけるとうれしいです

A 回答 (2件)

>止まったまま制御が流れません。



Excel97ですよね。
Excel97ではUserForm.show でUserFormは常にモーダルで開いています。同じアプリの他に制御を移す場合は、何か応答する必要があります。(Excel2000で変わった?)
シートのメニューから色々なダイアログボックスを開くと、OKやキャンセルを押してダイアログボックスを消さないと次の処理ができないのと同じです。

UserForm.show を Msgbox "メッセージ表示中",vbokonly

と変えてみると何が起きているか分かり易くないですか。入力待ちになってますよね。


色々な対応が可能でしょうが、UserForm_Activateで継続させる例です。(UserFormのコードウインドウ)

Private Sub UserForm_Activate()
  '処理1例
  Worksheets("Sheet1").Range("A1:A3") = "テスト設定1"
  '処理2例
  Worksheets("Sheet1").Range("A5:A8") = "テスト設定2"

  MsgBox "(例)フォームを消しますよ"
  Unload Me 'Me.Hide
  MsgBox "(例)フォームを消しました"
End Sub
    • good
    • 0

unload me


では駄目ですか?
    • good
    • 0

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

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

Qpythonでの実績データの処理プログラムの速度を早くしたいんですが...

pythonで実績データの解析プログラムを作ったんですが処理が遅くてなかなか使い勝手が悪いんです。処理を早くしようと書き直したいんですが、頭が固まっちゃってうまい案が出てこないんです。
csvファイル形式で一行目がカラム名、10列あって2列目に日付[カラム名でymd]で、形式は2007-05-01という感じです。10列目に人数[カラム名amt]があり、来店人数を日別ごとの小計で出したいんです。
日付 小計
日付 小計
  :
こんな感じです。
一応プログラムはこんな感じです。

#!/usr/bin/env python
import time
t1 = time.time()
def readcsv(filename):
L = [line[:-1] for line in file(filename).readlines()]
return map((lambda s: s.split(',')), L)
csvlist = readcsv(./csv.csv')
totalamt = {}
for line in csvlist[1:]:
buydict = dict(zip(csvlist[0], line))
if 'ymd' in buydict.keys():
if not buydict['ymd'] in totalamt:
totalamt[buydict['ymd']] = 0
totalamt[buydict['ymd']] += int(buydict['amt'])
for k in sorted(totalamt.keys()):
print '%s , %d' % (k, totalamt[k])
t2 = time.time()
print t2 - t1, 'sec'

結果はちゃんと出るんですが、遅いんです。
処理速度を早くしたいんです。誰かご教授御願いします。

pythonで実績データの解析プログラムを作ったんですが処理が遅くてなかなか使い勝手が悪いんです。処理を早くしようと書き直したいんですが、頭が固まっちゃってうまい案が出てこないんです。
csvファイル形式で一行目がカラム名、10列あって2列目に日付[カラム名でymd]で、形式は2007-05-01という感じです。10列目に人数[カラム名amt]があり、来店人数を日別ごとの小計で出したいんです。
日付 小計
日付 小計
  :
こんな感じです。
一応プログラムはこんな感じです。

#!/usr/bin/env python
impo...続きを読む

Aベストアンサー

http://okwave.jp/qa5421190.html
と同じ内容で、違うIDなのはなぜなんでしょうか?

遅いから早くしたいということですが、どのくらいのデータを食わせて
現状どのくらいの時間がかかり、それをどのくらい改良したいのでしょうか?

以前 C/C++ カテゴリにあったものから判断して

import random
def make_record(y, m, d):
__return ",".join([str(x) for x in ((random.randint(20,30)),
____________________________________"%4d-%02d-%02d" % (y, m, d),
____________________________________random.randint(1, 3),
____________________________________random.randint(0, 99),
____________________________________"%03d" % random.randint(11, 18),
____________________________________random.randint(100, 999))])

print "shop,ymd,gend,age,area,amt"
for y in range(2008,2009):
__for m in range(1, 13):
______for d in range(1, 31):
__________for i in range(0, 1000):
______________print make_record(y, m, d)

こんなんで適当にデータをでっち上げて試してみましたが

#!/usr/bin/env python
import sys
import time
t1 = time.time()

def readcsv(filename):
__L = [line[:-1] for line in file(filename).readlines()]
__return map((lambda s: s.split(',')), L)


csvlist = readcsv('./csv.csv')
totalamt = {}

currentmonth = ""
subtotal = 0

t2 = time.time()
print >>sys.stderr, t2 - t1, 'sec'

#sys.exit()
for line in csvlist[1:]:
__#1
__#buydict = dict(zip(csvlist[0], line))
__#if 'ymd' in buydict.keys():
__#____if not buydict['ymd'] in totalamt:
__#________totalamt[buydict['ymd']] = 0
__#____totalamt[buydict['ymd']] += int(buydict['amt'])
__#2
__#if not line[1] in totalamt:
__#____totalamt[line[1]] = 0
__#totalamt[line[1]] += int(line[-1])
__#3
__if currentmonth <> line[1]:
______if currentmonth <> "":
__________print '%s , %d' % (currentmonth, subtotal)
______currentmonth = line[1]
______subtotal = 0
__subtotal += int(line[-1])

#3 の場合のみ不要
#for k in sorted(totalamt.keys()):
#____print '%s , %d' % (k, totalamt[k])

で10メガバイト前後のデータを処理させてみたところ

パターン1
1.71900010109 sec
6.17199993134 sec

1.71799993515 sec
6.17199993134 sec

1.71900010109 sec
6.18800020218 sec

パターン2
1.7349998951 sec
2.82799983025 sec

1.71899986267 sec
2.79699993134 sec

1.70300006866 sec
2.79699993134 sec

パターン3
1.71899986267 sec
2.64100003242 sec

1.70299983025 sec
2.625 sec

1.70300006866 sec
2.625 sec

こんな感じでした。
いずれにしても情報が少なすぎですね。

http://okwave.jp/qa5421190.html
と同じ内容で、違うIDなのはなぜなんでしょうか?

遅いから早くしたいということですが、どのくらいのデータを食わせて
現状どのくらいの時間がかかり、それをどのくらい改良したいのでしょうか?

以前 C/C++ カテゴリにあったものから判断して

import random
def make_record(y, m, d):
__return ",".join([str(x) for x in ((random.randint(20,30)),
____________________________________"%4d-%02d-%02d" % (y, m, d),
____________________________________ran...続きを読む

Q三菱シーケンサで時計制御(時間制御)

三菱電機のFX2Nで、メモリバックアップ電池切れ警報(M8006)を検知後、24時間以上経過すると、動作を停止するシーケンスを組みたいです。
具体的に、タイマ、時計等をどのようにすればよいのか教えてください。
電池交換を促すのが目的です。(M8006)を検知後シーケンサの電源OFF/ONいずれの場合でも成立するようにする必要があります。

Aベストアンサー

特殊データレジスタ
リアルタイムクロック
D 8013~D 8019の内容をM8006のONエッジで記憶させる

----|M8006|--------------------[PLS M0 ]

----|M0|-----------------------[TRD D0 ]時計データ読出



後は
http://wwwf2.mitsubishielectric.co.jp/melfansweb/plc_fx/index.html
FX1S/FX1N/FX2N/FX1NC/FX2NCシリーズ プログラミングマニュアル
JY992D62001 Ver. Q
364/580ページ
6-17.FNC160~FNC169 「時計演算」

のページを百回ほど暗誦出来るまで読み返して下さい



ただ、何で24時間?
日付比較だけじゃあいけないの?

Qモデル予測制御の簡単な使用方法、簡単な回路の制御

matlabのmodel predictive control toolbox を用いて研究を行っている者ですが・・・ 実際に簡単な回路を組んでシミュレーションを行ってみました。Mファイルは以下のようになってます。
--------Mファイル----------
A=2;
B=1;
C=1;
D=0;
sys=ss(A,B,C,D);
x0=0;

Ts=.1;

model=c2d(ss(A,B,C,D),Ts);
mpciti=mpc(model,Ts,10,1);
--------End-----------

回路図はここには載せれないみたいなので載せてませんが、上のMファイルからわかるように非常に簡単な回路です。 出力の指令値を2とし、あとはMPC Controller をモデルに繋げただけの回路となっております。
 一応制御できることはできたのですが、1ステップごとに行われている計算が全く理解できておりません。誰か分かる方がいましたら、是非詳しく教えてください。よろしくおねがいします。

matlabのmodel predictive control toolbox を用いて研究を行っている者ですが・・・ 実際に簡単な回路を組んでシミュレーションを行ってみました。Mファイルは以下のようになってます。
--------Mファイル----------
A=2;
B=1;
C=1;
D=0;
sys=ss(A,B,C,D);
x0=0;

Ts=.1;

model=c2d(ss(A,B,C,D),Ts);
mpciti=mpc(model,Ts,10,1);
--------End-----------

回路図はここには載せれないみたいなので載せてませんが、上のMファイルからわかるように非常に簡単な回路です。 出力の指令値を...続きを読む

Aベストアンサー

えーと、そのスクリプトだと、ほんとにモデルを作ってるだけなんですが、具体的にどこが分からないんでしょうかね。
やってることは、単純なよくある線形システムを作って、それを離散化した、ってだけみたいですが。

matlabの話ではなくて、制御の話自体が知りたいということであれば、「現代制御理論」とかそんな感じの教科書を読まれるといいと思います。
http://ja.wikipedia.org/wiki/%E7%B7%9A%E5%BD%A2%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%AB%96
http://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E7%90%86%E8%AB%96

Q制御工学を用いないで制御する方法を教えてください

制御工学は、全く意味がなく、
顧客をだます為のものだそうです。

私は、温調とかステージ制御とかのプログラミングをし、
顧客に提供してきました。
その際PID制御など、制御工学の成果を利用してきました。

こんなのは無意味だったんですね。

では、皆さんは、制御工学を使わず、
どのように温度制御やモーター制御をしていますか?

大至急勉強しなおしたいので
宜しくお願いします。

Aベストアンサー

そもそもの前提として「制御工学」の定義がない。
提示URLを読んでも、その定義がないから話が両極端になっている。

>では、皆さんは、制御工学を使わず、
>どのように温度制御やモーター制御をしていますか?
「制御」するためには、「Aを行ったらBという結果になる」という前提があるからこそ制御ができる。
その前提を「工学」としてとらえれば「使ってる」となり、とらえなければ「使っていない」となる。

>こんなのは無意味だったんですね。
と本気で思っているのなら、その分野の業務はやめた方がいいと思う。
そこで学んだことが、全て使えなず経験の一つとしてもとらえられない「時間の無駄」と認識しているのなら。

QVBAでのUSERFORMの表示に関して

現在VBAでUSERFORMを使うプログラムを作成中です。
ボタンやボックスなどを設置してコードを書いてという作業は良いのですが、
このプログラムを実践で使用する時に毎回以下の手順を踏んでいます。

1.該当のエクセルファイルを開く
2,AltとF11を押す
3.左側のVBAプロジェクトからフォームの中の使用したいフォームをクリック
4.F5をクリック


ここまでしてやっと作成したプログラムを走らせる事ができますが、
毎回毎回上記の1から4の作業が必要な訳ではないですよね?

エクセルファイルを開いた瞬間に希望するフォームが出て、
すぐに作業を実行するにはどうしたらよいのでしょうか?

Aベストアンサー

ThisWorkbookに
Private Sub Workbook_Open()
UserForm1.Show
End Sub
のように記述すればいいと思います。


このカテゴリの人気Q&Aランキング

おすすめ情報