いつも参考にしています

現在 VB6+Win2000(sp6)+wsock32.dllにて、ソケットを使用したapを作成しています

WSAStartup

socket

connect

ioctlsocket

send

closesocket

WSACleanup

上記、順にてコーディングしています

このconnectのタイムアウトを設定したいのですが、どのようにすれば良いのでしょうか?

ヒントを御願いします

A 回答 (1件)

winsockのconnectタイムアウトの検出は面倒です。


余計なことですが、Winsockコントロールは使わないのですか?

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=583588
    • good
    • 0
この回答へのお礼

回答ありがとうございます

Winsockコントロールを使用しない理由は、各PC別にセットアップが必要です。
wsock32.dllであれば、各PCにセットアップする必要がなく、ファイルサーバーにAPを複写していれば良いと思っています(PCは、Windows2000なので)

お礼日時:2007/08/08 08:24

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

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

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

QエクセルVBAでファイルを連続して処理する方法は

エクセルVBAで、エクセルファイルを開いた状態で特定処理を行う仕組みを作りました。
ただ、複数のファイルを処理したいのですが、いちいちファイルを開いてから処理しなければならないため効率が今ひとつです。
ファイル名称をテーブル化するなどして、一気に連続して処理するようにしたいのですが、どのように行えばいいでしょうか。

また、処理したいのは、更新日付が一定日以降のエクセルファイルです。
更新日付と対象ファイルのフォルダーを指定すれば、更新日がそれ以降のファイルを検索し、それが順次処理されていくようなVBAをつくりたいと考えています。

部分的にでもよいので、どなたか分かる方、教えてください。
ちなみにエクセルのバージョンは2000です。
よろしくお願いします。

Aベストアンサー

> 選択フォルダのサブフォルダをのものも含むようにはできないでしょうか。

再帰処理すればできますよ。

Microsoft Scripting Runtime を参照してから、次のコードを試してみて
下さい。
取り急ぎで書いたので、エラーがあるかもしれませんが。。。

まあ、環境によっては使えませんし、推奨はできないのですが、FileSearch
を使ってもサブフォルダを含めた検索はできます。調べればサンプルはすぐ
でてくると思いますよ。

ご参考までに。

Private mDateFilter As Date

Sub フォルダ内のXLSファイル順次処理()

  Dim fso As FileSystemObject
  Dim sDir As String
  
  ' // 日付のフィルタ条件設定 例)10日前の 0:00 以降更新のファイルを対象とする場合
  mDateFilter = DateAdd("d", -10, Date) + TimeValue("00:00:00")

  ' // 対象ファイルのあるフォルダを指定
  sDir = BrowseForFolder()
  If Len(sDir) = 0 Then
    Exit Sub
  End If

  Set fso = CreateObject("Scripting.FileSystemObject")
  
  Dim fld As Folder
  Dim iRes As Integer
  
  If fso.FolderExists(sDir) Then
    Set fld = fso.GetFolder(sDir)
    iRes = 0
    If fld.SubFolders.Count > 0 Then
      iRes = MsgBox("サブフォルダも検索しますか?", _
             vbYesNoCancel Or vbInformation)
    End If
    Select Case iRes
      Case vbYes:  Call FindFiles(fld, True)
      Case vbNo, 0: Call FindFiles(fld, False)
      Case Else:  ' // User Cancel
    End Select
  End If
  
  Set fld = Nothing
  Set fso = Nothing


End Sub

' // XLS ファイルを検索するサブプロシージャ
Private Sub FindFiles( _
  ByRef fld As Folder, _
  ByVal fCheckSubfolders As Boolean _
)

  ' // ファイルへの処理
  Dim f   As Object
  For Each f In fld.Files
    If f.Name Like "*.xls" And f.Name <> ThisWorkbook.Name Then
      If f.DateLastModified >= mDateFilter Then
        ' // 処理例
        Call MainProc(f)
      End If
    End If
  Next

  ' // サブフォルダ検索オプション
  Dim subFolder As folder
  If fCheckSubfolders Then
    ' // 再帰呼び出し
    For Each subFolder In fld.SubFolders
      Call FindFiles(subFolder, True)
    Next
  End If

