【お題】NEW演歌

EXCEL2003を使っています。コマンドボタンをクリックすると、VLOOKUPなどで検索し、あるセルに表示させた文字と同じ名前のファイルを開くVBAを教えてください。ファイルは同フォルダにあります。VBA初心者です。よろしくお願いします。

A 回答 (7件)

こんにちは。

Wendy02 です。

>今はツール→マクロ→マクロという手順で行うしか
>私の知識不足でできません。

ツールバーを右クリックして、[コントロールツール]を出し、その中から、コマンドボタンを選んで、シートに貼り付けます。

そのボタンを右クリックすると、

コードの表示というのがあります。それをクリックします。

そうすると、Visual Basic Editor画面が現れその中には、以下のように出ているかと思います。

Private Sub CommandButton1_Click()

End Sub

そこで、その間に以下のように書き加えます。
(ただし、マクロ名は、FindFileName が、「標準モジュール」に登録されていることが条件です。)

  ↓
Private Sub CommandButton1_Click()
 Call FindFileName  '一行書き加えます。
End Sub

なお、ツール-マクロ-マクロという代わりに、Altを押しながら、F8 を押すとマクロ名の一覧が出ます。
    • good
    • 0
この回答へのお礼

できました!本当にありがとうございました。

お礼日時:2005/08/27 19:19

再度のこんにちは。

No.3です。
既にWendy02さんがフォローしてくださってますが、

開きたいファイル名が、例えば、"売上.xls" 
それが、セルA1に入力されているとした場合

先のコードでは、セルA1には、"売上.xls"と拡張子(.xls)込みで入力されているものとしています。
もし、拡張子なしで、"売上" とだけ入力されているのであれば、
下記のように●のところに拡張子(.xls)を付加しましょう。

---------------------------------------------
Private Sub CommandButton1_Click()

 Dim Wbk As Workbook
 Dim Fname As String


 Fname = Range("A1").Value & ".xls"  '●ここ


 For Each Wbk In Workbooks
   If Wbk.Name = Fname Then
     MsgBox Fname & "は既にオープンされています"
     Exit Sub
   End If
 Next Wbk

 If Dir(Fname) = "" Then
   MsgBox Fname & "はありません"
 Else
   Workbooks.Open Fname
 End If

End Sub

-----------------------------------------
以上です。
    • good
    • 1
この回答へのお礼

ありがとうございました。開けました。やはり拡張子のせいだったようです。どうもすみませんでした。

お礼日時:2005/08/26 17:56

こんにちは。



>シート内にある顧客マスターを電話番号やふりがなの一部から検索し、あるセルに表示させ、そのセル内の名前と同じブックを開かせたいのです。

これは、具体的なセル情報がないと、編集していただかなくてはなりません。また、ふりがな情報はセル上に出されているものとします。それは、書かれていないので、こちらかで作ったものをサンプルとさせていただきます。

なお、#3 のtaocat さんに関するものは、

>、「***はありません」となってしまいます。***は確かに同フォルダ内にあるのですが・・・。何か私のやり方が悪いんでしょうか?

これは、たぶん、セル上のリストにあるファイル名(Fname)に、.xls の拡張子がついていないからだと思います。

以下は、こちらで考えたサンプルです。

  A    B    C    D      E
1 名前  ふりがな  住所  電話番号  ファイル名
2 朝日  アサヒ   東京  12-124   050821a
3 毎日  マイニチ  大阪  12-125   050822a

'<標準モジュール登録>
Option Explicit
Sub FindFileName()
 Dim myFind As String, myFadd As String, rtn As Integer
 Dim DataRng As Range
 Dim c As Range
 Set DataRng = Range("A1").CurrentRegion 'リストのある左端上を設定
 myFind = Application.InputBox("検索値を入力してください。", Type:=2)
 If myFind = "False" Or myFind = "" Then Exit Sub
 Set c = DataRng.Find(What:=myFind, LookIn:=xlValues, LookAt:=xlPart)
 If Not c Is Nothing Then
  myFadd = c.Address
  Do
   rtn = MsgBox(DataRng.Cells(c.Row, 1) & "でよろしいですか?", _
   vbYesNoCancel)
   If rtn = vbYes Then
    Call OpenFile(DataRng.Cells(c.Row, 5))
    Exit Sub
   ElseIf rtn = vbCancel Then
    Exit Sub
   End If
   Set c = DataRng.FindNext(c)
  Loop Until c Is Nothing Or c.Address = myFadd
 End If
