ネッワーク上でつながっているクライアントパソコンのファイルを
よみに行く操作を変数を使って処理しようとしていますがうまくいきません
ロジックは下記の通りです。
Dim namae As String
 Range("k3").Select 'k3にはパソコン名pcs17694が入っています。
namae = ActiveCell.Value
ActiveCell.Value = namae

Workbooks.Open(Filename:="\\namae\c\機器管理\masuta.xls").RunAutoMacros Which:= _
xlAutoOpen
教えてください。
以上

A 回答 (1件)

あくまでもアドバイスです。

全部答えてはお勉強にならんので…。

>Workbooks.Open(Filename:="\\namae\c\機器管理\masuta.xls").RunAutoMacros Which:= _xlAutoOpen

"namae"は変数として定義していますが、このコードだと"\\namae"という端末を探しにいってしまいます。
"\c\機器管理~"と変数"namae"の実値をconcatenateしなければなりません。
要は文字列と変数の値の結合。

頑張ってクダサイ。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。
下記の様にコードをかえてやるとうまくいきました。
Workbooks.Open(Filename:="\\" & namae & "\機器管理\masuta.xls").RunAutoMacros Which:= _xlAutoOpen
大変勉強になりました。またよろしくお願いします。

お礼日時:2001/11/06 14:40

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

このQ&Aと関連する良く見られている質問

QVBA .Value=.Value ?

とある質問の回答の中で
With セル範囲
 .Formula = "=~式の中身は省略"
 .Value = .Value  '←これ
End With
というものがありました。これは一体どういう働きをするのでしょうか?With を使わずに書くと
Range("A1:C3").Formula="=~"
Range("A1:C3").Value=Range("A1:C3").Value
初めて見ました。

Aベストアンサー

こんにちは。

With セル範囲
 .Formula = "=~式の中身は省略"
 .Value = .Value  '←これ
End With

OkWaveとの分離前に、こういうのを好んで書く人がいましたね。
ループとどちらが速いか、複雑なものでは、こちらの方が速いかもしれません。これは、一種の裏ワザなのです。

#1の方が、mougでの紹介をしていますが、ちょっと違うというか足らないです。(私が、このテクニックを、代弁するというのもおかしな話しなのですが、私も使わないというわけではありません。ただ、あまり格好のよいテクニックでもありません。)

>Range("A1:C3").Formula="=~"  '←ここに複雑な数式を置きます。
>Range("A1:C3").Value=Range("A1:C3").Value

複雑な計算を、Excelのスプレッドシート側にまかせてしまい、後は、その数式が揮発性だったり、そのために重く重くなるのを防ぐために、値貼り付けにしてしまう、という目論見なのです。マクロで、その数式の役割をさせるよりも、実際の数式のほうが楽だからということもあります。例えば、配列数式などが使われたりします。

「Range("A1:C3").Value」の右辺の値を変数で受けて、中身を調べれば分かりますが、配列の中は、数式ではなく、数値または文字列として、格納されています。Rangeオブジェクトにして初めて、数式を格納できるわけです。そして、右辺の値は、2次元配列になって、同じ構造を持つ左辺の範囲に出力されるというわけです。

こんにちは。

With セル範囲
 .Formula = "=~式の中身は省略"
 .Value = .Value  '←これ
End With

OkWaveとの分離前に、こういうのを好んで書く人がいましたね。
ループとどちらが速いか、複雑なものでは、こちらの方が速いかもしれません。これは、一種の裏ワザなのです。

#1の方が、mougでの紹介をしていますが、ちょっと違うというか足らないです。(私が、このテクニックを、代弁するというのもおかしな話しなのですが、私も使わないというわけではありません。ただ、あまり格好のよいテク...続きを読む

QRange(Cells(32, 14)).Value = "S" がエラーになります

よろしくお願いします。いつもgooの皆さんに大変お世話になっています。
エクセルは2013です

Range(Cells(32, 14)).Value = "S" がエラーになります
メッセージは「Range メソッドは失敗しました Worksheet オブジェクト」です

32行目の14列にSを書き込みたいので、ネットで調べてやってみたのですが
よく理解できません

14という数値を使って書きたいのですが、どう書き換えたら良いでしょうか
どなたか教えてください

Aベストアンサー

