Word VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


113 / 308 ツリー ←次へ | 前へ→

【539】エクセルに入力した文字列をワードに入力 k.ぬま 07/10/30(火) 22:57 質問[未読]
【541】Re:エクセルに入力した文字列をワードに入力 H. C. Shinopy 07/11/3(土) 21:52 回答[未読]
【542】Re:エクセルに入力した文字列をワードに入力 K.ぬま 07/11/11(日) 12:47 回答[未読]
【543】Re:エクセルに入力した文字列をワードに入力 K.ぬま 07/11/11(日) 13:27 お礼[未読]
【544】Re:エクセルに入力した文字列をワードに入力 H. C. Shinopy 07/11/11(日) 23:41 回答[未読]
【545】Re:エクセルに入力した文字列をワードに入力 k.ぬま 07/11/12(月) 9:03 お礼[未読]

【539】エクセルに入力した文字列をワードに入力
質問  k.ぬま  - 07/10/30(火) 22:57 -

引用なし
パスワード
   ワードとエクセルを開き、エクセルのC列n行目とD列n行目に入力した2つの文字列をA列n行目をクリックすると、
ワードのカーソル位置に、D列n行目に入力した文字列+C列n行目に入力した文字列が合併されて入力できるようにしたい。
アプリケーションが異なるので、どのようにするのかが分かりません。

エクセルのA列n行目のセルはボタンになりますね。このボタンのプロパティに書き込む、プログラムコードの中で、ワードをアクティブにして、カーソル位置にペーストするということでよいのでしょうか。
エクセルVBを使用すればよいでしょうか。それとも、VBでしょうか。教えてください。

【541】Re:エクセルに入力した文字列をワードに入力
回答  H. C. Shinopy  - 07/11/3(土) 21:52 -

引用なし
パスワード
   『エクセルのC列n行目とD列n行目に入力した2つの文字列をA列n行目をクリックする…』ということですが、A列全行にボタンを作るわけにはいかないでしょう。

C列をクリックして、その横にポップアップメニューを表示させ、
ポップアップメニューのボタンを押して、Wordに書き込むほうがいいと思います。
Excelのマクロで、処理可能です。

以下は、右隣セルの右側にポップアップメニューを表示させ、アクティブセルと右隣セルをWordに書き出すとして考えました。
このマクロを実行すると、最初は思わぬ所にポップアップメニューが表示されますが、
それに構わず、C列をマウスでクリックして(すると、E列にポップアップメニューが移動して表示されます。)、[OK]ボタンを押すと、C列とD列をWordに書き出しします。
貴殿のお考えとは大きく違いますが、細かいところは御自分で変えて頂ければと思います。

Sub MyCellSide()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem アクティブセル&右隣セルWord書き出し処理
 Rem 言語:Excel VBA
 Rem 機能...
 Rem  アクティブセルと右隣セルをWordに書き出す。
 Rem 注記...
 Rem  右隣セルの横にポップアップメニューを表示しておき、
 Rem  セルをマウスでクリックして選択し、[OK]ボタンを押して、
 Rem  アクティブセルと右隣セルをWordに書き出す。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim myTitle As String
 Dim myCcAddr As String
 Dim x As Long
 Dim y As Long
 '
 myTitle = "MyCellSide"
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 On Error Resume Next
 CommandBars(myTitle).Delete
 On Error GoTo 0
 '
 Call MyCellSideCmmdBar(myTitle)
 '
 Beep
 Do
  On Error Resume Next
  myCcAddr = ActiveSheet.Columns(ActiveCell.Column).Offset(0, 1).Address(False, False)
  myCcAddr = Left(myCcAddr, InStr(myCcAddr, ":") - 1)
  x = ActiveSheet.Columns("A:" & myCcAddr).Width
  y = ActiveSheet.Rows("1:" & ActiveCell.Row).Height
  '
  x = ActiveWindow.PointsToScreenPixelsX(x * 1.333)
  y = ActiveWindow.PointsToScreenPixelsY(y * 1.333)
  y = y - (ActiveCell.Height * 1.333)
  '
  CommandBars(myTitle).ShowPopup x, y
  On Error GoTo 0
  '
  DoEvents
  If CommandBars(myTitle).Controls(1).FaceId = 1088 Then Exit Do
 Loop
 '
 On Error Resume Next
 CommandBars(myTitle).Delete
 On Error GoTo 0
End Sub ' MyCellSide *----*----*  *----*----*  *----*----*  *----*----*

