VBプログラマ質問スレ(6.0以前) Part44

このエントリーをはてなブックマークに追加
952951:2005/12/06(火) 15:13:57
書き忘れたので追記・・・

OSはWinXPPro
VB6+SP6です。どうぞよろしくお願いします(´・ω・)
953デフォルトの名無しさん:2005/12/06(火) 15:29:35
がんばって下さい。
954デフォルトの名無しさん:2005/12/06(火) 15:53:29
OptionExplicitを宣言して、コンパイルエラーで潰すのが一番確実で正しいと思うが。
修正量なんて知らないほうが良いんじゃないの?w
全ロジック見直しですっていって工数見積もれば。
955デフォルトの名無しさん:2005/12/06(火) 18:29:36
今、VB6.0でエクセルの帳票を作っているのですが、
コードが変わることによりブレイクして地域名が変わり
改ページの処理をするようにしなくてはいけないんですけれど、
方法がわかりません。

地域名  福岡
---------------------------------------
コード  地域名
---------------------------------------
0041   福岡


(現状)コードが42になったらブレイクして佐賀に変わる
改ページの処理がわかりません。

地域名  福岡
---------------------------------------
コード  地域名
---------------------------------------
0041   福岡
0042   佐賀


よろしくお願いします。
956デフォルトの名無しさん:2005/12/06(火) 18:30:25
質問なんですけど、フォームにエクセルのシートを貼り付けて、右クリックのショートカットメニューを消したいんですけど、知ってる人がいたらおしえてください。
957デフォルトの名無しさん:2005/12/06(火) 18:49:50
マルチ帰れ
958デフォルトの名無しさん:2005/12/06(火) 19:15:48
>>951
VB.NETへのマイグレーションツールを使う
ちなみに、関係ないエラーも数万〜数十万件のオーダーででると思うから泣かない様に
959デフォルトの名無しさん:2005/12/07(水) 09:38:59
>>955
EXCELでの改ページの方法がわからないの?
改ページのタイミングを検出する方法がわからないの?
960デフォルトの名無しさん:2005/12/07(水) 09:57:59
Excelでマクロ組む場合の基本。
やりたいことをマクロの記録でVBAに吐かせる。
あとはその選択セルとかを変えるだけ。
961デフォルトの名無しさん:2005/12/07(水) 10:29:02
データコンボコントロールの使い方について教えてください。

Form_loadでDBにコネクションを貼り、unloadで切断するアプリケーションを作っています。
このアプリにADODCとデータコンボコントロールを追加しました。
ADODCの接続文字列にはForm_loadで用いるものと同じものを使っています。
データコンボコントロールはこのADODCをRowSourceとしています。

その結果、動作には問題無いのですがFormの起動がえらくもっさりしてしまいました。
余計なDB接続を作ってしまっただと思います。

Form_loadで生成したコネクションオブジェクトを流用することはできないのでしょうか?
962デフォルトの名無しさん:2005/12/07(水) 10:32:47
質問です。ActiveX DLLを作成しているのですが
'Module1
Public Type TestStruct1'ユーザー定義
strIp As String
strUser As String
strPass As String
End Type
'Class1
Public GetHostInfo(stDisk As String) As TestStruct1
End Function

でコンパイルエラーが出ます。DLLで持つ共通関数の構造体を
外部モジュールから構造体を丸々参照できるようにしたいです
963デフォルトの名無しさん:2005/12/07(水) 10:34:17
>>959
改ページのタイミングを検出する方法がわからないのです。

もし、よろしければご教授ください。
964デフォルトの名無しさん:2005/12/07(水) 11:57:50
965デフォルトの名無しさん:2005/12/07(水) 12:08:23
>>962
Public GetHostInfo(stDisk As String) As TestStruct1

     ↓

Public Function GetHostInfo(stDisk As String) As TestStruct1
966デフォルトの名無しさん:2005/12/07(水) 12:20:14
定数の型指定についてなのですが、
Web上のサンプルを見ると

Private Const HOGE As Long = &H1

と、型を指定している場合と

Private Const HOGE = &H1

と、型を指定していない場合があり、
型を指定しない方が多いように見受けられますが、
逆に変数では型を指定していないものはほとんど見あたりません。
なぜ変数はほとんどの場合型を指定しているのに
定数だと型を指定しないことが多いのですか?
967デフォルトの名無しさん:2005/12/07(水) 12:23:58
>>966
変数で型の指定を省略するとVariantになる。
けれどConstでは定数の値から適当な型を選んでくれるはず。

