>>8 http://www.iana.org/assignments/port-numbers The Dynamic and/or Private Ports are those from 49152 through 65535 ってあるから、まぁ50000以上にするのが無難かもしれないけど、10000以上なら 隙間が空きまくりなので問題ないでしょ。いちおうかぶらないよう気をつけて。
>>18 終わっているサイトが多いのではなく、検索の仕方、検索エンジンが悪いのかと。 Google (ttp://www.google.com/) がよいかと。 検索単語を半角スペース区切りで指定したらよいかと。 ex :「VB_Forms_コレクション_初心者」とか書けばよいかと。 ではさようならかと。
スレ違ってたらごめんなさい。OUTLOOKのVBAについてです。 他人の予定をVBAで取得するときは、下記のようなプログラムでできたのですが Dim myNameSpace As NameSpace Dim myRecipient As Recipient Dim shceduleFolder As MAPIFolder Set myNameSpace = Application.GetNamespace("MAPI") Set myRecipient = myNameSpace.CreateRecipient("ユーザー名") Set shceduleFolder = myNameSpace.GetSharedDefaultFolder(myRecipient, 9) Msgbox shceduleFolder.Items(1).body
Dim typBrowseInfo As BROWSE_INFO Dim lFoldPointer As Long Dim sPathName As String
With typBrowseInfo .hwOwner = frmMain.hWnd .lRoot = CSIDL_DESKTOP .sTitle = "フォルダを選択してください" .lOptions = BIF_RETURNONLYFSDIRS Or BIF_DONTGOBELOWDOMAIN End With
lFoldPointer = SHBrowseForFolder(typBrowseInfo)
sPathName = String$(256, vbNullChar)
Call SHGetPathFromIDList(lFoldPointer, sPathName)
CoTaskMemFree lFoldPointer
If Left(sPathName, 1) <> Chr(0) Then txtPath.Text = LCase(sPathName) End If
Public Declare Function SHBrowseForFolder Lib "shell32.dll" _ Alias "SHBrowseForFolderA" _ (lpBROWSEINFO As BROWSE_INFO) As Long
Public Declare Function SHGetPathFromIDList Lib "shell32.dll" _ Alias "SHGetPathFromIDListA" _ (ByVal pidl As Long, ByVal pszPath As String) As Long
Public Declare Sub CoTaskMemFree Lib "ole32" (ByVal pv As Long)
Public Type BROWSE_INFO hwOwner As Long lRoot As Long lDspName As Long sTitle As String lOptions As Long lfn As Long lParam As Long lImage As Long End Type
Public Const CSIDL_DESKTOP = &H0 '仮想デスクトップ Public Const CSIDL_PROGRAMS = &H2 'プログラムグループ Public Const CSIDL_CONTROLS = &H3 'コントロールパネル Public Const CSIDL_PRINTERS = &H4 'プリンタ Public Const CSIDL_PERSONAL = &H5 'My Documents Public Const CSIDL_FAVORITES = &H6 'お気に入り Public Const CSIDL_STARTUP = &H7 'スタートアップ Public Const CSIDL_RECENT = &H8 '最近使ったファイル Public Const CSIDL_SENDTO = &H9 '送る Public Const CSIDL_BITBUCKET = &HA 'ごみ箱 Public Const CSIDL_STARTMENU = &HB 'スタートメニュー Public Const CSIDL_DESKTOPDIRECTORY = &H10 'デスクトップフォルダ Public Const CSIDL_DRIVES = &H11 'ドライブ Public Const CSIDL_NETWORK = &H12 'ネットワーク Public Const CSIDL_NETHOOD = &H13 'NetHood Public Const CSIDL_FONTS = &H14 'フォント Public Const CSIDL_TEMPLATES = &H15 'テンプレート
Private Sub Form_Load() Me.AutoRedraw = True Me.ScaleMode = vbPixels wx = Me.ScaleWidth: wy = Me.ScaleHeight rr = 3.14159 / 180 Dim t&: For t = 0 To MM: mx(t) = Rnd * wx: my(t) = Rnd * wy: Next mpd = 0: mpx = wx / 2: mpy = wy / 2: draw End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyLeft Then mpd = (mpd + 10) Mod 360 If KeyCode = vbKeyRight Then mpd = (mpd + 350) Mod 360 If KeyCode = vbKeyUp Then mpx = mpx + 10 * Cos((mpd + 90) * rr) mpy = mpy - 10 * Sin((mpd + 90) * rr) End If draw End Sub
Sub draw() Dim t&, x&, y& Me.Cls: Me.PSet (wx / 2, wy / 2) For t = 0 To MM x = (mx(t) - mpx) * Cos(mpd * rr) - (my(t) - mpy) * Sin(mpd * rr) y = (my(t) - mpy) * Cos(mpd * rr) + (mx(t) - mpx) * Sin(mpd * rr) Me.Line -(wx / 2 + x, wy / 2 + y) Next: Me.Refresh End Sub
>>170 そうです。ホットキーです。 Powertoys for Windows XP を入れたら、 バーチャルデスクトップ機能としてWin+1〜4でデスクトップを入れ替えられるようになったので、 OS起動後にVBSでその辺の処理を自動処理したいと思って。 「Win+■」=「Ctrl+Esc+■」だったららくなんですけどね。。。
Public Declare Function GetTickCount Lib "kernel32" () As Long
Sub Main()
Dim i As Long Dim a As Integer, b As Integer Dim Ans As Integer Dim t0 As Long
a = 16: b = 8 t0 = GetTickCount For i = 0 To 10000000 Ans = a + b Ans = a - b Ans = a * b Ans = a \ b Next i MsgBox ("Time: " & CStr(GetTickCount - t0))
End Sub ------------------------- 平均 220ms
=============================
Delphi6 Personal ------------------------- program SpdDel; uses Windows;
{$APPTYPE CONSOLE} var I,A,B,Ans,T0,T1:Integer; begin A:=16; B:=8; T0 := GetTickCount; for I:=0 to 100000000 do begin Ans := a + b; Ans := a - b; Ans := a * b; Ans := a div b; end; T1 := GetTickCount; write('Time:'); write(T1-T0); end. ------------------------- 平均 234ms
>197 strIn = 例文 strOut = "" strWork = Split(strIn, "。") For Each strLine in strWork If InStr(strLine, "ドキュン") Then strOut = strOut & strLine & "。" Next
>214 適当にやってみたけど ------------------------- Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Const SAMPLE = 1000
Private Sub Command1_Click() Dim I As Long Dim J As Long Dim sTmp As String Dim lTime As Long
Dim A(SAMPLE)
For I = 0 To SAMPLE A(I) = List1.List(I) Next I
lTime = GetTickCount For I = 0 To SAMPLE - 1 For J = SAMPLE To I + 1 Step -1 If A(J) < A(J - 1) Then sTmp = A(J) A(J) = A(J - 1) A(J - 1) = sTmp End If Next J, I Caption = CStr(SAMPLE) & "Samples Time:" & CStr(GetTickCount - lTime) & "msec"
List2.Clear For I = 0 To SAMPLE List2.AddItem A(I) Next I
End Sub
Private Sub Form_Load() Dim I As Long For I = 0 To SAMPLE List1.AddItem Format$(Rnd, "0.000000") Next I End Sub ------------------------------------------------ こんなコードで VBは330msec, Delは100msec位だった。
んじゃこれ使ってみれ。 1.フォーム作ってフォームのコードに貼り付ける。 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) ReleaseCapture SendMessage Form1.hwnd, &hA1, 11, 0 End Sub 2.実行してフォームをドラッグする。
また疑問ができたのでお願いします。 ひとつのプロシージャの中で、まったく関係のないループ処理が複数ある場合、 ループカウンタとして使用する変数を たとえば Dim i As Integerと宣言したら、 そのiを使い回していいんでしょうか。 それともそのループごとにわかりやすいように別に作るほうがいいんでしょうか。 プロの方はどうされているのか 教えてください。
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'キーの入力方向に対してaに値を入れる
If KeyCode = vbKeyUp Then a = 1 If KeyCode = vbKeyDown Then a = 2 If KeyCode = vbKeyLeft Then a = 3 If KeyCode = vbKeyRight Then a = 4 If KeyCode = vbKeyZ Then a = 0 'スタートボタンとして設定
'iをランダムに変化させて1〜4に対応したピクチャを表示
Select Case i Case 1 Picture1.Picture = Picture2.Picture Case 2 Picture1.Picture = Picture3.Picture Case 3 Picture1.Picture = Picture4.Picture Case 4 Picture1.Picture = Picture5.Picture End Select
Dim strBuff_zu As String Dim intFileNum_zu As Integer Dim strFullPath_zu As String 'フルパス Dim strSoutaiPath_zu As String '相対パス
strSoutaiPath_zu = "\tekisei\toi" & i & "\gazou.jpg" strFullPath_zu = App.Path & strSoutaiPath_zu intFileNum_zu = FreeFile() Open strFullPath_zu For Input As #intFileNum_zu Line Input #intFileNum_zu, strBuff_zu
Dim args1, args2 As String Dim nn As Integer args1 = Command() nn = Len(args1) args2 = Mid(args1, 1, nn) Open "C:\My Documents\Doc検索\minami.txt" For Output As #1 Print #1, args2 'Print #1, nn Close #1 ret = Shell("C:\Program Files\FileMaker\ファイルメーカーPro 5.5\ファイルメーカーPro.exe C:\My Documents\Doc検索\Docu検索01.fp5", 1) End End Sub
Option Explicit Private Declare Function DispCallFunc Lib "oleaut32.dll" ( _ ByVal VtblObject As Long, _ ByVal FunctionOffset As Long, _ ByVal CallConv As Long, _ ByVal ReturnType As VBA.VbVarType, _ ByVal ArgsCount As Long, _ ByRef ARefArgsType As Integer, _ ByRef ARefArgs As Long, _ ByRef RefResult As Variant) As Long Function Func1() As Long MsgBox ("(・∀・)ウマクイッタ!") End Function Sub main() Dim pFunc As Long pFunc = GetAddress(AddressOf Func1) MyCall pFunc'ココがポインタ使ってるとこ。 End Sub
Function GetAddress(Functions As Long) As Long GetAddress = Functions End Function
Private Function MyCall(ByVal FunctionPointer As Long) As Long Dim cd(0 To 7) As Byte 'アセンブラコード Dim pTable As Long Dim TableOb(0 To 1) As Long
特にメリットがあるというほどではないけど、 InputBox関数では次のようなことができる。 Dim s As String s = InputBox("キャンセルしたのか、空文字列なのかを判断できます。") If StrPtr(s) = 0 Then Debug.Print "キャンセル" ElseIf s = "" Then Debug.Print "未入力です。" Else Debug.Print "入力した文字列は""" & s & """" End If
>>527 どうもです。 こないだ始めたばっかりで、ADOの本見ながらやってます。 AccessにはSQLでレコードセット取得してやって…ると思います(汁 SELECT * FROM tableで全部取得するのは理解出来ますが、 その状態で現在、レコードセットが握ってるフィールドが何と何か 知る術が分かりません…。
529 名前: デフォルトの名無しさん 投稿日: 02/01/31 22:30
クラス内にタイマイベント書けないっすか?
530 名前: デフォルトの名無しさん 投稿日: 02/01/31 22:41
dim TBLNames() as string dim i as long dim Max as long mAX=Adores.Fields.count-1 redim TBLNames(MAX) for i=0 to MAX TBLNames(i)=Adores.Fields(i).Name next i
残念。ここでいうMyFormはデフォルトのフォームじゃなくて set MyForm = new MyHome で生成したものなのだあ。 よってもし、おっしゃるやり方をUnloadイベントプロシージャでやるとなると set Me = Nothing となる。やってみると当然だがだめ。 一応ひっかけたつもりはなかったがゴメン 他の回答ないか〜。
--- Form1.frm --- Option Explicit Dim mblnNoExit As Boolean Public Property Get NoExit() As Boolean NoExit = mblnNoExit End Property Private Sub Form_Load() mblnNoExit = True End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If MsgBox("--- 終了 ---", vbYesNo) = vbYes Then mblnNoExit = False Else MsgBox "--- 再開 ---", vbCritical Cancel = True End If End Sub Private Sub Form_Terminate() Debug.Print "Terminate" End Sub
--- Module1.bas --- Option Explicit Sub main() Dim MyForm As Form1 Set MyForm = New Form1 MyForm.Show Unload MyForm If Not MyForm.NoExit Then Set MyForm = Nothing End If End Sub
Function abc(i as integer) as String Select Case i Case 1 abc = “いし” Case 2 abc = “はさみ” Case 3 abc = “かみ” Case Else abc = “???” End Select End Functionの時、 abc(0),abc(1),abc(2),abc(3),abc(4),abc(5),abc(6),abc(7),abc(8),abc(9) のように値を設定した時の関数の値を教えてください。
Private Sub cmdTop_Click() Dim i As Integer Dim iCount As Integer
iCount = 0 With lstTabIndex For i = (.ListCount - 1) To 0 Step -1 If (.Selected(i) = True) Then .AddItem .List(i), 0 .RemoveItem i + 1 iCount = iCount + 1 End If Next i For i = 0 To (iCount - 1) .Selected(i) = True Next i End With End Sub
Dim x As ColumnHeader Set x = ListView1.ColumnHeaders.Add(, , "ファイル名", ListView1.Width / 3) Set x = ListView1.ColumnHeaders.Add(, , "サイズ", ListView1.Width / 5, 1) Set x = ListView1.ColumnHeaders.Add(, , "サイズ", 0, 1) '隠しカラム Set x = ListView1.ColumnHeaders.Add(, , "更新日時", ListView1.Width / 4, 1) ListView1.View = lvwReport
クリックされたColumnHeaderがファイルサイズの場合、SortKeyに2を代入
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ColumnHeader) If ColumnHeader.Index = 2 Then ListView1.SortKey = 2 Else ListView1.SortKey = ColumnHeader.Index - 1 End If End Sub
Private Sub cmdTop_Click() Dim i As Integer Dim iCount As Integer iCount = 0 With lstTabIndex i = .ListCount - 1 Do While i > 0 If .Selected(i) = True Then .AddItem .List(i), 0 .Selected(0) = True .RemoveItem i + 1 iCount = iCount + 1 Else i = i - 1 End If If i = iCount - 1 Then Exit Do Loop End With End Sub
Private Sub cmdTop_Click() Dim i As Integer Dim iCount As Integer iCount = 0 With lstTabIndex For i = 0 To .ListCount - 1 If .Selected(i) = True And i <> iCount Then .AddItem .List(i), iCount .Selected(iCount) = True .RemoveItem i + 1 iCount = iCount + 1 End If Next End With End Sub
# i <> iCount 条件が無くても結果は同じだけど、 わざわざ同じ位置に挿入して削除するのはムダだから。
レベルの低い事聞いて申し訳ないのですが,フォームの右端にきたら、左方向へ移動。 フォームの左端にきたら右方向へ移動しなさいという問題なのですが, Dim ax As Integer
Private Sub Form_Load() ax = 100 End Sub
Private Sub Timer1_Timer() Image1.Left = Image1.Left + ax If Image1.Left >= Form1.ScaleWidth - Image1.Width Or Image1.Left <=0 Then ax = -ax End If End Sub では、うまくいくのですが、
Private Sub Timer1_Timer() dim ax as integer ax = 100 Image1.Left = Image1.Left + ax If Image1.Left >= Form1.ScaleWidth - Image1.Width Or Image1.Left < 0 Then ax = -ax End If End Sub だとうまくいきません。これはなぜですか?タイマーイベントだと宣言はgeneral declarationsでしなければならい とか、この場合axなどの初期値はform loadに書かなければならないという決まりがあるのでしょうか?
タイマーを使うなら Private mlngCount As Long Private Sub Form_Load() Timer1.Interval=1000 Timer1.Enabled=True End Sub Private Sub Timer1_Timer() mlngCount=mlngCount+1 if mlngCount >= 26 Then Exit Sub Debug.Print Chr$(64+mlngCount) End Sub