End Sub

' // メイン処理 -- FindFiles から順次呼び出されます
Sub MainProc(ByRef f As file)

  ' // ここにご自分で書いたプロシージャを
  ' // とりあえず、セルにでも書き出してみます
  Dim i As Long
  i = Cells(Rows.Count, "A").End(xlUp).Row + 1
  Cells(i, "A").Value = f.Name
  Cells(i, "B").Value = f.DateLastModified

End Sub

' // フォルダ選択ダイアログ
Private Function BrowseForFolder() As String

  Const BIF_RETURNONLYFSDIRS = &H1

  Dim fld As Object
  Set fld = CreateObject("Shell.Application") _
       .BrowseForFolder(0&, "選択します", BIF_RETURNONLYFSDIRS)
  If Not fld Is Nothing Then
    BrowseForFolder = fld.Self.Path
  End If
  Set fld = Nothing

End Function

> 選択フォルダのサブフォルダをのものも含むようにはできないでしょうか。

再帰処理すればできますよ。

Microsoft Scripting Runtime を参照してから、次のコードを試してみて
下さい。
取り急ぎで書いたので、エラーがあるかもしれませんが。。。

まあ、環境によっては使えませんし、推奨はできないのですが、FileSearch
を使ってもサブフォルダを含めた検索はできます。調べればサンプルはすぐ
でてくると思いますよ。

ご参考までに。

Private mDateFilter As Date

Sub フォルダ内のXLS...続きを読む

Qwininet.dllとwsock32.dllについて

クライアントのVBAから、サーバにHTTPで文字データを送信しようとしています。

1. WinAPIの"InternetOpenURL"(wininet.dll)が使えると思いましたが、MSDNLibraryではWinCE用と英語で言っているようでした。W2Kの自PCにも上記DLLは入っていますが、W2Kで使うのは一般的ではないのでしょうか?

2. クライアントのIPアドレスも送信したいので、wsock32.dllのAPIで取得しようとしています。wininetやwsock32が、いつインストールされるものなのか(OS入れた時か、Officeか、IEか等)を調べる手段はあるでしょうか?また、MS社以外の製品によって、これらのDLLがアップデートされてしまうことは通常ないと考えていてよいものでしょうか?

ご教授下さいますよう、よろしくお願いします。

Aベストアンサー

1, もしかしてCE .Net用のMSDNのページを見ていませんか?
http://msdn.microsoft.com/library/en-us/wcewinet/html/cerefinternetopenurl.asp
普通はこちらです。
http://msdn.microsoft.com/library/en-us/wininet/wininet/internetopenurl.asp

IE3.0以降がインストールされたWin95以降、WinNT4.0以降が対象のようです。

2. wininet.dllは元から入っているか、IE3.0以降を入れることでインストールされるらしいです。
wsock32.dllはさらに低レベルの物ですから、それ以前にインストールされているでしょうね。
どちらにしろ現在このdllが入っていない稼動状態のWindowsはほぼ無いと思います。

> MS社以外の製品によって、これらのDLLが
ウイルスとか。
真っ当なソフトなら多分そんなことはしないでしょう。
そもそもライセンスは大丈夫か?って気がしますし。

1, もしかしてCE .Net用のMSDNのページを見ていませんか?
http://msdn.microsoft.com/library/en-us/wcewinet/html/cerefinternetopenurl.asp
普通はこちらです。
http://msdn.microsoft.com/library/en-us/wininet/wininet/internetopenurl.asp

IE3.0以降がインストールされたWin95以降、WinNT4.0以降が対象のようです。