さらに、たしか昔はConstでは型を指定できなかったような気もする。
968デフォルトの名無しさん:2005/12/07(水) 14:12:22
>>965
すみませんFunction は漏れていたのですがFunction追加しても
改善されないようです。
もし駄目な場合はEXE化してcommand()で引数を渡すよう
思索してるんですが、これまた、引数としては一行の文字列になってまして
この引数をそれぞれの型で個別にやりとりさせる方法ってありますか?
969デフォルトの名無しさん:2005/12/07(水) 14:25:16
>>968
TestStruct1もクラスにしてしまえばどうだ。
もちろんプロパティ使えばTypeと見た目は変わらないように作れるだろ。
970デフォルトの名無しさん:2005/12/07(水) 15:35:26
>>962
Module1に書いてあるものを、Class2に書いて。
Class2はプロパティInstancing=6(GlobalMultiUse)で。
971デフォルトの名無しさん:2005/12/07(水) 16:02:13
テンプレ議論はあだ〜?チンッチンッ☆(AA省略)
972デフォルトの名無しさん:2005/12/07(水) 17:18:31
VBで作ったexeファイルにフォントの埋め込みをしたいと思いますが、ムリでしょうか?
973デフォルトの名無しさん:2005/12/07(水) 20:03:24
>>972
埋め込みって、フォントファイル?文字のBMP?埋め込みってコンパイル時?後から?
974デフォルトの名無しさん:2005/12/07(水) 20:14:38
>>972
可能です。
975デフォルトの名無しさん:2005/12/08(木) 02:44:33
976デフォルトの名無しさん:2005/12/08(木) 03:51:38
>>975
何てことすんねん
977デフォルトの名無しさん:2005/12/08(木) 08:22:32
VB6.0にてスプレッドの項目をクリップボードに
コピーしたんですが2000行(68列)のデータが
コピーされず100行の絞込みを行った場合
コピーされたので、何かいい解決方法はないでしょうか?
978デフォルトの名無しさん:2005/12/08(木) 09:41:37
>>977
質問文を書き直す。
979デフォルトの名無しさん:2005/12/08(木) 10:01:44
>>978 質問わかりにくくてすいません。
環境VB6.0
スプレッドにてデータを表示
データレコード数2000件
行数68
列数2000
以上データをClipboard.SetText (.Clip)
にてクリップボードに出力したが出来ませんでした。
データ量を減らすと出来るのですが・・・
行数68
列数100
でクリップボードに出力が成功しています。
980デフォルトの名無しさん:2005/12/08(木) 12:00:24
Excel VBA でMSCommを使おうとしていますが、
On_commイベントでの受信ができません。
Windows XP Pro SP2, Excel 2003 SP1, VBA(VB6.0相当?)
PC: Excel使用, 外部装置:何か来ると、ステータスを返す

以下のプロシージャで"hoge"が送れました。
Private Sub Command1_Click()
Set mscomm1 = CreateObject("MSCOMMLib.MSComm.1")
mscomm1.CommPort = 1
mscomm1.Settings = "9600,N,8,1"
mscomm1.PortOpen = True
mscomm1.Output = "hoge"
mscomm1.PortOpen = False
End Sub
外部装置からステータスが返ってきますが、下のイベントは発生しません。
Sub MSComm1_OnComm()
MsgBox "fuga"
End Sub
Comman1_Click() 内で Wait を使うと拾えます。
If Application.Wait(Now + TimeValue("0:00:1")) Then
data = mscomm1.Input
End If
アドバイスお願いします。
981デフォルトの名無しさん:2005/12/08(木) 12:33:52
>>980
mscomm1のクラスオブジェクト変数のスコープの問題とか?
982962:2005/12/08(木) 14:40:21
みなさんありがとうございました。色々ご教授いただいた方法を
試みまして、クラスにプロパティを作りました。たすかりました
983デフォルトの名無しさん:2005/12/08(木) 14:57:07
>>980
WithEvents 付けてる?
984デフォルトの名無しさん:2005/12/08(木) 15:15:07
>>981, 983
レスありがとうございます。
今まで、クラスモジュールを使ったことがなく、
今回のようなケースで使うのかと初めて知りました。

[ツール]-[参照設定] Microsoft Comm Control 6.0 にチェック
クラスモジュール(Class1)
-------------------------------------------
Public WithEvents mscm As MSCommLib.mscomm

Private Sub mscm_OnComm()

End Sub
-------------------------------------------
標準モジュール(Module1)
-------------------------------------------
Dim mscomm1 As Class1

Sub SetMscommEvent()
Set mscomm1.mscm = MSCommLib.mscomm
End Sub
-------------------------------------------
本に、実際のオブジェクトと関連づける必要がある、
とあったので、上のようにしましたが、
「メソッドまたはデータ メンバが見つかりません。」
とエラーが出ます。
Set mscomm1.mscm = MSCommLib.mscomm
だと、「オブジェクトが必要です」
Set mscomm1.mscm = CreateObject("MSCOMMLib.MSComm.1")
だと、「オブジェクト変数または With ブロック変数が設定されていません。」
あと、少しでうまくいく気がするのですが...
985デフォルトの名無しさん:2005/12/08(木) 15:16:05
訂正