この場合一つのセルですから
Cells(32, 14).Value = "S"
これだけです。Rangeは不要です。

Q「Form_フォーム1.テキスト1.Value = "" 」がうまくいかない。

VBAについての質問です。(オフィス2003)
フォーム1にテキストボックス1を作成しました。

Module1に
Sub test()
If Form_フォーム1.テキスト1.Value = "" Then
MsgBox "空白です"
End If
End Sub

とコードを書き、テキストボックス1を空白の状態でtestを実行しても何も起こりません。
F8で一行づつ実行してみてみたら
Form_フォーム1.テキスト1.Valueのところにカーソルを当てると
Form_フォーム1.テキスト1.Value=Nullとなります。

どうすればテキストボックス1が空白なら「空白です」と表示させることが可能でしょうか?
よろしくお願いします。

Aベストアンサー

>MsgBox "空白です"
の所を
Form_フォーム1.テキスト1.Value="空白です"
に置き換えてみてください

QExcel VBAについて質問します Set wb = Workbooks.Open(myFdr &

Excel VBAについて質問します

Set wb = Workbooks.Open(myFdr & "\" & fname) '開き,wbとする。
cnt = Worksheets.Count
For n = 1 To cnt
i = i + 1 'カウント
wb.Sheets(n).Range("A2").Copy mb.Sheets("Sheet1").Cells(i, "A") 'コピー
wb.Sheets(n).Range("D2").Copy mb.Sheets("Sheet1").Cells(i, "B") 'コピー
Next

この内容を値のコピーにするにはどうすれば良いでしょうか
よろしくお願いします。

Aベストアンサー

Open メソッドの前に、
Set mb = ThisWorkbooks
が必要です。

cnt = Worksheets.Count
実害はないけれども、
これは、cnt = wb.Worksheets.Count とします。

>値のコピーにするにはどうすれば良いでしょうか
コードを逆さまにすればよいです。

mb.Sheets("Sheet1").Cells(i, "A").Value = wb.Sheets(n).Range("A2").Value

Q「R = ActiveCell」がエラーになる。

エクセルvbaです。
下記のコードのどこがおかしいのか教えてください。

Sub Macro1()
Dim R As Range

R = ActiveCell
If R Like "*1*" Then
MsgBox "1があります"
End If
End Sub

アクティブセルに「1」があれば、
MsgBoxを表示したいのですが
うまくいきません。

オブジェクト変数または With ブロック変数が設定されていません。(Error 91)
というエラーになります。

If ActiveCell Like "*1*" Then
ではなく、一度、変数Rに格納したいです。

解決策をよろしくお願いします。

Aベストアンサー

こんばんは。

×Dim R As Range '(小文字のほうが良いです。基本的には、大文字は定数です。)

すでに回答が出ていますが、Like 演算子を使って、文字の比較なら、比較の対象は、String 型のはずですね。

たとえば、

Dim v As String

それと、他の回答者さんの回答に反論を立てて申し訳ありませんが、Range クラスのDefault メンバは、Value とか、Item ではありません。

Default メンバは、
  a = Range("A1").[_Default]
  a = Range("A1").[_Default](1, 1).Value

_Default は、オブジェクトブラウザで、非表示メンバを表示させて始めて出てきます。
-------------------------------------------
Property _Default([RowIndex], [ColumnIndex])
  Excel.Range の既定メンバ
オブジェクトプラウザより
-------------------------------------------
.Value プロパティは付けたほうがよいです。オートメーションなど特殊な場合はエラーが返ります。また、インスタンスとは、クラスを雛形にして、実体化させたものを言います。Set r = ActiveCell は、単にオブジェクトを変数に代入しただけです。たとえば、ワークシートの追加や、UserForm を加えたものを、インスタンスと言います。

こんばんは。

×Dim R As Range '(小文字のほうが良いです。基本的には、大文字は定数です。)

すでに回答が出ていますが、Like 演算子を使って、文字の比較なら、比較の対象は、String 型のはずですね。

たとえば、

Dim v As String

それと、他の回答者さんの回答に反論を立てて申し訳ありませんが、Range クラスのDefault メンバは、Value とか、Item ではありません。

Default メンバは、
  a = Range("A1").[_Default]
  a = Range("A1").[_Default](1, 1).Value

_Default は、オブ...続きを読む


人気Q&Aランキング

おすすめ情報