taisuke555 の回答履歴

全444件中1~20件表示
  • VB6 APIを使った文字印刷について

    VB6でAPI(TextOut)を使って印刷する必要があるのですが、インターネットで調べたらサンプルがあってそれを参考にさせてもらおうと思っています。 ただ、当方としては、印刷位置と印刷文字サイズをmmで指定したく、色々試しているのですがうまくいきません。お分かりになる方どこがおかしいかご教示願えないでしょうか? サンプルのソースコードを以下に張っておきます。formにCommandボタンを一つ張ってください。 Option Explicit Dim FX As Integer 'フォントの横サイズ Dim FY As Integer 'フォントの縦サイズ Dim cx As Long '表示X座標 Dim cy As Long '表示Y座標 Private Const DEFAULT_CHARSET = 1 Private Const OUT_DEFAULT_PRECIS = 0 Private Const DEFAULT_QUALITY = 0 Private Const DEFAULT_PITCH = 0 Private Const FF_DONTCARE = 0 Private Const LF_FACESIZE = 32 Private Type Size cx As Long cy As Long End Type Private Type LOGFONT lfHeight As Long lfWidth As Long lfEscapement As Long lfOrientation As Long lfWeight As Long lfItalic As Byte lfUnderline As Byte lfStrikeOut As Byte lfCharSet As Byte lfOutPrecision As Byte lfClipPrecision As Byte lfQuality As Byte lfPitchAndFamily As Byte lfFaceName(LF_FACESIZE) As Byte End Type Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Private Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As Size) As Long Private Sub Command1_Click() Printer.Print "" '文字印刷位置縦0mm 文字幅6mm、文字高6mmで印刷 FX = 6: FY = 6 cx = 0: cy = 0 PrintText "testてすと1" '文字印刷位置縦50mm 文字幅6mm、文字高12mmで印刷 FX = 6: FY = 12 cx = 0: cy = 50 PrintText "testてすと2" '縦倍角 '文字印刷位置縦200mm 文字幅12mm、文字高6mmで印刷 FX = 12: FY = 6 cx = 0: cy = 100 PrintText "testてすと3" '横倍角 Printer.EndDoc End Sub Sub PrintText(text As String) Dim LF As LOGFONT Dim IX As Integer Dim TempByteArray() As Byte Dim ByteArrayLimit As Long Dim OldFT As Long Dim NewFT As Long Dim rtn As Long Dim hdc As Long Dim PX As Long Dim PY As Long hdc = Printer.hdc '↓(1)ここで文字印刷位置をmmかTwipに変換しているつもりなのですが・・・ PX = Printer.ScaleX(cx, vbMillimeters, vbTwips) PY = Printer.ScaleY(cy, vbMillimeters, vbTwips) With LF .lfEscapement = 0 '文字の回転角度(角度*10) '↓(2)ここで文字サイズをmmかTwipに変換しているつもりなのですが・・・ .lfHeight = Printer.ScaleY(FY, vbMillimeters, vbTwips) '文字の高さ .lfWidth = Printer.ScaleX(FX, vbMillimeters, vbTwips) '文字の幅 .lfWeight = 400 '文字の太さ .lfItalic = False '斜体 .lfUnderline = False '下線 .lfStrikeOut = False '取り消し線 .lfCharSet = DEFAULT_CHARSET .lfOutPrecision = OUT_DEFAULT_PRECIS .lfClipPrecision = OUT_DEFAULT_PRECIS .lfQuality = DEFAULT_QUALITY .lfPitchAndFamily = DEFAULT_PITCH Or FF_DONTCARE TempByteArray = StrConv("MS ゴシック", vbFromUnicode) ByteArrayLimit = UBound(TempByteArray) For IX = 0 To ByteArrayLimit .lfFaceName(IX) = TempByteArray(IX) Next End With NewFT = CreateFontIndirect(LF) OldFT = SelectObject(hdc, NewFT) TextOut hdc, PX, PY, text, LenB(StrConv(text, vbFromUnicode)) rtn = SelectObject(hdc, OldFT) rtn = DeleteObject(NewFT) End Sub 以上よろしくおねがいします。

  • シリアル通信:オフライン時にうまく終了してくれません

    シリアルプリンタの制御をVB6で行っております。 以下のようなコードですが、うまく終了してくれません。 'グローバル 'プリンタの状態 Dim BUF as String '起動時 Private Sub Form_Load() MSComm1.PortOpen = True Text1.Text = "" Timer1.Enabled = True End Sub '終了 Private Sub Form_Unload(Cancel As Integer) Timer1.Enabled = False MSComm1.PortOpen = False End Sub 'タイマー Private Sub Timer1_Timer() Timer1.Enabled = False Call CheckPrint Timer1.Enabled = True End Sub Private Sub MSComm1_OnComm() Dim TimeOut As Long Dim sTime As Long Dim eTime As Long Select Case MSComm1.CommEvent '受信 Case comEvReceive TimeOut = 100 sTime = timeGetTime Do If (TimeOut - eTime) < 0 Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until MSComm1.InBufferCount >= 82 BUF = MSComm1.Input End Select End Sub プリンタの状態チェック Private Sub CheckPrint() Dim sTime As Long Dim eTime As Long Dim TimeOut As Long Dim i As Integer Dim n As Integer BUF = "" 'プリンタの情報取得コマンド MSComm1.Output = "~HS" 'タイマ開始 TimeOut = 400 sTime = timeGetTime eTime = 0 Do DoEvents If BUF <> "" Then Exit Do End If eTime = (timeGetTime - sTime) Loop Until TimeOut - eTime < 0 If BUF <> "" Then ... .. 宜しくお願いします。

  • Excelの関数(多分countifだと思います)について

    aとbがあります。 3行目の値が10以上の時のaとbの個数をそれぞれ数えたい時の式はどのようにすればよいでしょうか?教えて下さい。E列はその答えです。 例)aはB1に値を持たないのでD1のみの1になりますます。bはB2とD2で2になります。    A  B  C   D  E 1  a     1   1  1 2  b  1  1   1  2 3    12  8  11

  • エクセルVBAの構文。 どこが間違っているのでしょうか?

    以下の2つは同じ意味だと思うのですが、test2はエラーになります。どうしてなのでしょうか? Sub test1() ActiveSheet.Shapes.AddShape(msoShapeRectangle, 300#, 100#, 140#, 80#).Select Selection.Formula = "$A$1" End Sub Sub test2() With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 300#, 100#, 140#, 80#) .Formula = "$A$1" End With End Sub

  • VBAでコメントにセルの値の設定

    VBAでコメントにセルの値や変数の値を設定する処理はあるのですか? よろしくお願いします。

  • VBAでコメントにセルの値の設定

    VBAでコメントにセルの値や変数の値を設定する処理はあるのですか? よろしくお願いします。

  • 数値の組み合わせを求める方法

    数値の組み合わせを求めるのによい方法はありませんか。 具体例を書きますのでよろしくお願いします。 2,3,5,8の4個の数値があります。 この数値のいずれかを足して10になる組み合わせを 求めたい。 この場合の答えは、 2+3+5=10または2+8=10から、 2,3,5の組み合わせ、または2,8の組み合わせ となります。 また、上の場合で、足して11になる数値の組み合わ せは、3,8の組み合わせのみです。 これらは、簡単に求められますが、数値が多くなって くると手で計算していては、ものすごく時間がかかって しまいます。 エクセルを使って、ササーッと求める方法があったら 教えてください。

  • 数値の組み合わせを求める方法

    数値の組み合わせを求めるのによい方法はありませんか。 具体例を書きますのでよろしくお願いします。 2,3,5,8の4個の数値があります。 この数値のいずれかを足して10になる組み合わせを 求めたい。 この場合の答えは、 2+3+5=10または2+8=10から、 2,3,5の組み合わせ、または2,8の組み合わせ となります。 また、上の場合で、足して11になる数値の組み合わ せは、3,8の組み合わせのみです。 これらは、簡単に求められますが、数値が多くなって くると手で計算していては、ものすごく時間がかかって しまいます。 エクセルを使って、ササーッと求める方法があったら 教えてください。

  • UsedRangeの範囲の設定

    入力したデータの一番下にの行に"data_end"と入力するようにしたいと思っております。 今、UsedRangeを使用してその下の行に"data_end"と入力しようとすると以前に使用した行まで選ばれてしまい、空白の行ができてしまう状態になっています。また、CurrentRegionを使用すると空白行があると空白行以降を選んでもらえません。(データがトビトビにあるので空白行と認識されてしまう可能性があります。) しかも、データの入力されているセルは別のシートで計算式に参照されているのでいらない行を削除することはできません。 今入力されている状態の一番下の行を認識するにはどうしたらよいでしょうか? プログラムは以下のように入力してあります。 Sub test() Dim row_end As Integer Sheets("sheet1").Select ActiveSheet.UsedRange.Select row_end = Selection.Rows.Count Sheets("sheet1").Cells(row_end + 1, 1).Value = "data_end" End Sub ものすごく基本的な質問かもしれませんが、よろしくお願いしますっっっ。

  • エクセルで金種表を作り方を教えてください

    銀行へ両替依頼をするときにいつも悩みます 例えば13,000,000円あります。 前日の残金は8,663,600円です。 本日の入金は4,336,400円です。 この本日入金額を金種ごとに振り分けるのですが 条件があるのです。 各金種には前日の残金があり、その日の合計の金額もあります。さらには受取りやすいように束になるようにしたいのです。 残金 1万円 4,650,000円 5千円 1,415,000円   1千円 2,261,000円 5百円  182,000円 1百円  155,600円とあります。 本日入金する4,336,400円を以下の条件で振り分けます 5千円と千円は概ね2百万円にします 5百円と百円は概ね20万円にします そのとき受取りやすいように束で受け取りたいのです 5千円は50万が束、千円は10万が束 5百円は2万5千円が束、百円は5千円が束です 端数は百円千円一万円とそれぞれ出てきます。 本日入金する金額を金種ごとに振り分ける 計算式ありませんか?

  • エクセルの質問。  対象範囲の中で、一番下に位置する値を返す関数。

    例えば… A1~A9までの9つのセルに、A1=100,A5=120,A6=20という3つの値が入っています。 A1~A9の範囲で一番下にある値を表示(ここではA6の20という値)するような関数ってあるのでしょうか?

  • エクセルRangeオブジェクトの使い方

     エクセルで名簿を作ろうとしています。よくあることですが、入力を簡単にするため、入力メニューを作り、一人目を入力したら次の行に行くようにマクロを考えているのですが、その前に最初のセルを選択させようと下記のように記述したところ、コンパイル時に実行時エラー'1004'アプリケーション定義またはオブジェクト定義エラーです。というエラーになります。  また、作成したコマンドボタンから実行しても実行時エラー'1004'RangeクラスのSelectメソッドが失敗しましたというエラーになります。 Rangeオブジェクトの記載の仕方は間違いないと思うのですが....ちなみに書こうとしている意味は、表が、全く登録がない場合、最初B2セルから記載していくように考え、追加登録していくときはB1セル(項目に当たる行)から空白行になるまで改行するように考えました。 記述内容 Sub CommandButton1_Click() Worksheets("名簿").Select If Range("B2").Value = "" Then Range("B2").Select ←エラーになる行です Else Range("B1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Select End If 名簿登録.Show End Sub

  • 日数消化率の計算方法は

    売上と実績の予算を組む為に 日数消化率の表記が必要です。 単位は一ヶ月です。 例えば 2004/5の場合  20日の時点では 64.5%ですよね。  20日÷31日の計算式でよいのですが・・・  いちいち「20」を入力するのは面倒だし。 そこで無い知恵を絞ったのが 次の方法です。  日にちの経過数を計算する事が出来る事をを知りました。  そこで・・・ (1) 前月の最終日を入力(2004/04/30と) (2) TODAY関数を入力 (3) (2)から(1)を引いて 経過日数を出して (4) (3)÷31(5月の日数)で消化率を出す これで 一応は出来ているのですが もっと簡単でスリムな方法はありませんか?    よろしくお願い致します。 

  • excelで勝手にクリップボードツールバーが出てこないようにするには?

    Excel2000で、何度もカット(コピー)&ペーストを繰り返していると勝手にクリップボードのツールバーが出てきます。 うっとうしいので出ないようにしたいのですが、その方法をご存じの方いらっしゃいましたらご教授いただけませんでしょうか。 よろしくお願いいたします。

  • 形式を指定して張り付け をもっと簡単にしたい

    WINXPH、Office XPのExcelを使用しています 張り付けしたときに数式のみを張り付けたいのですが、 毎回張り付けの時にコピーはCtrl+Cなのに、張り付けの時に右クリックしてから「形式を選択して貼り付け」→「数式」を選ぶのがめんどくさいので、 数式だけ張り付ける場合のショートカット、もしくはエクセルの場合のみCtrl+Vで数式だけ張り付けになる設定、というのはないでしょうか

  • 在庫管理表について。

    今、在庫管理表を作ってるのですが、計算式で行き詰まってます。Aと言う製品を作るのに最低3個以上のパーツを使います。たとえば製品Aを作るのにa,b,cの3個のパーツを使用するとして、Sheet1に製品Aの完成品の個数、Sheet2には製品Aに使用したパーツ(a,b,c)のそれぞれの個数が入力されています。ここで、製品Aを100個作ったとしてSheet1に完成品の個数100を入力したとき Sheet2のパーツ(a,b,c)の個数も完成品Aが増えると自動的に100個減るようにするにはどうすればいいのでしょうか?

  • Excelにて、右クリックメニューが表示されない

    先日から、Excelを使用している際、右クリックをしても、メニューが表示されなくなりました。セルをWクリックして、セル内にカーソルが入れば、右クリックは表示されます。再インストールしても状況が変わらないので、どなたか解決方法をご存知でしたら、お教えいただきたいと思っております。

  • MSFlexGridのスクロールバー位置

    VB5(SP3)です。 ある検索条件でMSFlexGridに100行表示させた後、垂直スクロールバーで50行ほど下方向にスクロールさせます。 この状態で違う検索条件で1行表示させた時、垂直スクロールバーの位置が変わらないため(TOPにこない)に何も表示されません。垂直スクロールバーを上方向にスクロールさせれば出てきます。 垂直スクロールバーをTOP位置に持ってくる方法はありませんか? MSFlexGrid.VscrollBar.Value=0とかあれば・・・・

  • 確率 Aさんはn回Bさんはm回先にじゃんけんに勝つと勝利

    Aさんはn回Bさんはm回先にじゃんけんに勝つと はじめて勝利とみなされる勝負をしたときにAさんが 勝利する確立をnとmを用いて表わしたいのですが どうもn≠mの時がわかりません。 どうやったら表わせるでしょうか

  • 確率 Aさんはn回Bさんはm回先にじゃんけんに勝つと勝利

    Aさんはn回Bさんはm回先にじゃんけんに勝つと はじめて勝利とみなされる勝負をしたときにAさんが 勝利する確立をnとmを用いて表わしたいのですが どうもn≠mの時がわかりません。 どうやったら表わせるでしょうか