2. wininet.dllは元から入っているか、IE3.0以降を入れることでインストールされるらしいです。
wsock32.dllはさらに低レベルの物ですから、それ以前にインストールされているでし...続きを読む

QエクセルVBA 2千万行のCSVファイルを開きたい

上から順に読み込み、順次処理していき最終的には全部処理します。CSVファイルは読むだけです。

やり方はいくつか考えられます。
1
100万行ずつシートに読み込み、終わったら次を読み込む。CSVファイルは開きっぱなし。

2
100万行ずつのエクセルファイルに分割し、順次開いて処理。ファイル開閉に時間がかかる

3
2千万行の巨大な配列に代入し、順次処理。
CSVファイルは閉じることが出来る。

3がいいように思えますが、どうでしょうか?使用メモリは1と同じですか?

Aベストアンサー

> 懸念点は、最初から最後まで巨大なCSVファイルを開いたまま処理することです。

それに関しては問題ないです。VBAのOpenでファイルを開いた場合、実は一切読んでいません。今何行目を読んでいるかを示すカウンタを用意するだけです。またLine Inputで読み込む場合も、今操作している一行しか相手にしません。

だからこそ、実装している物理メモリ量をはるかに超えるサイズのファイルを扱っていても、仮想メモリのお世話にならずに済むわけです。

なので懸念材料はそこではなく、分割処理することによってデータ同士の断絶が起きると言うか、連続性がなくなることでしょうか。最初の100万行の固まりと、次の100万個の固まりには全くつながりがないことになるので。

QVBSでuser32.dll(Win32API)を使用する方法を教えてください。

はじめてネットで質問します。失礼があったらすみません。

VBSでマウスカーソルの座標を設定する方法を教えてください。
このサイトやあちこち検索してみましたが、VBでのやり方は見つかったのですがVBSでのやり方が見つからなくて心が折れてしまいました。

自分で調べた結果、user32.dll(Win32API )のSetCursorPos を使用する必要があるところまではなんとなく理解しましたがどうやってuser32.dllを使用できように宣言するのかが解りません。

宣言さえできれば

SetCursolPos 0,0

で画面左上にマウスカーソルが移動すると思っています。

この問題で会社と家で3日ほどはまってます。
ご回答よろしくお願い致します。

Aベストアンサー

こんにちは。

VBS から API を直接呼び出すことはできません。

  MSDN: [VBA の機能で VBScript に含まれていない機能]
  http://msdn.microsoft.com/ja-jp/library/cc392401.aspx

上記参考 URL は VBA に関するドキュメントですが、中段にある宣言の
項目にありますとおり、Declare ステートメントがサポートされていない
ためです。

  [SFC mini]
  http://kandk.cafe.coocan.jp/sfcmini/catid-19.html

または、

  [Dynacall] DynWrap.DLL ダウンロードページ(En)
  http://freenet-homepage.de/gborn/WSHBazaar/WSHDynaCall.htm
  [Dynacall] サンプル
  http://www.geocities.jp/seiotaq/DynaHP/index.html#three2

などの Dll をインストールして、そこを経由することになります。

私見ですが、新たなインストールを避けたい場合や面倒に感じるので
あれば Excel VBA を使った方が良いと思います。

こんにちは。

VBS から API を直接呼び出すことはできません。

  MSDN: [VBA の機能で VBScript に含まれていない機能]
  http://msdn.microsoft.com/ja-jp/library/cc392401.aspx

上記参考 URL は VBA に関するドキュメントですが、中段にある宣言の
項目にありますとおり、Declare ステートメントがサポートされていない
ためです。

  [SFC mini]
  http://kandk.cafe.coocan.jp/sfcmini/catid-19.html

または、

  [Dynacall] DynWrap.DLL ダウンロードページ(En)
  http:/...続きを読む

QVBAからファイルをセル入力から開く方法

VBAからファイルをセル入力から開く方法

