VBプログラマ質問スレ(6.0以前) Part54 at TECH
[2ch|▼Menu]
1:デフォルトの名無しさん
08/03/03 23:03:01
ここは Visual Basic 〜6.0 の質問スレです。
質問者は使用しているOS、VBのバージョン、サービスパックのバージョン、
「何がしたくて、どうしたけど、どう困っているのか」を明確に書きましょう。

VB.NETは別物なので専門スレで、VBA、APIの質問もそれぞれのスレで。

○ 質問者の心得
 一.質問する前にMSDNやGoogle、過去ログにも目を通してみる。
 二.VBScript、インストーラーなどはこのスレでOK。
 三.質問は第三者にもわかりやすいよう簡潔かつ具体的に。
 四.荒らしは相手しない。

○ 回答者の心得
 一.答えられない質問は無駄に罵倒せずスルー。無理するな。
 二.代用法を強制しない。
 三.回答する上で必須ではない情報をむやみに聞き返さない。
 四.荒らしは相手しない。
 五.VB情報募集中。
 六.回答は質問者が理解できるよう具体的に。

MSDN Online Japan ホーム
 URLリンク(www.microsoft.com)
Visual Studio 6.0 Service Pack 6
 URLリンク(msdn.microsoft.com)
Google
 URLリンク(www.google.co.jp)

※「まず自分で調べる」クセを身につけよう。

2:デフォルトの名無しさん
08/03/03 23:03:29
前スレ
VBプログラマ質問スレ(6.0以前) Part53
スレリンク(tech板)

なかなか立ってないから立てた。反省はしていない

3:デフォルトの名無しさん
08/03/03 23:30:58
>>1


4:デフォルトの名無しさん
08/03/07 10:35:20
本スレage

5:デフォルトの名無しさん
08/03/07 15:20:23
VBでおすすめの本は?

6:デフォルトの名無しさん
08/03/08 15:11:26
>>5
VB6なら「ピーターノートンの手解きVisual Basic6」
Vol1とVol2の2巻あるが、初心者でも無理なく理解できる丁寧な解説と、
上級者でも満足できる高度な内容を両立させている上に他のVB本には
記載されていない事も説明がある。サンプルCDも付いているし、この2冊で
充分VBマスターになれる。

7:デフォルトの名無しさん
08/03/08 16:01:17
>>5
ピーターノートン
URLリンク(www.amazon.co.jp)
URLリンク(item.rakuten.co.jp)
URLリンク(auction.item.rakuten.co.jp)
URLリンク(page9.auctions.yahoo.co.jp)

8:デフォルトの名無しさん
08/03/10 16:50:20
>>5
ゲームとか作るんだったら
古い本だけど
Visual Basicビジュアルプログラミング実践テクニック
結構お勧めできるかも
大昔にゲーム系の専門でPGの講師してたときに使ってた本
ビジネスアプリだったらぜんぜん意味無いが

9:デフォルトの名無しさん
08/03/12 23:00:28
すいませんが質問させてください
FTP接続に関する質問です。
FTPでデータを転送したく、いろいろ調べた結果、転送まではできるようになりました
しかし、以下のことができません。
Aのデータを送って、正常に送れたのを確認してからBのデータを送る
問題点
データ量が大きくなる(転送データが増える)と回線の状況による速度の影響で
一定時間で見るのは難しいです(効率も悪い)

たぶんAのデータがすべて送りきれているか確認できればいいと思うのですが可能ですか?
ほかにいい方法があれば教えてくれれば嬉しいです。よろしくお願いいたします。

10:デフォルトの名無しさん
08/03/12 23:41:21
>>9
つか、シーケンシャルに処理すれば良い希ガス

11:デフォルトの名無しさん
08/03/13 10:01:14
>>9
よくわからないけど
Aのデータを送信
  ↓
FTPで最新リストを取得して送信元データとサイズを比較 → 違うなら再送信
  ↓
同じなら成功したとする
とかはできないの?

12:デフォルトの名無しさん
08/03/13 19:49:43
zipファイルの圧縮はどうすれば可能でしょうか?
.netは見つかったのですが6.0では見つかりません。
ちなみに普通に解凍は見つかりました。
UNZIP32.DLL
ですが、やはり使用しないと無理なのでしょうか?
どうかその方法を教えてください。(txtをまとめて圧縮さえできればいいです)
よろしくお願いいたします

13:デフォルトの名無しさん
08/03/13 20:58:00
>>12
UNZIP32.DLLは解凍で
圧縮はZIP32.DELLだったような。
VB6は標準でZIP圧縮、解凍というメソッド等は持たないので
ZIP32.dllあたりからメソッド呼び出す必要があったはず。


14:デフォルトの名無しさん
08/03/13 21:00:23
質問です。
1: Public Sub test
2: dim x as integer
3: x=0
4: End Sub

変数xのメモリが実際に確保されるのは
2行目でしょうか?
3行目でしょうか?


15:デフォルトの名無しさん
08/03/13 21:39:38
気にしなくていい

16:デフォルトの名無しさん
08/03/14 09:57:25
>>12
総合アーカイバ プロジェクト
URLリンク(www.csdinc.co.jp)

ここの「開発室」を見てみ?

17:12
08/03/15 00:09:31
>>13,16
ありがとうございます
がんばってみます

18:無償入手可
08/03/15 13:00:48

Visual Basic Version 5.0 Control Creation Edition SP2 日本語版
URLリンク(download.microsoft.com)

Visual Basic 5.0 Control Creation Edition: SP2 ヘルプ ファイル
URLリンク(www.microsoft.com)
URLリンク(download.microsoft.com)

Visual Basic Version 5.0 Control Creation Edition: レジストリ修正モジュール
URLリンク(www.microsoft.com)
URLリンク(download.microsoft.com)

Visual Basic 5.0: RecentFiles ツール
URLリンク(www.microsoft.com)
URLリンク(download.microsoft.com)


19:デフォルトの名無しさん
08/03/15 14:09:52
コピペ君って馬鹿だな、まで読んだ。

