[[20060127144827]] 『文字の入力中に、マクロ実行』(キリキ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『文字の入力中に、マクロ実行』(キリキ)
 いつもお世話になっております。
 
[[20060125162827]] 『「」の設定』(はちころ) 
 こちらでの質問で、ツールバーを作ればいいのかな?
 と思い、見様見真似で作成してみましたが、
 肝心な事(編集中に"「"を挿入)が解りません。。。

 ThisWorkbookへ
'- - - - - - - - - - - - - - - - - - 
  Private Const KagiKakko = """「"" ""」""の挿入"

 Private Sub Workbook_Open()
    Call KakkoOpen 'ツールバー作成
 End Sub

 Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call KakkoClose 'ツールバー削除
 End Sub

 Private Sub KakkoClose() 'ツールバー削除
    On Error Resume Next
    Application.CommandBars(KagiKakko).Delete
 End Sub

 Private Sub KakkoOpen()  'ツールバー作成
 Dim BarName As CommandBar
 Dim KakkoButton As CommandBarButton

    Call KakkoClose 'ツールバー削除

    With Application.CommandBars.Add(Temporary:=True)
        .Name = KagiKakko
        .Position = msoBarTop
        .Visible = True
    End With

    With Application.CommandBars(KagiKakko).Controls.Add()
        .Style = msoButtonCaption
        .Caption = """「"""
        .TooltipText = """「の挿入"""
        .OnAction = "Hidari"
    End With
    With Application.CommandBars(KagiKakko).Controls.Add()
        .Style = msoButtonCaption
        .Caption = """」"""
        .TooltipText = """」の挿入"""
        .OnAction = "Migi"
    End With

 End Sub

 「Sub Hidari」と「Sub migi」は、どんなコードになるのでしょうか?
 そもそも、出来ないことなんでしょうか?

 (キリキ)(〃⌒o⌒)b

 私の記憶が正しければ、セル編集中にマクロは呼び出せません。
【参考】E00M094 セル編集中はマクロが実行出来ない?
http://homepage2.nifty.com/kmado/kvba.htm
こちらで紹介されているのはマクロをあらかじめ実行してから時限爆弾のように
メッセージを表示するものなので、文字挿入ツールバーのように編集中にクリック
して実行できる類のものでもありません。
一応上記を参考にして下記のようなものを作ってみました。
 
 Rem ThisWorkbookモジュール
 Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
     Dim res As Variant, Mystr As String
     res = MsgBox("「(y) or 」(n)", vbYesNoCancel)
     If res = vbYes Then
         Mystr = "「"
     ElseIf res = vbNo Then
         Mystr = "」"
     Else
         Cancel = True
         Exit Sub
     End If
     Call Putkakko(Mystr)
 End Sub
 
 Rem 標準モジュール
 Declare Function SetTimer Lib "user32" _
   (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerfunc As Long) As Long
 Declare Function KillTimer Lib "user32" _
   (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
 Dim kk As String

 Private Function kakko(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal SysTime As Long) As Long
     KillTimer 0, idEvent
     If CommandBars.FindControl(ID:=18).Enabled Then Exit Function
     SendKeys kk
 End Function

 Sub Putkakko(Mystr As String)
     kk = Mystr
     SetTimer 0, 0, 200, AddressOf kakko
 End Sub
 
不都合点
・msgboxを使用しての代用品
・ダブルクリックした文字位置にしか挿入できない
 (タイマーを長めに取れば位置決めするくらいの時間はできます)
・連続挿入できない
 (二つ挿入するときはいったんEnter確定してもう一度ダブルクリック実行)
・みやほりんが理解して作っていないこと(何質問されても答えられない)
 
オートコレクトで入力しやすい文字の組み合わせを自動変換したほうが楽ではないでしょうか。
(みやほりん)(-_∂)b

 なるほど、みやほりんさんありがとうございます。

 かなり難しいですね。。。
 でも、こんな方法もあるんですね〜♪

 σ(^o^;)なりに、考えてみました。

 標準モジュール
 '---------------
Sub hidari()
Dim MyVal As Variant
On Error Resume Next
MyVal = ActiveCell.Value
ActiveCell.FormulaR1C1 = MyVal & "「"
End Sub
 
Sub migi()
Dim MyVal As Variant
On Error Resume Next
MyVal = ActiveCell.Value
ActiveCell.FormulaR1C1 = MyVal & "」"
End Sub

 不都合点
 ・途中に入力することが出来ない
 ・文字入力の途中に入力したい場合は、Enterで確定してからカーソルを入力したいセルに持っていかなくてはならない
 始めに、"「" "」"の両方クリックしてから、編集した方が楽かも?

 >オートコレクトで入力しやすい文字の組み合わせを自動変換したほうが楽ではないでしょうか。
 そうですね、その方が良いとσ(^o^;)も思います。

 どうもありがとうございました〜♪
 (キリキ)(〃⌒o⌒)b

 やっつけで作ってみました。
 コマンドボタンを貼り付けて、試してください。
 コマンドボタンを押す前に、「他のセル」を一度クリックしてください。

 Private oldAd(1) As String

 Private Sub CommandButton1_Click()
 With Range(oldAd(0))
     .Value = .Value & "["
     .Activate
     SendKeys "{F2}"
 End With
 End Sub

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If IsEmpty(oldAd(1)) Then
     oldAd(1) = "A1"
 Else
     oldAd(0) = oldAd(1)
     oldAd(1) = Target.Cells(1, 1).Address
 End If
 End Sub

 ご希望どうりでは無いでしょうが。(seiya)

 seiyaさんまで〜♪
 ありがとうございます。

 これはこれで、面白いですね〜^^
 >「他のセル」を一度クリックしてください。
 ココがみそですね〜
 事前にクリックさせておいて、その前のセルが対象って事ですね
 σ(^o^;)のは、そのセルにもう一度戻さなくてはいけないから、効率的ではありますね〜♪

 またまた、勉強させていただきました。
 (キリキ)(〃⌒o⌒)b


 VBまで組める技術があれば、常に前面に表示するダイアログを作成して、ボタン
コントロールクリックなどで編集中のExcelアプリケーションに"「"や"」"の文字列
を送れると思います。たぶん、です。私には検証する能力はありませんが、そういう
フリーウェアを以前使ってみたことがあるので技術的にはできるのでしょう。
 
VBではなくても、Excel以外のアプリケーションからなら編集中のセルにSendKeysで
"「"や"」"を入力することはできるかと思いますが、かと言って、そのためだけに、
「Wordをアクティブにしてコマンドボタンを押す」というのは実用上は疑問。
(みやほりん)(-_∂)b

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.