だれかご教授頂けませんでしょうか?VBAからエクセルファイルを開こうとしています。
そこでシート1のA1セルにファイル名を記述してあり、そのファイル名からファイルを開く事は出来ますでしょうか?
何か良い方法がありましたら教えて頂きたいのですが。

Aベストアンサー

下記で試してください。
パス名の最後には\を付けるようにしてください。

Workbooks.Open "D:\ABC\" & Sheets("シート1").Range("A1").Value


ワークシートのイベントを使う方法も考えられると思います。
BeforeDoubleClickイベント辺りを使って
ファイル名セルをダブルクリックすれば

Excel(エクセル) VBA入門:ワークシートのイベント
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html

QGetNextWindowがDLLファイルUser32.dll内に見つかりません。

前のウィンドウのハンドルを取得したいのですが上記のタイトルにあるエラーメッセージが出ます。

VB6 XPproでやってます。

User32.dllはsystem32フォルダーの中にあるのですが。

Private Declare Function GetNextWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal wCmd As Long) As Long

sub tes()
n=GetNextWindow(me.whnd,3)
end sub

Aベストアンサー

これならどうでしょうか?

Private Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hWnd As Long, ByVal wFlag As Long) As Long

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

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

Aベストアンサー

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

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

QVB.NETでUnzip32.DLLを使うには?

VB2005または2008でUnzip32を使ってzipファイルを解凍する方法を教えてください。
Unzip32のバージョンは5.42、OSはXP32bitSP3です。
UnZipGetVersionではきちんとバージョンが返ってきますので、DLL自体には問題はないと思います。

Classの下に
Public Declare Function UnZip Lib "unzip32.dll" (ByVal hwnd As Long, ByVal szCmdLine As String, ByVal szOutput As String, ByVal dwSize As Long) As Long