End Sub
Private Sub OpenFile(Fname As String)
Dim myFno As Integer
 If InStr(Fname, ".xls") = 0 Then
  Fname = Fname & ".xls"
 End If
  If Dir(Fname) <> "" Then
   myFno = FreeFile
   On Error Resume Next
   Open Fname For Binary Lock Read Write As #myFno
   Close #myFno
   If Err.Number = 0 Then
    Workbooks.Open Fname
   ElseIf Err.Number = 70 Then
    MsgBox Fname & "は開いています。", 64
    Err.Clear
   End If
  Else
   MsgBox Fname & "は存在しません。", 16
  End If
End Sub
    • good
    • 1
この回答へのお礼

ほぼ私のやりたかったことができました。感激です。本当にありがとうございました。ついでにもう一つお聞きしたいのですが、このマクロをコマンドボタンから呼び出すのはできますか?今はツール→マクロ→マクロという手順で行うしか私の知識不足でできません。よろしくお願いします。

お礼日時:2005/08/26 17:54

こんにちは。


>文字と同じ名前のファイル
がエクセルブックとは限らないかもしれないので、

Private Sub CommandButton1_Click()
Dim sPath As String
sPath = ThisWorkbook.Path & "\" & Range("A1").Value
If Dir(sPath) <> "" Then
 With CreateObject("WScript.Shell")
  .Run """" & sPath & """"
 End With
End If
End Sub

としてみました。
(A1セルには、開きたいファイルの「ファイル名.拡張子」があるとします。)

関連付けされたファイルなら全て開きます。
ブックの場合、既に開いていたときはアクティブになります。
    • good
    • 1
この回答へのお礼

ありがとうございます。お礼が遅くなってごめんなさい。今回はエクセルブックのみですが、そうではない時の参考になりました。みなさん凄いですね。

お礼日時:2005/08/26 11:24

こんばんは。


該当ブックが既にオープンされてる場合のチェックも入れたほうがベターですね。

-------------------------------------------------

Private Sub CommandButton1_Click()

 Dim Wbk As Workbook
 Dim Fname As String

 Fname = Range("A1").Value

 For Each Wbk In Workbooks
   If Wbk.Name = Fname Then
     MsgBox Fname & "は既にオープンされています"
     Exit Sub
   End If
 Next Wbk

 If Dir(Fname) = "" Then
   MsgBox Fname & "はありません"
 Else
   Workbooks.Open Fname
 End If

End Sub

-------------------------------------------
以上です。
 
  
    • good
    • 0
この回答へのお礼

ありがとうございます。お礼が遅くなってごめんなさい。教えていただいたようにしたのですが、「***はありません」となってしまいます。***は確かに同フォルダ内にあるのですが・・・。何か私のやり方が悪いんでしょうか?

お礼日時:2005/08/26 11:22

こんばんは。



>VLOOKUPなどで検索し、
この部分の意味がわかりませんが、こういうことでしょうか?
一応、カレントディレクトリのファイル名を検索して、その名前があれば、ブックを開くようにしています。

Private Sub CommandButton1_Click()
 Dim Fname As String
 Fname = Range("A1").Value
 If Dir(Fname) <> "" Then
  Workbooks.Open Fname
 End If
End Sub

この回答への補足

ありがとうございます、説明不足ですみません。私がしたいのはこんなことです。シート内にある顧客マスターを電話番号やふりがなの一部から検索し、あるセルに表示させ、そのセル内の名前と同じブックを開かせたいのです。他に良さそうなやりかたがございましたらご教授下さい。

補足日時:2005/08/26 11:13
    • good
    • 0

Sheet1のA1のセルを対象にしたと仮定すると、以下のような記述で可能だと思いますが、どうでしょうか。



Sheets("Sheet1").Activate
Workbooks.Open Range("A1").Value
    • good
    • 0
この回答へのお礼

ありがとうございました。お礼が遅くなってごめんなさい。

お礼日時:2005/08/26 11:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A