Sub MyCellSideCmmdBar(myTitle As String)
 Dim myCmmdBar As CommandBar
 Dim myCtrlBttn As CommandBarControl
 Dim myCtrlBttnOk As CommandBarControl
 Dim myCtrlBttnEnd As CommandBarControl
 Dim myMsg As String
 '
 Set myCmmdBar = CommandBars.Add(Name:=myTitle, Position:=msoBarPopup, Temporary:=True)
 Set myCtrlBttn = myCmmdBar.Controls.Add(Type:=msoControlButton, Before:=1, Temporary:=True)
 Set myCtrlBttnOk = myCmmdBar.Controls.Add(Type:=msoControlButton, Before:=2, Temporary:=True)
 Set myCtrlBttnEnd = myCmmdBar.Controls.Add(Type:=msoControlButton, Before:=3, Temporary:=True)
 '
 myMsg = myTitle & vbCrLf & vbCrLf
 myMsg = myMsg & "アクティブセル" & vbCrLf
 myMsg = myMsg & "&右隣セル" & vbCrLf
 myMsg = myMsg & "Word書き出し処理" & vbCrLf & vbCrLf
 '
 With myCtrlBttn
  .DescriptionText = "アクティブセル&右隣セルWord書き出し処理ポップアップメニュー"
  .Style = msoButtonIconAndWrapCaption
  .Caption = myMsg & "処理を実行しますか?"
  .TooltipText = "処理を実行しますか?"
  .FaceId = 1089
 End With
 '
 With myCtrlBttnOk
  .DescriptionText = "[OK]ボタン"
  .BeginGroup = True
  .Style = msoButtonIconAndCaption
  .Caption = "OK"
  .TooltipText = "処理を実行します。"
  .FaceId = 567
  .OnAction = myTitle & "BttnMyOk"
 End With
 '
 With myCtrlBttnEnd
  .DescriptionText = "[終了]ボタン"
  .Style = msoButtonIconAndCaption
  .Caption = "終了" & String(12, " ")
  .TooltipText = "処理を終了します。"
  .FaceId = 1088
  .OnAction = myTitle & "BttnMyEnd"
 End With
End Sub ' MyCellSideCmmdBar *----*----*  *----*----*  *----*----*  *----*----*

Sub MyCellSideBttnMyOk(Optional myDummy As Boolean)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem コマンドボタン[OK]OnAction処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim myWord As Variant ' Word.Application
 Dim myWordDoc As Variant ' Word.Document
 Dim myText As Variant
 '
 On Error Resume Next
 Set myWord = GetObject(, "Word.Application")
 If Err.Number <> 0 Then
  Set myWord = CreateObject("Word.Application")
  Set myWordDoc = myWord.Documents.Add
  myWord.Visible = True
 End If
 On Error GoTo 0
 '
 myText = ActiveCell.Value & " : " & ActiveCell.Offset(0, 1).Value
 myWord.Selection.TypeText myText & vbCrLf
 '
 myWord.WindowState = 2 ' wdWindowStateMinimize
 ' CommandBars("MyCellSide").Controls(1).FaceId = 567
End Sub ' MyCellSideBttnMyOk *----*----*  *----*----*  *----*----*  *----*----*

Sub MyCellSideBttnMyEnd(Optional myDummy As Boolean)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem コマンドボタン[終了]OnAction処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 CommandBars("MyCellSide").Controls(1).FaceId = 1088
End Sub ' MyCellSideBttnMyEnd *----*----*  *----*----*  *----*----*  *----*----*

【542】Re:エクセルに入力した文字列をワードに入力
回答  K.ぬま E-MAIL  - 07/11/11(日) 12:47 -

引用なし
パスワード
   回答していただきありがとうございました
質問の設定の仕方が間違っていたようです。
ポップアップウインドウを表示して選択すると、手間がかかり実用的ではなくなるので、そうではない処理を考えています。

【543】Re:エクセルに入力した文字列をワードに入力
お礼  K.ぬま E-MAIL  - 07/11/11(日) 13:27 -

引用なし
パスワード
   ▼H. C. Shinopy さん:
『エクセルのC列n行目とD列n行目に入力した2つの文字列をA列n行目をクリックする…』ということですが、A列全行にボタンを作るわけにはいかないでしょう。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
A列50行位にボタンを作りたいのです。
ポップアップウインドウを使う場合には、操作手数がかかり、実用的ではなくなります。

例えば、
エクセルのC列2行目〜50行目には、出身地名を予め書き込んでおきます。
2行目東京、3行目神奈川、4行目千葉、…

エクセルのD列1行目〜50行目には、出身地名を予め書き込んでおきます。
2行目吉田正、3行目熊倉茂、4行目田中正一、…

エクセルのA列とB列の2行目〜50行目は、コマンドボタンとなるようにプログラムしておきます。(一行目のセルは表示用に空けておきます)

エクセルのA列2行目をクリックすると、直前にアクティブだったワードをアクティブとし、カーソル位置に、吉田正東京(東京の文字は青色)をコピーする(枠は外す)。

