• ベストアンサー

秀丸マクロ インプット関数使用時のメッセージボックスサイズについて

秀丸Ver4.17を使用してマクロを作成しています。 $a=input("a\nb\nc\nd\ne\n"); とした時に、最初のa、b、cは表示されるのですが、d、e、fは、メッセージボックスの縦の長さが短く隠れてしまいます。 どなたか解決方法をご存知ないでしょうか? 最新の秀丸にVerアップすれば、解決できるでしょうか? #過去に作ったマクロが多くあり、Verアップで正常に動かなくなるのでは?と思い、Verアップはためらっています。

  • hidezo
  • お礼率85% (193/225)

質問者が選んだベストアンサー

  • ベストアンサー
  • harlan
  • ベストアンサー率77% (234/303)
回答No.1

input関数のダイアログは大きくはならないようです。 http://maruo.dyndns.org:81/hidesoft/hidesoft_4/x01666.html ただ、これは2001年の話なので、現在はどうなっているかわかりません。(私は、Ver4.16です) ここでも話に出てたように、マクロサーバや田楽サーバ/DLLを使うと、もっと柔軟なダイアログを 作れます。http://www.ceres.dti.ne.jp/~sugiura/hidemaru/macros/dgserver/ 以下は、田楽DLLを使ったinput関数の代わりとなる秀丸マクロです。 田楽DLL Ver2.81で動作確認しています。 //=========== 田楽DLLを使ったinputマクロ =========== disablebreak; loaddll hidemarudir + "\\DengakuDLL.dll"; if (!result) { message "田楽DLLをロードできませんでした"; endmacro; } $title = "幅40文字のダイアログ"; #width = 40; $mes[0] = "1行目"; $mes[1] = "2行目"; $mes[2] = "3行目"; $mes[3] = "4行目"; $mes[4] = "5行目"; if (dllfunc("NEWDIALOG",$title,#width,"") ==0 || dllfunc("NEWCONTROL","text","",$mes[0]) ==0 || dllfunc("NEWCONTROL","text","",$mes[1]) ==0 || dllfunc("NEWCONTROL","text","",$mes[2]) ==0 || dllfunc("NEWCONTROL","text","",$mes[3]) ==0 || dllfunc("NEWCONTROL","text","",$mes[4]) ==0 || dllfunc("NEWCONTROL","edit","input","") ==0 || dllfunc("NEWCONTROL","okcancel","","") ==0) { message "ダイアログの作成に失敗しました"; goto END; } if (dllfunc("SHOWDIALOG",hidemaruhandle(0),0) ==0) { message "ダイアログの表示に失敗しました"; goto END; } $button = ""; while (strlen($button) == 0) { $button = dllfuncstr("WAITCTRLNOTIFY",10); } if (dllfunc("ENDDIALOG") == 0) { message "ダイアログを閉じるのに失敗しました"; goto END; } if ($button == "0") $str = "キャンセルされました"; else $str = dllfuncstr("GETCTRLSTRING","input"); message $str; END: freedll; endmacro; // ================ End of macro ===================

hidezo
質問者

お礼

御礼遅くなってしまい申し訳ありません。 秀丸マクロ単体では解決できないことがわかりましたので、素直に教えていただいた田楽DLLや別の言語などを考えたいと思います。 ありがとうございました。