Set mscomm1.mscm = mscomm
だと、「オブジェクトが必要です」
986デフォルトの名無しさん:2005/12/08(木) 15:19:07
Set mscomm1 = New Class1

Set mscomm1.mscm = MSCommLib.mscomm
の前に追加
987デフォルトの名無しさん:2005/12/08(木) 17:37:39
>>986
Set mscomm1.mscm = New MSCommLib.mscomm
じゃね?
988980:2005/12/08(木) 17:56:55
レスありがとうございます。
VBなら簡単なのに。VBAだとここまでてこずるとは。
標準モジュール(Module1)
-------------------------------------------
Sub SetMscommEvent()
Set mscomm1 = New Class1
Set mscomm1.mscm = New MSCommLib.mscomm
End Sub

Private Sub SendData()
Set mscomm1 = New MSCommLib.mscomm
mscomm1.CommPort = 1
mscomm1.Settings = "19200,N,8,1"
mscomm1.PortOpen = True
mscomm1.Output = "piyo"
mscomm1.PortOpen = False
End Sub

Sub mscm_OnComm()
MsgBox "fuga"
End Sub
-------------------------------------------

SetMscommEvent()を一回実行してから受信すれば、
mscm_OnComm()が実行されると期待したのですが、
まだ、反応なしです。
989デフォルトの名無しさん:2005/12/08(木) 18:26:04
BASP21を利用して メールで添付されてきたCSVファイルを取り出して 指定したフォルダに
自動的に保存したいのですが。

「 output = bobj.ReadMail(file, nobody, Folder) 」を
下のコードの中にどのように追加すればいいでしょうか?


Dim bobj, ar
Dim Server As String, User As String, Pass As String, Command As String, Folder As String
Set bobj = CreateObject("basp21") ''BASP21オブジェクト
Server = "pop.xxxxx.com" ''POP3サーバー
User = "toru_tanaka" ''アカウント名
Pass = "password" ''パスワード
Command = "SAVEALL" ''コマンド
Folder = "<" & ThisWorkbook.Path & "\mail" ''保存するフォルダ
ar = bobj.RcvMail(Server, User, Pass, Command, Folder)
If IsArray(ar) Then
MsgBox "メールを受信しました"
Else
MsgBox "新着メールはありません"
End If
Set bobj = Nothing
990デフォルトの名無しさん:2005/12/08(木) 18:40:00
どうも、980はインスタンスの概念がわからないようだな。
991980:2005/12/08(木) 18:49:38
>>990
すいません。分かってないと思います。
何が悪いか教えてもらえませんか。
992デフォルトの名無しさん:2005/12/08(木) 20:02:09
>>991
こういう人って不思議でしょうがないんだけど
人に質問する前にやることあるんじゃないの?

VBのコントロールの使い方なんてたいていググればいくらでも見つかるけど。
現に今"oncommイベント"で検索してみたが、順をおって使い方を説明しているところが
山ほど出てくる。

こういうやるべきことやらずにアタフタする人は何やっても多分ダメだね。
少なくともPGには向いてないわ。

まあ貶すだけだと後味悪いんでちょっとヒント。
MSCommのイベントは設定してやらないと発生しない。
RThresholdだと思ったけど、ちゃんと設定してます?

っていうか、MSCommで受信処理にOnCommイベントなんて使っちゃダメだよ。
どんなケースでも絶対使わないとまでいえないけど、普通の通信プログラムじゃ
まず使わない。

OnComm使って受信処理するようなコードを書く人はまあヘッポコだわな。
993デフォルトの名無しさん:2005/12/08(木) 20:41:25
VBじゃなくてさ、Excel VBAなんだよ。
VBなら検索すればサンプル山ほどあるし、実際動かしている。
こんなとこで時間食っているから、ヘッポコであることは認めるし、
OnCommしか使えないレベルでもあるが、
今回の件はOnCommで十分だと思うね。


994デフォルトの名無しさん:2005/12/08(木) 21:24:34
意味がわからない。
VBのコントロールの使い方はVBからだろうとVBAからだろうと同じですが。
995デフォルトの名無しさん:2005/12/08(木) 22:27:41
テンプレ議論まだ〜?チンッチンッ☆(脳内AA)
996デフォルトの名無しさん:2005/12/08(木) 22:38:43
>>995
何がしたいんだよ
997995:2005/12/08(木) 22:52:45
>>996
いやいやいやこのスレの行く末を案じて。ちょw
998995:2005/12/08(木) 23:15:41
次の患者さんどーぞ。

つーか俺様のエピソードを1つ
VS6ProにFrontPage98ついてたの知ったのは購入3年後でしたが。
…w

999デフォルトの名無しさん:2005/12/08(木) 23:19:23
1000
1000デフォルトの名無しさん:2005/12/08(木) 23:19:50
おしい。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。