エクセルのB列3行目をクリックすると、直前にアクティブだったワードをアクティブとし、カーソル位置に、熊倉茂をコピーする(枠は外す)。

〜〜〜〜〜〜〜というようなことをしたいのです〜〜〜〜〜〜〜〜〜〜〜〜〜〜

Option Explicit

  Dim xlApp As Object ’ Exel.Application
  Dim xlWb As Object ’ Exel.WorkBook
  Dim xLWs As Object ’ Exel.Worksheet
  Dim WdApp As Object ’ Word.Application
  Dim WdDoc As Object ’ Word.Document
  Dim Btn As CommandButton


Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click, …

xLWs.Range(B2).Copy  'セルB2をクリップボードにコピー
Dim LenN As Integer  'セルの長さを取得
lenN= Len(xLWs. Range(”A”).)N……?


Public Declare Function GetLastActivePopup Lib ”user32” (Byval hWnd&) As Long'直前にアクティブだったウインドウをアクティブにする

GetCursorPosition Paste '入力カーソルのポイントを取得しペーストする

End Sub

〜〜〜〜〜〜現在、断片的に調べていてつながりません〜〜〜〜〜〜〜〜〜〜

【544】Re:エクセルに入力した文字列をワードに入力
回答  H. C. Shinopy  - 07/11/11(日) 23:41 -

引用なし
パスワード
   A:B列にボタンを配置してマクロ実行ということですので、
前掲マクロを少し変えてみました。
御参考までに。

Sub MyShapeCmmdBttn()
 Dim myTitle As String
 Dim i As Long
 '
 Dim myCcAddr As String
 Dim x As Long
 Dim y As Long
 Dim myLeft As Long
 Dim myHeight As Long
 '
 Dim myShape As Shape
 Dim myOnAction As String
 '
 myTitle = "MyShapeCmmdBttn"
 '
 For i = 2 To 50
  Cells(i, "A").Select
  myCcAddr = ActiveSheet.Columns(ActiveCell.Column).Address(False, False)
  myCcAddr = Left(myCcAddr, InStr(myCcAddr, ":") - 1)
  x = ActiveSheet.Columns("A:B").Width ' ActiveCell.Width
  y = ActiveSheet.Rows("1:" & ActiveCell.Row).Height
  y = y - ActiveCell.Height
  '
  myLeft = 0
  myHeight = ActiveSheet.Rows(ActiveCell.Row).Height
  '
  Set myShape = ActiveSheet.Shapes.AddFormControl(xlButtonControl, myLeft, y, x, myHeight)
  '
  With myShape
   .Name = ActiveCell.Address(False, False)
   .TextFrame.Characters.Text = Cells(ActiveCell.Row, "C").Value
   .AlternativeText = .Name
   myOnAction = myTitle & "MyRun" & " "
   myOnAction = myOnAction & Chr(&H22) & .Name & ChrW(&H22)
   .OnAction = "'" & myOnAction & "'"
  End With
 Next ' i
End Sub ' MyShapeCmmdBttn ' *----*----*  *----*----*  *----*----*  *----*----*

Sub MyShapeCmmdBttnMyRun(myAddress As String)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem コマンドボタンOnAction処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim myWord As Variant ' Word.Application
 Dim myWordDoc As Variant ' Word.Document
 Dim myText As Variant
 '
 On Error Resume Next
 Set myWord = GetObject(, "Word.Application")
 If Err.Number <> 0 Then
  Set myWord = CreateObject("Word.Application")
  Set myWordDoc = myWord.Documents.Add
  myWord.Visible = True
 End If
 On Error GoTo 0
 '
 Range(myAddress).Offset(0, 2).Select
 myText = ActiveCell.Value & " : " & ActiveCell.Offset(0, 1).Value
 myWord.Selection.TypeText myText & vbCrLf
 '
 myWord.WindowState = 2 ' wdWindowStateMinimize
End Sub ' MyShapeCmmdBttnMyRun ' *----*----*  *----*----*  *----*----*  *----*----*

【545】Re:エクセルに入力した文字列をワードに入力
お礼  k.ぬま E-MAIL  - 07/11/12(月) 9:03 -

引用なし
パスワード
   再度の詳細なコードを示していただきまして、厚くお礼申し上げます。
プログラムの勉強を始めて1か月になります。VBの本を見ながらの勉強で、大変助かります。私は、機械設計をやってきて、それから、弁理士になり、して、今は理士を辞めています。もう直ぐ62歳になりますが、次は何の勉強をしようか、ということで、プログラムの勉強を猛烈にしています。ありがとうございました。

113 / 308 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
207136
(SS)C-BOARD v3.8 is Free