関連するQ&A

  • インプットボックスの書式について

    エクセルVBAを勉強中の初心者です 現在作成中のマクロでインプットボックスを使用しているのですが 次のような点がわかりません、どなたか教えて頂けないでしょうか 1。インプットボックスのキャンセルボタンが押されたことを検出する方法 2。インプットボックスの縦、横の幅の調整方法 3。数値を全角で入力したとき、半角にして取り出す方法 4。アルファベットを全角で入力したとき、半角で取り出す方法 1~4のどれでも結構ですのでご指導お願いします tomosato

  • 秀丸のマクロ実行時に「バッファがオーバーしました。」というエラーが出ま

    秀丸のマクロ実行時に「バッファがオーバーしました。」というエラーが出ました。 秀丸で、マクロ → キー操作の読込からマクロを読込もうとした時に、下記のエラーが発生しました。 アルファベットの全角→半角変換.mac(47): バッファがオーバーしました。 マクロの内容は setcompatiblemode 0x0F; begingroupundo; replaceallfast "0" , "0"; から始まり replaceallfast "?" , "?"; if( ! result ) beep; endgroupundo 1; で終わるもので、全角のアルファベット、数字、一部の記号を半角に置換するだけのものです。 対象の文字は 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+-*/():=&!? の全73文字で、47行目では I を変換しようとしています。 以前は問題なく動いていたと思うのですが、なぜか今はエラーが出ます。 現秀丸のVerは7.11 で、過去に動いていた時のVerは覚えておりません。 OSはWinXPです。 解決方法など教えていただければ幸いです。

  • 指定行を取得する方法を教えて下さい。

    変数 $a = "a\nb\nc\nd\ne\nf\ng\n"; としています。 echo $a; の結果をブラウザで表示させてソースを見ると、下記のように意図した通り表示されます。 a b c d e f g この変数 $a の中から3行目("C")だけを取り出したい場合のようにすればよいのでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP
  • エクセルマクロ インプットボックスの使い方

    エクセル2013です。 マクロの途中で作業者にマウスで列を選択してもらい その取得した列番号を使って、いろいろ処理を行うマクロを作りました。 Sub 実験() Dim マウス選択 As Range Dim 選択列 Dim 選択月表示 Dim 質問 Dim 最終列 Dim 最終行 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 On Error GoTo myError Set マウス選択 = Application.InputBox("編集したい月の列を選択してください", Type:=8) 選択列 = マウス選択.Column 選択月表示 = Cells(8, 選択列).Value 質問 = MsgBox("選択した月は " & 選択月表示 & " です。いいですか?", vbYesNo) If 質問 = vbYes Then MsgBox "処理を行います" Else MsgBox "プログラムを中断します" Exit Sub End If ---処理内容---- myError: MsgBox "キャンセルが押されました。プログラム終了します。" End Sub 通常列を選択してくれればインプットボックス内には $V:$V などと表示されますが 行を選択されると $35:$35 などと表示され セルの一部を選択されると $D$40 などと表示されます。 行やセルを選択してもエラーなく最後まで進みますが選択した場所によっては とんでもない結果になってしまいます。 基本、列以外を選択したらメッセージボックスでアラームするか プログラムを停止させたいのですがどのような方法が有りますでしょうか? よろしくお願いします。

  • カウントアップするマクロにInputフォームなどを設けて汎用的にしたい

    下記は、1~3712までの数字を、12回ずつ繰り返し記述したら カウントアップするマクロです(3712*12=44,544行を生成)。 Sub Macro1() Dim a(44543, 2) For k = 0 To (UBound(a, 1) + 1) / 12 - 1 For j = 0 To 11 tmp1 = CStr(1 + k) a(k * 12 + j, 0) = tmp1 Next Next Range(Cells(1, 1), Cells(UBound(a, 1) + 1, UBound(a, 2) + 1)).Value = a End Sub これですと、問答無用で1から3712まで記述されますが、汎用性を 持たせるため、Inputボックスなどのフォームで、開始値と終了値を 指定できるような記述をご教示願えますでしょうか。 開始値 100、終了値 200 とそれぞれ指定するなら、下記のように 記述されるイメージです。よろしくお願い致します。 100 100 100 100 100 100 100 100 100 100 100 100 101 101 101 101 101 101 101 101 101 101 101 101 102 102 :(略) 199 200 200 200 200 200 200 200 200 200 200 200 200

  • メッセージボックスを表示したいのですが

    EXCEL2003でいろいろなリストなどを作っています。 普段使うのはパソコンに疎い年配の人たちなので、できるだけややこしい操作は必要の無いようにしていますが、エラーが発生するとパニックになってしまうようです。 特に多いのがVLOOKUP等で検索する文字列が無い場合に出る#N/Aなのですが、このエラーが発生した時にメッセージボックスを表示させ文字列を入力する前の状態にもどすイベントマクロを組みたいのですが、過去の質問等をいろいろ探してもなかなか見つけられません。 どなたかご教授をお願いいたします。

  • エクセルでVLOOKUPで検出できなかったらメッセージボックスを出した

    エクセルでVLOOKUPで検出できなかったらメッセージボックスを出したい。 シート1のセルB1に =VLOOKUP(A1,シート2!B2:F1000,2,FALSE) と式を入れてあります。 シート1のセルA1に入力をするとシート2のB列から入力した同レコード を抽出しその行のC列を シート1のセルB1に表示します。 シート2に同レコードが無ければ セルB1には #N/A と表示されます。 この時にこの#N/Aの表示をトリガーに メッセージボックスで 「データーがありません」と表示させるのはどうしたらいいでしょうか? マクロを組みましたが、わざとシート2にはない値を入力した時に メッセージボックスが表示される場合と表示されない場合があって困っています。 ------------------------------------------------ Range("B1").Select If IsError(ActiveCell.Value) Then errval = ActiveCell.Value Select Case errval Case CVErr(xlErrDiv0) MsgBox "#DIV/0! エラー" Case CVErr(xlErrNA) If vbOK = MsgBox(" データーがありません") Then Exit Sub End Select End If ----------------------------------------------- またこのメッセージボックスには「OK」と表示されています。 このOKをクリックすると 登録してある別のマクロを起動させる事はできますか? よろしくお願いします。

  • 教えてください!!

    このソースを実行しても、1~4を選んでも足し算になってしまいます。どこが違っているか、教えてください。 int main(void) { int na, nb, nc; printf("二つの整数の演算を行います。\n"); printf("二つの整数を入力してください\n"); printf("整数A"); scanf("%d", &na); printf("整数B"); scanf("%d", &nb); printf("1:加算\n2:減算\n3:乗算\n4:除算\n"); printf("1~4のどれかを入力してください。"); scanf("%d", &nc); switch(nc) { case1: printf("%d + %dは、%dです。\n", na, nb, na + nb); break; case2: printf("%d - %dは、%dです。\n", na, nb, na - nb); break; case3: printf("%d * %dは、%dです。\n", na, nb, na * nb); break; case4: printf("%d / %dは、%dです。\n", na, nb, na / nb); break; default: printf("%dは番号が違います。\n"); } return(0); }

  • 教えてください

    case4をキャストしたいのですが、どこにdoubleをつければよいのですか?josan(na/nb)の前においたのですがうまく表示されませんでした。教えてください。 #include <stdio.h> int kasan(int a, int b) { return(a+b); } int gensan(int a, int b) { return(a-b); } int jousan(int a, int b) { return(a*b); } int josan(int a, int b) { return(a/b); } int main(void) { int na, nb, nc; puts("二つの整数を入力してください"); printf("整数A"); scanf("%d", &na); printf("整数b"); scanf("%d", &nb); printf("1:加算\n2:減算\n3:乗算\n4除算\n"); printf("1から4までのどれかを入力してください"); scanf("%d", &nc); switch(nc){ case 1: printf("%d+%dは、%dです。\n", na, nb, kasan(na,nb)); break; case 2: printf("%d-%dは、%dです。\n", na, nb, gensan(na,nb)); break; case 3: printf("%d*%dは、%dです。\n", na, nb, jousan(na,nb)); break; case 4: printf("%d/%dは、%fです。\n", na, nb, josan(na,nb)); break; default: printf("番号が違います。\n"); break; } return(0); }

  • c言語の配列の先頭アドレスが偶数アドレスとなる理由について

    c言語の配列の先頭アドレスが偶数アドレスとなる理由について 下記のように実行結果をで見ると、配列Sの先頭アドレスと配列Cの先頭アドレス共に偶数アドレスなる理由を教えて頂きたい。 /*list0105*/ #include <stdio.h> main() { char na=1; char nb=1; char c[2] ={1,2}; char s[3] = {1,2,3}; char nc=1; char nd=1; printf("%p\n",&na); printf("%p\n",&nb); printf("%p %p \n", &c[0],&c[1] ); printf("%p %p %p \n", &s[0],&s[1] ,&s[2] ); printf("%p\n",&nc); printf("%p\n",&nd); } 実行結果 0xbffff8cf 0xbffff8ce 0xbffff8cc 0xbffff8cd ← c配列 0xbffff8b0 0xbffff8b1 0xbffff8b2 ← S配列 0xbffff8af 0xbffff8ae

専門家に質問してみよう