20:デフォルトの名無しさん
08/03/15 16:04:28
「馬鹿は、人を馬鹿呼ばわりする」まで読んだ。

21:デフォルトの名無しさん
08/03/15 16:36:05
かわいそうだから全部読んだ

22:デフォルトの名無しさん
08/03/16 15:35:22
文字コードで質問があるのですが
VBの内部コードはUnicodeということですが
buf = "1,2,3,4"
Open strPath For Output As #FileNo
Print #FileNo, buf
Close #FileNo

で書き込んだファイルがシフトJISになるのはなぜでしょうか?


23:デフォルトの名無しさん
08/03/16 15:49:49
仕様です

24:デフォルトの名無しさん
08/03/16 17:31:57
>>23
レス有難うございます。これはVB6の仕様ということでしょうか。
Windows Vistaでは文字コードの規定値がUnicodeになるようですが
VB6で>>22のようなコードで作成したファイルは
やはりシフトJISになるのでしょうか?

25:デフォルトの名無しさん
08/03/16 17:33:30
そのコードではそうなる

26:22
08/03/16 18:00:30
>>25
ということはシフトJISになるのはPrintステートメントの仕様ということでしょうか。
たしかにStrConvでUnicodeに変換した文字列を書き込んでもシフトJISになりますね・・
Writeステートメントでも同様のようです。


27:デフォルトの名無しさん
08/03/16 18:33:22
>>26
バイナリで作って書き込めばUNICODEで保存できたはずだが?

28:デフォルトの名無しさん
08/03/16 22:00:40
シフトJISで出力される仕様だなんて聞いた事もないので
試しにAppLocaleで切り替えてみたらやはりシフトJIS以外で出力された
UTF-8には切り替えられないので意味無いが

29:22
08/03/16 22:19:53
>>27
Open strPath For Binary Access Write As #FileNo
Put #FileNo, , buf
Close #FileNo
でもUnicodeにならないのですがこれって端末の環境が関係してるんでしょうか?
バイト配列でも同じでした。

>>28
要はVista端末で実行しようがシフトJISで出力したいということなのですが
>>22のコードは修正する必要があるでしょうか?


30:デフォルトの名無しさん
08/03/16 23:02:53
>>29
Dim strPath As String
Dim buf As String
Dim buf2() As Byte
Dim fileno As Integer
fileno = 1
buf = "1234"
buf2 = StrConv(buf, vbUnicode)
buf3 = buf
strPath = "C:/test.txt"
Open strPath For Output As #fileno
Print #fileno, buf2;
Close #fileno
かなり適当に書いたが、こんなもんじゃないのか?
FFFEは省いてるが

31:デフォルトの名無しさん
08/03/16 23:38:59
質問者も回答者もぐぐらないカスばかりだな

32:14
08/03/16 23:46:19
>>14
↑誰かご存じの方いませんか?

33:デフォルトの名無しさん
08/03/16 23:48:18
どのタイミングで実際にメモリが確保されるかとか保証してるのかな?
遅延可能なら遅延しそう。
でも、動作が変わるような遅延はしないと思う。

34:デフォルトの名無しさん
08/03/16 23:57:22
マジレスすれば、1行目。

35:14
08/03/17 00:31:19
>>33
>>34
個人的には>>34さんの意見と同じです。

参考書によるとVB6ではAs Newキーワードで宣言されたオブジェクト変数の
生成されるタイミングは宣言された行ではなく、
実際にそれが使用された時まで遅延されるらしいです。
>>14の例でいうと2行目がIntegerではなく
クラスの場合、3行目でメモリが確保され、Inisializeイベントが呼ばれるのですが、
これってオブジェクト変数の場合だけメモリの確保のタイミングが遅延されるのって
変ですよね。
そう考えたら>>33さんの言うように遅延しているのかもしれません。

ちょっと話はそれますが、
Dim i As Integer
If True Then
Dim x As Integer
x = 100
End If
MsgBox CStr(x)
これで「100」と表示されたのでいろんな意味上の方にまとめて
宣言した方が可読性あがるしよさげですね。
賛否両論あるかもしれませんが。


36:デフォルトの名無しさん
08/03/17 00:33:16
オブジェクト変数だけ遅延されるのは十分ありえることだと思うけど?
ありえることとそうであることは違うけどね。

37:デフォルトの名無しさん
08/03/17 02:26:07
変数とインスタンスの区別ができないバカw

38:22
08/03/17 02:43:19
>>30
有難うございます
そのようにコーディングしてもSakuraなどのエディタでは
なぜかSJISと表示されますね・・・。

ここにもバイナリで開いてPutで書き込むといけたと書いてあるのですが
なぜか当方の環境ではうまいこといきません・・・
h URLリンク(www.accessclub.jp)


39:14
08/03/17 03:10:30
>>36
ありえること、ですか。
確かにそう言われるとそうかもしれませんね。
VBのクラスの実装はなんか他のと比べて
特殊なところありますし。
わかりました。
ありがとうございます。

>>37
変数がインスタンス化するタイミングについて討論してるのに。

40:デフォルトの名無しさん
08/03/17 08:27:10
>>39
37じゃないけど、Nothingと比較ができる型の意味分かってないんじゃないの?
いずれにせよ(インスタンス生成の遅延以外は)くだらない議論だよ。

シュレディンガーの猫は最終的に猫の生死を確認する方法があるから意味があるのであって、
それが事実上ないVBでのそんな議論に何の意味があるw

41:デフォルトの名無しさん
08/03/17 10:03:28
>>39
組み込み型では、インスタンス化とは言いません。

42:デフォルトの名無しさん
08/03/17 11:47:26
22のコードは日本語環境だとShift_JISで出力され、
22はShift_JISで出力したいと言っている。
一体どこに問題がある?

43:デフォルトの名無しさん
08/03/17 12:21:35
変数宣言してないとき(必須にしてる時)に、デバッグモードで先頭行に
カーソルはあると思うが・・・