を記述し、
UnZip(0, "-o C:\01.zip E:\", vbNull, 0)
と命令してもコンパイラエラーになってしまいます。
第二引数のC:\01.zipはちゃんと存在するファイルであることを一応書き添えておきます。

引数の記述がおかしいと思うのですが、Unzip32のドキュメントを読んでも解決できません。
一日中ぐぐってもVB2005以降での構文サンプルも見つかりませんでした。
UnzioExtractでも引数の説明が意味不明で解凍できませんでした。

できましたら第一から第四までの引数になにを入れたらいいのか、
具体的に指示していけたらありがたいです。

よろしくお願いします。

VB2005または2008でUnzip32を使ってzipファイルを解凍する方法を教えてください。
Unzip32のバージョンは5.42、OSはXP32bitSP3です。
UnZipGetVersionではきちんとバージョンが返ってきますので、DLL自体には問題はないと思います。

Classの下に
Public Declare Function UnZip Lib "unzip32.dll" (ByVal hwnd As Long, ByVal szCmdLine As String, ByVal szOutput As String, ByVal dwSize As Long) As Long

を記述し、
UnZip(0, "-o C:\01.zip E:\", vbNull, 0)
と命令してもコンパイラエラーになってしまい...続きを読む

Aベストアンサー

まず、前回の訂正です。

>"E:\" のところは、出力先ではなく、ZIP 内のファイルを指定するんじゃないかと思います。

は私の勘違いでした。


で、エラーの内容ですが、

http://www.red.oit-net.jp/tatsuya/vb/Unzip32.htm

によると(おそらく、このページを参考にされてたんですよね。)

Private Const ERROR_NOT_FIND_ARC_FILE = &H8029&

とのことなので、C:\01.zip が壊れているのではないかと思います。
一度、他の解凍ソフトで解凍できるか試してみてはどうでしょうか。


ところで、

Public Declare Function UnZip Lib "unzip32.dll" _
(ByVal hwnd As Long, ByVal szCmdLine As String, ByVal szOutput As String, ByVal dwSize As Long) As Integer

で本当にエラーが返ってきますか?
前回書いたように

Public Declare Function UnZip Lib "unzip32.dll" (ByVal hwnd As Integer, ByVal szCmdLine As String, ByVal szOutput As String, ByVal dwSize As Integer) As Integer

と宣言しないと ( hwnd As Integer、dwSize As Integer です。) 例外が発生するのではないかと思うのですが・・・。

まず、前回の訂正です。

>"E:\" のところは、出力先ではなく、ZIP 内のファイルを指定するんじゃないかと思います。

は私の勘違いでした。


で、エラーの内容ですが、

http://www.red.oit-net.jp/tatsuya/vb/Unzip32.htm

によると(おそらく、このページを参考にされてたんですよね。)

Private Const ERROR_NOT_FIND_ARC_FILE = &H8029&

とのことなので、C:\01.zip が壊れているのではないかと思います。
一度、他の解凍ソフトで解凍できるか試してみてはどうでしょうか。


ところで、

Public Declare ...続きを読む

Q他のExcelファイルのVBAコードを検索したい

他のExcelファイルに書かれたVBAコードに、ある特定のキーワード(パス名など)が使われているかを自動的に調べるためのVBAを書きたいと思っています。

仕事で使っているマクロが書かれたExcelファイルからある特定の処理をしているマクロを含むものを検索したいのですが、検索するExcelファイルが膨大なため、順番にExcelファイルを開いてVBAコードをチェックしていく工程をマクロ化したいのです。ファイルを順に開いていく処理はマクロ化できるのですが、書かれたVBAコードのチェックをどうしたらよいか悩んでいます。

「VBAコードに対して検索する」または「VBAコードを1行ずつ変数に代入する」、「モジュールシートをテキストファイルに出力する」などの処理が自動化できれば対応できそうなのですが、そのような処理をExcelVBAで作成できるでしょうか。

なお環境はWindowsXPのExcel2003です。
よろしくお願いいたします。

Aベストアンサー

開いたブックにあるVBAコードをテキストに出力する方法
Sub VBExport(WKB As Workbook)
  Dim A, B
  Set A = WKB.VBProject.VBComponents
  For Each B In A
    B.Export "C:\~" '★テキストファイルでエクスポート
    xxxxxx '★上記テキストファイルを調べる処理
  Next
End Sub
ブックやシートにあるコードも(空でも)出力されます。
もし、標準モジュールのみ処理したい場合は「B.Type = 1」に限り
エクスポートします。

QDLLをREGSVR32しないで利用する方法について。

こんにちは。
Visual Basic 6.0でActiveX DLLを作成しました。
REGSVR32で登録して正常に利用できていますが、
レジストリを使わないで動かしたいと思っています。

フリーソフトではレジストリを使わないで動かせるものがありますが、あのようにするにはどうすればよいのでしょうか。

基本的には、exeファイルとdllファイルを同じフォルダへ置いて動けば良いと思っています。

調べるとLoadLibraryを使えば出来そうに書かれていますが、ご存知の方アドバイスを宜しくお願い致します。

Aベストアンサー

>フリーソフトではレジストリを使わないで動かせるもの
おそらく、何らかのソフトにDLLが含まれていて、インストーラを起動せずに実行できたからだと思うのですが、、、

#1のtodo36さんの発言の延長でお話いたします。



逆にそのDLLを、REGSVR32で登録できますか?

・出来ない場合
ActiveX形式のDLLではありません。
CやVCで作成されたものだと思われます。
レジストリ登録しないで使用します。
VBでは「Declareステートメント」による引き込み、もしくは[API:LoadLibrary]と[API:GetProcAddress]


・出来る場合
ActiveX形式のDLLです。
VBやVCで作成されたものだと思われます。
レジストリ登録して使用します。
VBでは「CreateObject()」、もしくは[API:CoCreateInstance]

です。


もし、そのソフトがレジストリ登録できたのなら、こっそりレジストリに書き込んでいるのとしか思えません。


人気Q&Aランキング