44:デフォルトの名無しさん
08/03/17 13:02:43
プロセスにアタッチして、ディスアセンブルすればわかるかもよ

45:デフォルトの名無しさん
08/03/17 20:52:01
>>38
たしかに俺もウソソースを書いた。
けどすべての答えが出てたんだから自力でなんとかしてほしかった!
Dim strPath As String
Dim buf As String
Dim buf2() As Byte
Dim buf3(0 To 1) As Byte
Dim fileno As Integer
fileno = 1
buf = "1234"
buf2 = buf
buf3(0) = &HFF
buf3(1) = &HFE
strPath = "C:/test.txt"
Open strPath For Binary As #fileno
Put #fileno, , buf3
Put #fileno, , buf2
Close #fileno


46:デフォルトの名無しさん
08/03/17 23:20:39
未だにOpenステートメントを使う石器人がいるとは…

47:14
08/03/18 01:15:40
>>40
Nothingと比較ができる型ってつまり
値型と参照型の話ですよね?
大丈夫と思います。

>>41
そうなんですか、知りませんでした。
ありがとうございます。
値型の変数を保存するために実際にメモリ上に領域が確保されることをなんと言うのでしょうか?

48:デフォルトの名無しさん
08/03/18 06:33:25
オブジェクト型の変数にオブジェクトのインスタンスが格納されると思っているなら間違いだよ

49:デフォルトの名無しさん
08/03/18 19:06:10
>>46
お前はVB6以前のスレで何を馬鹿なこと言ってるんだ

50:デフォルトの名無しさん
08/03/18 20:14:26
>>49
>>46 は、FileSystemObject ぐらい使えとでも言い鯛のでは?

51:デフォルトの名無しさん
08/03/18 20:58:40
FileSystemObjectでUNICODEを保存するソース


52:今日も雲弧 ◆bKaGbR8Ka.
08/03/18 22:59:41
VBSで質問があります。よろしくお願いします。(ペコ

IF文の部分でobjDic11とobjDic12のItemを書き換えました。
IF文の部分では書き換わっているのに、ループを抜けた後に
再度objDic11を参照すると書き換え前の状態なのです。

どこが悪いのでしょうか?何故こうなるのでしょうか?
お教え下さい。

以下にコードを4分割して貼ります。



53:今日も雲弧 ◆bKaGbR8Ka.
08/03/18 23:01:02
Sub RankMark
'On Error Resume Next
Const UpTo_Soutou = 2500
Const UpTo_Gensui = 2000
Const UpTo_Taisyou = 1750
Const UpTo_tyuujyou = 1500
Const UpTo_Syousyou = 1250
Const UpTo_Jyunsyou = 1000
Const UpTo_Taisa = 950
Const UpTo_tyuusa = 800
Const UpTo_Syousa = 650
Const UpTo_Taii = 500
Const UpTo_Tyuui = 400
Const UpTo_Syoui = 300
Const UpTo_Soutyou = 200
Const UpTo_Gunsou = 150
Const UpTo_Gotyou = 100

'まずRANKとMARKのobjDicStarsを作る

Set objDicStars = CreateObject("Scripting.Dictionary")
Set objFS3 = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile3 = objFS3.GetFile("星.txt")
Set objTS3 = objFS3.OpenTextFile("星.txt")


54:デフォルトの名無しさん
08/03/18 23:01:40
必要最小限のソース貼れよ・・・

55:今日も雲弧 ◆bKaGbR8Ka.
08/03/18 23:01:53
Do Until objTS3.AtEndOfStream
strLine3 = objTS3.ReadLine
ArrayStars = Split(strLine3)
strRank = ArrayStars(0)
strMark = ArrayStars(1)
objDicStars.Add strRank,strMark
Loop
objTS3.Close

'名前のリストを取得してから辞書を操作する

ArrayRanksList = objDicStars.Keys
ArrayStarsList = objDicStars.Items
ArrayKeysList = objDic.Keys
ArrayItemsList3 = objDic3.Items
ArrayItemsList11 = objDic11.Items
ArrayItemsList12 = objDic12.Items

'MsgBox ArrayKeysList(0)
'MsgBox ArrayItemsList3(0)
'MsgBox ArrayItemsList11(0)
'MsgBox ArrayItemsList12(0)
'MsgBox ArrayRanksList(0)
'MsgBox ArrayStarsList(0)


56:今日も雲弧 ◆bKaGbR8Ka.
08/03/18 23:02:51
For i = 0 To objDic.Count - 1

If CSng(ArrayItemsList3(i)) >= UpTo_Soutou Then

strOldRank = ArrayItemsList11(i)
strOldMark = ArrayItemsList12(i)
objDic11.Item(strOldRank) = ArrayRanksList(0)
objDic12.Item(strOldMark) = ArrayStarsList(0)

MsgBox "昇進しました"
MsgBox ArrayRanksList(0)
MsgBox ArrayStarsList(0)
MsgBox objDic11.Item(ArrayItemsList11(i))
MsgBox objDic12.Item(ArrayItemsList12(i))

Else

MsgBox "あ"

End If

Next



57:今日も雲弧 ◆bKaGbR8Ka.
08/03/18 23:03:50
strRank = ""
strRank = objDic11.Items

For m = 0 To objDic.Count - 1
strTemp = strTemp & strRank(m) &vbcr
Next

MsgBox strTemp
MsgBox objDic11.Item("今日も雲弧")
MsgBox objDic12.Item("今日も雲弧")

End Sub


58:今日も雲弧 ◆bKaGbR8Ka.
08/03/18 23:05:10
>>54

申し訳ありません。必要最小限の部分すらわからないのです…。



59:デフォルトの名無しさん
08/03/19 17:57:26
>58
ものには限度があるだろうよ。

あのコードを見て、本質ではないと思われる行が一行も思い当たらない程度のレベルなら、
何をどこから説明して良いのやら見当も付かないよ。

60:デフォルトの名無しさん
08/03/20 01:34:51
すいません。質問です。
Windows xpのマシンにVB6はインストールできますか?

61:デフォルトの名無しさん
08/03/20 01:44:20
Linuxマシンならインスコできます。

62:14
08/03/20 03:42:03
>>48
いえいえ、
オブジェクト型の変数ってオブジェクトのインスタンスへの参照ですよ。
その話題くどいです。

>>60
できます。


で、本題は>>47の後半なんですけど
返事ないところを見るとオブジェクト型のインスタンス化とは違って
組み込み型には明確な名称ないのかな。



63:デフォルトの名無しさん
08/03/20 10:26:34
>>62
質問の仕方からいって明らかに分かってないだろw
なにがくどいだよ。
っていうか君がいう「本題」からして全然わかってないじゃん。
変数そのものが占有するメモリに関して組み込み型とオブジェクト型の区別
なんてあるかよ。

「本題」について言えば、「VBプログラマの視点での呼称」なのか「VBコンパイラ作者の視点での呼称」
なのかをまずはっきりする必要があるだろう。

「インスタンス化」とはVBプログラマ視点の言い方のような気がするから、
これに対応する言い方ということなら「定義」じゃないの?

コンパイラ製作者の視点で「変数定義」の実装法の呼び方についていってるのなら
それはVB作ったMSの人にしかわからんのじゃないの。
それに変数のスコープによっても実装法は恐らく異なると思うけど

64:60
08/03/20 11:26:51
>>62
ありがとうございます。
早速インストールしてみます。


65:14
08/03/20 14:45:46
>>63
変数そのものが占有するメモリに関して組み込み型とオブジェクト型の区別
については
どうなんでしょうかね。
少なくともオブジェクト型、というか参照型については
宣言される時ではなく、初回利用時にインスタンス化するみたいですね。
で、組み込み型はどうなのか、というのが今回の話題ですね。
一応オチとしては「初回利用時かもしれない」というオチで落ち着きました。

参照型:インスタンス化
だとして
組み込み型:定義?
ですか?
なんか変な気が。。

66:デフォルトの名無しさん
08/03/20 15:03:12
>>65
やっぱり全然分かってないね。
New付きで定義された変数について、初回利用時まで生成が遅延されるのは
インスタンスであって変数そのものではないだろう普通に考えて。

ちなみに「インスタンス化」という言葉が動詞だとして、それがとる目的語は
「クラス」または「型」であって「変数」じゃないと思うんだけど。
言い換えれば別に変数が「インスタンス化」されるわけじゃないぞ。

67:14
08/03/20 16:41:10
>>66
New付きで定義された変数について、初回利用時まで生成が遅延されるのは
インスタンスであって変数そのものではないですよ。
当たり前です。
私がわかってない方が都合いいですか?
ならそれでいいです。
わかってません、すみません。
これについてはここで終了してください。

以下を知りたいです。
参照型に対して「インスタンス化」ならば、
組み込み型に対しては何でしょうか?
「定義」という答えを頂きましたが的を得ている気がしません。
他の人の意見聞かせてもらえませんか?
やはり定義で正解でしょうか?

68:デフォルトの名無しさん
08/03/20 17:03:48
あーこいつどうしようもなく頭悪いなあ。。。
だから「参照型のインスタンス化に対応する組み込み型の概念は?」なんてのは
そもそも愚問なんだよ。そんなものはないんだから。

参照先が作られることを「インスタンス化」というのだから、
そもそも「参照先」という概念がないVBの組み込み型に対応する概念なんてあるわけないだろう。

そして変数そのもの作られるタイミングは組み込み型だろうが参照型だろうが
変わらないはずだ、と言っているのにこれも全然理解しようとしないなこの馬鹿。

69:デフォルトの名無しさん
08/03/20 17:06:30
というかVB6以前って「参照型」っていう呼び方したっけ?
そういう呼称が導入されたのはドトネト以降で、VBでの呼び方は「オブジェクト型」
だったような気がしたけど。

まあこれに関しては説明の便宜かもしれないし、「参照型」と言った方が
呼び方として適切だと思うからいいんだけど。

70:デフォルトの名無しさん
08/03/20 19:01:39
> 参照型に対して「インスタンス化」ならば、
いみがわかりません><

71:14
08/03/20 19:14:36
>>69
しないと思います。
オブジェクト型で正解。
ご想像の通り説明の便宜です。

>>68
確かにこれは答えないかもしれませんね。
ここまで追求する問題でもないので質問取り下げます。
ありがとうございました。

>>70
言葉足らずですみません。


次の疑問がわきました。
先ほどVBには参照先という概念はないとお聞きしました。
本当ですか?
自分の意見は「ある」です。
Dim cls1 As Class1
Dim cls2 As Class1

Set cls1 = New Class1
cls1.s = "test"
Set cls2 = cls1
Debug.Print cls2.s

cls2の参照先はcls1のインスタンスです。
だから「ある」に一票。

72:デフォルトの名無しさん
08/03/20 19:50:56
> 先ほどVBには参照先という概念はないとお聞きしました。
日本語ダメな人?

73:デフォルトの名無しさん
08/03/20 20:47:37
>>71
クラスはドトネトでいう参照型/値型でいったら前者だよ。
だからNothingと比較できるる型の意味を君は理解してるか、と最初から言ってるでしょ。

74:14
08/03/20 21:42:53
>>73
>クラスはドトネトでいう参照型/値型でいったら前者だよ
だーかーら
そんな当たり前のこと堂々といちいち書かない。
何が言いたいんですか?

それはさておき、
>>71についてどなたかご意見いただけるとありがたいです。
よろしくお願いします。

75:デフォルトの名無しさん
08/03/20 21:45:13
VBに参照先の概念が無いなんて誰も言ってないだろ
完全に読み間違えてるよ

76:デフォルトの名無しさん
08/03/20 22:08:29
>>74
75が指摘してくれてるけど>>68で「ない」と言っているのは
組み込み型の参照先だよ。

っていうか、君はその「当たり前」のことを全然理解してないのに
その自覚がないから馬鹿だっていうんだよ。

77:14
08/03/20 23:10:50
>>75
なるほど。

参照先が作られることを「インスタンス化」というのだから、 そもそも
「参照先」という概念がないVBの組み込み型
に対応する概念なんてあるわけないだろう。

こう区切ればよかったんですね。
ありがとうございましたー。


78:デフォルトの名無しさん
08/03/20 23:35:55
vsFlexGridのセルにに画像を表示させるにはどうしたらいいんですか?

79:78
08/03/21 00:02:10
自己解決しました

80:デフォルトの名無しさん
08/03/21 11:48:26
インスタンス化とは、オブジェクトの実体(インスタンス)を生成するプロセスのことを指す言葉。
これに対応する組み込み型の言葉は無い。しいて言うなら、アロケート(メモリ割付)か。
インスタンス化では、普通、メモリのアロケートとオブジェクトの初期化が行われる。
「オブジェクトの初期化」の中身は、言語によって異なる。

組み込み型の場合によく使われる「定義」という言葉は、「宣言」と対になる言葉。
英語では、definitionとdeclaration。普通は、前者はメモリのアロケートを伴う場合を指し、
後者は文字通り宣言のみを行う場合に使う。C/C++では、両者は明確に区別して語られる。

81:デフォルトの名無しさん
08/03/21 11:51:53
蛇足:的は射るもの

82:デフォルトの名無しさん
08/03/21 11:55:16
さて、ここでVBのヘルプを見てみると、

>Dim ステートメント
>変数を宣言し、メモリ領域を割り当てます。

と記述されている。素直に理解するなら、Dimステートメントが実行されたときにメモリが
アロケートされる、すなわち、Dimステートメントとは、変数「定義」だということになる。

83:デフォルトの名無しさん
08/03/21 16:00:52
>15
がFAなんじゃねーの?
それが問題になるようなコードはVBで書くべきじゃないし、
書かなきゃならないならVBを使うのは間違いってことだよ。

84:14
08/03/23 10:48:08
>>80
求めていた答えをいただけてすごくすっきりしました。
ありがとうございました。

85:22
08/03/23 23:47:03
>>42
亀レス&言葉足らずですみません。最終的にはVista環境でもシフトJISで書き込みたいのですが
元来内部コードをUnicodeでもっているはずのVBで>>22のように書いたら
シフトJISになるわけが知りたかったので・・・。

>>45
有難うございます、面目ないです。参考になりました。
色々調べた結果ADODB.StreamやFileSystemObjectも使えそうなので
試行錯誤してみます。

86:デフォルトの名無しさん
08/03/23 23:57:31
どうしても何も、VBが変換書けてるに決まってるでそ。
理由はUNICODEそのままで書いたら文句いう連中が
出るに決まってるから

87:デフォルトの名無しさん
08/03/24 23:54:10
VB6.0を使っています。OSはWindowsXPSP2です。
他人のソースをコピーしてプログラムを作りました。
生成したEXEをエクスプローラで並べて表示にして見て見ると、ファイル名の下に薄い灰色で
作者名らしきものが表示されてしまいます。
プロジェクトのプロパティの「実行可能ファイルの作成」タブで
バージョン情報の中にある、コメント、会社名などの情報は全て消したのですが、
EXEを生成し、生成したEXEをエクスプローラで並べて表示にして見た時に、
ファイル名の下に薄い灰色で作者名らしきものが表示されてしまいます。
こういった付加情報を表示しなくするにはどうしたらよいのでしょうか?

88:デフォルトの名無しさん
08/03/25 14:17:30
>>87 「他人のソースをコピーしてプログラムを作りました」
そもそも、これが間違いの始まり

89:デフォルトの名無しさん
08/03/25 15:20:43
>87
なぜかF5では更新されないね。
別のフォルダを選択して元に戻ったら直らないかい?


90:87
08/03/25 16:15:21
>>89
ご指示通り別のフォルダにexeを一度作成すると消えました。
ありがとうございました。

91:デフォルトの名無しさん
08/03/26 16:22:26
Option Explicit

Sub zzz()
Dim hoge(3) As Variant
Dim hogehoge As Byte
Dim z As Byte

For z = 1 To 3
For hogehoge = 1 To 3
hoge(z) = Range("A" & hogehoge).Value
Next hogehoge
Next z
End Sub

上のようなコードで、zとhogehogeを同時に
インクリメントすることは可能でしょうか?

92:デフォルトの名無しさん
08/03/26 16:52:47
「Next hogehoge」の前に
「z=z+1」を入れれば可能だけど
それは構成として間違ってるから

やりたいことを日本語で整理して、
それから考えた方がいいと思うよ。

93:デフォルトの名無しさん
08/03/26 17:35:03
おk

94:デフォルトの名無しさん
08/03/26 19:15:36
zいらんやん

95:デフォルトの名無しさん
08/03/26 22:21:41
VB6.0でZipファイルを圧縮する処理をVBSで作成しBatで起動するように
したのですが、なぜか1回だけZipと変な拡張子ないデータが作られ
12ファイルの内9ファイルしか圧縮されていませんでした。(原因不明)
そこでZipファイルの中身の件数のみを数えて数があっていれば圧縮を
正常に終了したとみなしたいのですが、可能でしょうか?
全て解凍すると時間がかかりますのでお願いいたします。
ちなみにvbsで起動したのはdllを使わないで圧縮ができたからです。
よろしくお願いいたします

96:デフォルトの名無しさん
08/03/26 22:29:24
日本語で話してくれないか?

97:デフォルトの名無しさん
08/03/26 23:28:04
そのうまくいかない原因を究明するほうがいいと思うぞ。
急がば回れって言うし。

あと、VBSでできるんだったら、VB6でも全く同じようにできる。
せいぜいWScriptオブジェクトがないくらい。

98:95
08/03/27 01:30:19
>>96
すいません
>>97
VBSはネットでフリーであったのでそれを使用しました。ゆえにVBへの記述方法
がまったくわかりません。
(検索はしましたがVB VBSやVB6.0 VBSなど)VBSとVBがかぶっているからか変換の方法が見当たりませんでした。
原因が現在わからないので困っています。今回初めて不具合が出たもので。
>>96
ファイルを圧縮するVBSをbatで動かします。そのbatはVBで作成しています。
作成したbatの起動も同じVBでしています。
batでは以下の記述をしています
CD VBSのパス
CScript.exe MakeZIP.VBS ZIPファイルのパスと名前 圧縮するtxtのパスと名前1 圧縮するtxtのパスと名前2 …
exit
ですこれをshellで起動しています。
しかし今回作成されたzipファイルには後ろに記述していた11ファイルの内9ファイルしか
圧縮されておらず。残りの2ファイルはzipファイル内に存在しませんでした。(zipファイルと同じフォルダに拡張子のないファイルが1つ作成されてました)
ファイル名が長いわけでも、特殊文字が使われているわけでもありません(パスも同じです)
そこで、圧縮が正常にできているかを判断したいと考えました
その方法として圧縮したファイル件数を調べることができないかを考えました。
よろしくお願いいたします

99:デフォルトの名無しさん
08/03/27 01:35:38
>>98
VBSはVBのサブセットなんだから、VBS→VBは
変換なんて考えなくても、そのまま一字一句変えずに使えると思ってもいいくらい。
まずは試してみたか?

100:デフォルトの名無しさん
08/03/27 01:38:53
コマンドラインの文字長には制限があったような気がするけど?

101:デフォルトの名無しさん
08/03/27 12:37:36
1ファイルずつ追加していけば

102:デフォルトの名無しさん
08/03/27 19:21:07
VBAのサンプルでも使えばよかろう

103:95
08/03/27 22:49:35
レスありがとうございます。
>>99
はじめにfunctionを入れてみましたがいまいちどう起動したら
よいのかわからずに挫折しました。(標準モジュールに追加?)
>>100
まったく同じデータ(パス)で行っています。


104:デフォルトの名無しさん
08/03/27 23:15:08
>>103
コマンドラインの文字長制限はそう言う意味じゃないよ

>CScript.exe MakeZIP.VBS ZIPファイルのパスと名前 圧縮するtxtのパスと名前1 圧縮するtxtのパスと名前2 …

とあるけど、例えば

CScript.exe MakeZIP.VBS c:\dirnameA\dirnameB\dirnameC\dirnameD\dirnameE\dirnameF\dirnameG\ZIPFile.zip c:\dirnameA\dirnameB\dirnameC\dirnameD\dirnameE\1.txt c:\dirnameA\dirnameB\dirnameC\dirnameD\dirnameE\2.txt (12.txtまで同じ事を繰り返す)

↑のような長ったらしいパスで使ってるなら途中で途切れて当たり前

CScript.exe MakeZIP.VBS c:\ZIPFile.zip c:\1.txt c:\2.txt (12.txtまで同じ事を繰り返す)

にしたら行けるかもしれない。それでも長いから途切れるもしれない
「CScript.exe」の後ろに続く部分が長すぎると途中で切れるってこと

よく送るメニューに入れて使うソフトがあるけどあれもたくさんのファイル(例えばWindowsフォルダに存在する全てのファイルとフォルダ)を選んで送るってやると
「指定したデバイス、パス、またはファイルにアクセスできません。適切なアクセス許可がない可能性があります。」
というエラーが出る。仕様だからこれは回避できない

105:デフォルトの名無しさん
08/03/28 21:10:22
16進数のカラーコードを赤・緑・青の3要素に分解するにはどうすればいいの?
例えばボタンの表面のデフォルトカラーって「&H8000000F&」だけど、これをRGB
に分ける方法ってある?
要はRGB関数の逆をやりたいんだけど。。。


106:95
08/03/28 23:56:20
>>104
ありがとうございます
今回その症状がまた出たので報告します
今回は9→11→11→11と12個全部をどうしても圧縮してくれませんでした。
104さんが言うように文字が切れているというのでしたら
最後に記述したパス(txt)が含まれないはずです。しかし
含まれていないデータは真ん中に記述されていました。
また作成したバッチを手起動すると12個全てが圧縮されました。
このことからshell関数がおかしな動作をしていると思うのですが
書き方は
ret1=shell("CScript.exe MakeZIP.VBS c:\ZIPFile.zip c:\1.txt… ",1)
ShellEnd (ret1)
で標準モジュールで
URLリンク(hanatyan.sakura.ne.jp)
に書いてある文章を
private→public
に変更して書いています。
変更の仕方がまずかったのでしょうか?
VB6.0 SP3 ですよろしくお願いいたします

107:デフォルトの名無しさん
08/03/28 23:57:10
小学校の算数だろそんなの。。

VBの場合、どうせ共用体もポインタも使えないんだから演算で求める方法を考えてみ。

まず十進数で考えてみてみ。
君は6ケタの数字の上位2ケタを取り出す方法がわからんの?
10,000で割った商を求めるだけだろ。
Hexだって同じことじゃん。

108:デフォルトの名無しさん
08/03/29 00:00:00
>>105
っていうかこれRGBの値じゃないだろう>「&H8000000F&」


109:デフォルトの名無しさん
08/03/29 01:14:20
>>105
RGBの分解方法はヘルプに載ってる。
&H8000000F&はシステムカラーの番号であって、RGB値ではない。

110:デフォルトの名無しさん
08/03/29 03:08:18
>>106
エラーが出てんじゃないの?
WScript.exeで実行してみ
ていうかなんでCScript.exeなの?


111:95
08/03/29 07:43:58
>>109
MakeZIP.VBS
の初めにそのような記述があったのでそのまま使用しています。
ありがとうございます。変更してやってみます

112:デフォルトの名無しさん
08/03/29 09:50:53
>>109
レスありがとうございます。
確かにRGB値だったら16進6桁だと思っていたのでおかしいなとは思っていたのです。
ただ薄い水色(&H00FFFFC0&)だとRを192(=C0)、GとBを255(=FF)としてRGB関数を
呼び出すとちゃんと薄い水色になるので対応しているように思えたのです。
とりあえずWEBでシステムカラー値とRGB値の対応表を探してみますね。。。(-_-)

113:デフォルトの名無しさん
08/03/29 10:10:48
システムカラーは固定色じゃないが

114:デフォルトの名無しさん
08/03/29 13:54:20
URLリンク(msdn.microsoft.com)

115:112
08/03/29 21:36:43
>>114
これです!まさにこれ!
ありがとうございます。マジで助かりました!。・゚・(ノД`)・゚・。

116:デフォルトの名無しさん
08/03/30 11:06:40
>>105

Red = RGB値 And &h0000FF
Green = ( RGB値 And &h00FF00 ) \ 256
Blue = ( RGB値 And &hFF0000 ) \ 65536

だった気がする

117:デフォルトの名無しさん
08/04/02 21:21:58
VB6でのコードの書き方で質問があります。

If hoge = 1 then
  i = i+1
End if

というふうに複数行で書くのと、

If hoge = 1 then:i=i+1

というふうに1行で書くのとでは多少でも処理の速度は変わりますか?

118:デフォルトの名無しさん
08/04/02 21:28:33
そりゃあインタプリタの時代だったらかわったけどさ
EXEで同じコードが吐かれれば速度は同じさ

119:デフォルトの名無しさん
08/04/02 21:31:09
>>117
最適化で同じ処理になると思います。
間違ってたら他の人指摘お願いします。

120:デフォルトの名無しさん
08/04/02 21:53:38
>>118,119

なるほどコンパイルすると結果は同じなのですか、
ありがとうございました。

121:デフォルトの名無しさん
08/04/03 20:42:26
WinXP,Vistaではウィンドウのタイトルに
「abcdefg」のように表示されている物が
なぜか2000環境で実行すると
「ABCDE~~」のように化けてしまいます。
なぜでしょうか?
実行ファイルの横にランタイムも配置しているので
環境でおかしくなるとは思ってなかったんですが。

122:デフォルトの名無しさん
08/04/03 20:57:09
>実行ファイルの横にランタイムも配置している

Sidebyside COMのこと?

123:121
08/04/03 21:23:24
>>122
表現が悪かったです。
実行ファイルの配置してある階層に
msvbvm60.dllや、VB6JP.DLLなど、
VB6ランタイムを一通り置いています。
こうすることでランタイムをシステムから読み込ませないようにするためです。

124:デフォルトの名無しさん
08/04/03 21:23:37
>>121
VBランタイムの言語DLL(VB6JP.dllだったかな)は
「読み込まれた」MSVBVM60.dllと同じフォルダにないといけない。
システムフォルダのが読まれてるんじゃない?

125:デフォルトの名無しさん
08/04/03 21:23:44
ブラウザのリンクをドラッグして処理を行いたいんですけど、
OLEDragDropイベントでDataの中を見てみると
「データの形式が一致しません」エラーが発生します。
リンク先の情報をVBで取得するにはどうすればいいのでしょうか?

126:デフォルトの名無しさん
08/04/03 21:34:21
>>125
もしかしてfiles見てる?

リンクはテキストだぞ。GetFormatとGetDataしてみ。

127:デフォルトの名無しさん
08/04/03 21:42:16
>>123
っていうかどう見ても馬鹿で不勉強なんだからベタにディストリビューションウィザード使えよ。

エンジンの仕組みを理解してもいない、するつもりもない奴が「俺様チューニング」
ぶっこいて動きませんって馬鹿も休み休み言えよ。

128:121
08/04/03 21:54:57
>>127
「ディストリビューションウィザード」って実行環境に作ったソフトを
インストールできる環境で利用可能なものですよね?
ネットワークフォルダから実行するため今回は利用していません。
もしかして勘違いしていますか?

129:デフォルトの名無しさん
08/04/03 22:08:01
>>128
煽り合いもいいが、先にやることあるだろw

130:121
08/04/03 22:14:37
>>129
いや、もし他に方法あるんなら純粋に知りたかったので伺いました。
悪意なんてないです。

>>124
そういう意味ではmsvbvm60.dllも実行ファイルと同じ階層に配置してるので
大丈夫、、、と思ってるのですが。
でも文字がおかしくなるのでシステムから読まれているとも考えられますね。
だとしたらなんでなんでしょうか。


131:デフォルトの名無しさん
08/04/03 22:18:25
>>128
勘違いしてるのはお前さんだろアホか


132:121
08/04/03 22:20:15
>>131
そうなんですか?
勘違いを指摘してもらえるとスキルあがりますので
それはそれでありがたいのですけど。。

133:デフォルトの名無しさん
08/04/03 22:33:52
>>130
ちなみに両方とも俺(124=129)だがw

Windowsは基本的に同じDLLは2度と読まない。(無駄だから)
なので、先に読まれてるDLLがあればそれを再利用する。
(たとえアプリと同じフォルダに同じDLLがあってもだ)

さらに、Win2000は確か読み込むDLLの優先度をアプリと同じフォルダか
システムフォルダかを選択出来る設定があったはず。
それらをお前さんがそれらを把握してないならそれが理由な可能性が高い。
把握してるなら先にMSVBVM60.dllを使うアプリが起動してるからだろう。

あとね、煽り合いする暇があるなら俺の助言をちゃんと考えろよな。
直接的な答えが出せないからあーいう受け答えになってんだろうけども、
煽りもある意味助言だぜ?

134:121
08/04/03 23:24:03
>>133
すみません、
実は単純に>>128の時点で>>124を見落としてたんですよね。。


なるほど。
>Windowsは基本的に同じDLLは2度と読まない。
これは知ってました。
>なので、先に読まれてるDLLがあればそれを再利用する。
これも知ってました、が、
今回の件と脳内でリンクしていませんでした。
ということで当然>>121の動作は予想できるあり得る動作ですね。
対処方法はOSの設定変更、もしくはインストーラー等で
システムにDLLを組み込むことですね。
納得しました、ありがとうございます。

135:デフォルトの名無しさん
08/04/04 00:13:50
>>133
その性質はKnownDllsに限られるはず。

136:デフォルトの名無しさん
08/04/05 12:47:35
VBで作られたもので有名なのって
なんかありますか(^^)

137:デフォルトの名無しさん
08/04/05 13:14:19
>>136
スレリンク(tech板)

138:デフォルトの名無しさん
08/04/05 19:08:57
板違いでしたらご容赦を。
URLリンク(homepage1.nifty.com) にある#1 -End Of Destiny-
をしていたところ、今日になって「実行時エラー'5':プロシージャの呼び出し、または引数が不正です。」
と出て起動できなくなってしまいました。

検索をかけてみるとURLリンク(support.microsoft.com) がでてきたので
互換モードにしてみたのですが解決せず。新しく落としなおしても、保存したフォルダの
置き場所を変えても効果なしでした。

VB製ソフトの現象のようなのでここで質問させていただきました。よろしくです。

139:デフォルトの名無しさん
08/04/06 01:30:19
>>137
ありがとう。
最近からVB始めたんで色々コードを見てみたいんです。

140:デフォルトの名無しさん
08/04/06 08:11:15
>>138
最小化してプログラムを終了すると次回起動したときに
実行時エラーになるね。

たぶん単純なプログラムミスだと思う。
作者にメールしてみるといいよ。

141:デフォルトの名無しさん
08/04/06 19:38:15
>>140
レスどうもです。
自分でできる解決策というのは何かないのでしょうか?
作者は恐らく新作とかで忙しいでしょうし、試しに2作目もやってみたところ同じエラーが出たので
修正も煩雑になりそうですし。

最小化して終了した記憶はないのですが、ウィザードリィ風ゲームなので強制終了は
何度もさせました。

142:デフォルトの名無しさん
08/04/06 22:49:07
>>141
レジストリから画面サイズや座標なんかの読み込みで落ちてるとか?
消すか標準値に書き直せばいけそうな気がする

143:デフォルトの名無しさん
08/04/07 07:58:48
VB参考書4冊セット
URLリンク(auction.item.rakuten.co.jp)
これだけそろってれば完璧かな?

144:デフォルトの名無しさん
08/04/07 08:06:01
>142
おそらくそんな感じ

>141
自分で解決したいのだったら Regmon で、どのレジストリを使ってるか
監視してみるといい
URLリンク(cowscorpion.com)


145:デフォルトの名無しさん
08/04/07 09:54:34
>>142
適当にレジストリを見てると、LeftとTopという項目(画面位置?)が-48000などと
変な数字になってたので一度消してみたところ起動することができました。
どうもありがとうございます。

>>144
これでログとると不要なレジストリとか消せそうですね。
今度何かあった時に使ってみます。ありがとうございます。

146:デフォルトの名無しさん
08/04/08 21:44:43
>>95さんと同じような内容なんですが(検索してたらここにきました)、
自分はMakeZIPをVB6に組み込んで使用しています。
しかし、どうしてもZIPファイルの中身を確認する方法が見当たりません。
確認したいことは圧縮されているファイル数です。
ほかにもサイズ、名前などがわかればベストなのですが
どなたか方法を知ってる方はここにはおられませんか?

147:デフォルトの名無しさん
08/04/08 21:57:21
VB6なら、メジャーなzipを扱えるdll使えよ

148:デフォルトの名無しさん
08/04/08 22:02:48
シェルで、zipを圧縮フォルダとして使えるようになっている環境なら、それも使える。

149:デフォルトの名無しさん
08/04/08 22:27:11
正直InfoZipあたりのzip.exe/unzip.exeでも付属させて
コマンドライン叩いたほがいいんじゃないかっておもう。

150:デフォルトの名無しさん
08/04/08 22:50:17
exeキックだと、コールバック使えないじゃん・・・

151:デフォルトの名無しさん
08/04/08 23:27:16
パイプ経由でコールバックもらえばええやん。

152:デフォルトの名無しさん
08/04/09 11:25:15
それ、コールバックって言わないし

153:デフォルトの名無しさん
08/04/09 12:30:34
>>146
ExtractZip.vbs 読め。

154:デフォルトの名無しさん
08/04/09 14:17:21
ListZip.vbs 読め。
と言っても読めるくらいなら来ないよな?

155:デフォルトの名無しさん
08/04/09 16:00:41
パイプ経由でライトバックもらえばええやん。


156:デフォルトの名無しさん
08/04/09 16:04:30
俺用語は使わないでね

157:デフォルトの名無しさん
08/04/09 16:06:49
筒経由で書き戻しもらえばええやん。

158:デフォルトの名無しさん
08/04/09 16:34:36
マジレスすると、unzip32.dll使え。
VBのコードも付いてる。
商用利用可。

159:146
08/04/09 22:56:57
皆さんありがとうございます。
ListZip.vbs これでできたのですね。ありがとうございます。
しかし、これをVB6で使用できるようにできません(涙)
どこかに標準モジュールないのでしょうか?

160:デフォルトの名無しさん
08/04/09 23:37:46
アホかおまえは。
普通にDLL使え。

161:デフォルトの名無しさん
08/04/10 00:19:24
>>117
ついでですがThenの後ろのコロンは要らないです。

>>159
VBSから標準モジュールやクラスモジュールへの移植は
そう難しくないと思います。

162:デフォルトの名無しさん
08/04/10 01:07:07
なにこいつ

163:デフォルトの名無しさん
08/04/10 11:34:25
あほちゃいますか?

164:デフォルトの名無しさん
08/04/10 11:57:45
スレリンク(tech板:523番)

165:デフォルトの名無しさん
08/04/10 11:58:36
だーかーらー、DLL使えって!!!


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4252日前に更新/166 KB
担当:undef