952 :
デフォルトの名無しさん :2011/02/13(日) 11:32:22
on Error Resume Next 難しいな 使わずに書こうと思ってたんだけど、使わないとどーしても避けれない処理がある Range.Pastespecial を使うときに on error resume next range.pastespecial on error goto 0 ってon error で囲まないとエラー時の対応が出来ない(解らない) どーしたもんか・・・
open とかのファイルを扱う際のエラー処理にも必須だと思うが...。 > どーしたもんか・・・ 書いてる通り on error で囲むだけだろ? 何が難しいのか、理解するのが難しいよ (w
一つの元データのあるブックから、複数のブックにデータを コピーしたいのですが、 Sub A08管理図の入力() Dim OpenFileName As String 'ファイルオープン Dim 転記元 As Workbook, 転記先 As Workbook MsgBox "最初の管理図を開いてください" ChDrive "D" ChDir "D:\結果" OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") If O <> "False" Then Workbooks.Open OpenFileName Else MsgBox "キャンセルされました" Exit Sub End If Set 転記先 = ThisWorkbook 転記先.Worksheets("確認").Select としているのですが、 [ 転記先.Worksheets("確認").Select ] のところで実行時エラー’9’ が出ます。 転記先のシートが複数あるのでそれぞれ選択するにはどうすればよろしいでしょうか? ここで躓いて先に進めません。
>>951 Trim かけて "" と比較するのがよくない?
大したコストじゃないでしょ。
>>954 まず、エラーについて
元データブックを開いた段階で、転記先ブックがアクティブじゃなくなる
従って
Set 転記先 = ThisWorkbook
転記先.Activate
転記先.Worksheets("確認").Select
とする
次に複数のシートを選択するには、SelectのオプションReplaceを指定する
Worksheet オブジェクト.Select(Replace)
以下、Replaceについての引用
(シートでのみ使用) 既に選択しているオブジェクトの選択を解除して、
指定したオブジェクトのみを選択するには、True を指定します。
既に選択しているオブジェクトに加えて、指定したオブジェクトを選択するには、False を指定します。
957 :
954 :2011/02/13(日) 13:32:28
>>956 さん
私の書き方が悪く申し訳ありません。
転記元ブックはもともと開いており、このコードを記述しています。
[OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") ]
で開くのは転記先ブックです。
いま見直して気付いたのですが、[Set 転記先 = ThisWorkbook]
が間違っているとおもうのですが、どう修正したらよいでしょうか?
Worksheets("確認")は後から開いた転記先ブックにあり、
Set 転記先 = OpenFileName
転記先.Activate
転記先.Worksheets("硬質").Select
としてもエラーが出ました。
>>951 If TextBox1.Text = "" Then
これじゃ拙いのか?
もしそうなら理由を請う!
959 :
956 :2011/02/13(日) 17:44:41
>>957 もう解決してるかもだけど
If OpenFileName <> "False" Then
Set 転記先 = Workbooks.Open(OpenFileName)
Else
MsgBox "キャンセルされました"
Exit Sub
End If
で、いいかなと
デバッグとかの使い方を練習した方が良いかと思う
960 :
954 :2011/02/13(日) 17:58:34
>>959 上手くいきました。ありがとうございました。
おっしゃる通りまだまだ勉強不足なので精進します。
助かりました!
>>958 色々Bingってみたりしたけど、結論としては、
vbNullStringは、ポインタに変換すると必ずNULLになる空文字列、
って感じっぽいな。
つまり、文字列として扱っている分には、""と全く変わらない。
""がポインタに変換された時、必ずNULLにならないかどうかは知らん。
TextBoxやComboBoxは未入力時は長さ0の文字列じゃなく値0の文字列を返すから If TextBox1.Text = vbNullString Thenがベターではある。 If StrPtr(TextBox1.Text) = 0 Thenでもよいが。
プログラムかいてると、 人間の判断力ってすげぇ って思えてくる
>>962 >TextBoxやComboBoxは未入力時は長さ0の文字列じゃなく値0の文字列を返す
これをはっきり示した資料あるか?
TextBox1.Textなんかだと、""代入してもvbNullStringになるっぽいが、
普通の文字列変数だとそうならないみたいだな
VBAでは通常NULLストリングとNULLポインタの区別をする必要はないんだし
API呼び出し等で明示的にNULLポインタである必要がある場合以外、vbNullStringは
使わない方がいいと思うが
965 :
958 :2011/02/13(日) 23:51:07
確かにstrptrでは0になるな
ただ、
TextBox1.Text = ""
TextBox1.Text = Empty
TextBox1.Text = vbNullString
これがみなTrueになるわけだから、
今回のことは知識として頭にいれとく程度でよさそうだな
それに、
>>964 も言っとるように、
またヘルプにも書いてあるように
vbNullStringは外部プロシージャの呼び出しで使うのがええような。。
何れにしろ、またまた勉強になった、ありがとな
966 :
デフォルトの名無しさん :2011/02/14(月) 20:02:06
web上にあるファイルをダウンロードするのに何かないかなと思って
探したらURLDownloadToFileというのがあって使ってみたんだけど
URLDownloadToFile(0, "
https://www.abc.com/123.xls ", "c:\", 0, 0)
プロトコルがhttpならOKなんだけど、httpsでsslが入るとダメ。
これって何かいい解決方法はないでしょうか?
それともVBAでhttpsでファイルを落とすのは無理?
分かる方是非教えてください!
968 :
デフォルトの名無しさん :2011/02/14(月) 21:46:56
>>967 ありがとございます!
ちょっと調べてみたのですが
Dim objHttp as Object buf As String
Set objHttp = CreateObject("MSXML2.XMLHTTP")
objHttp.Open "GET", "
http://www.abc.com/123.xls ", False
こんな感じのコードで上のコードで「http」の部分が「https」でも
OKということでいいでしょうか?
ちょっと今実行環境がないので。。。
ありがとございます!
ユーザーフォーム内でenterキーにhogeボタンを押したときと同じ動作をさせたいです ググりながらやってみましたが何か根本的に間違ってるような気がしてきました どうしたらいいのでしょうか? Sub UserForm_Initialize() Application.OnKey "{Enter}", "hoge_Click" End Sub Sub hoge_Click() xxx End Sub
>>969 そのフォームの中にボタンが一個だけで、他に入力や選択を行うコントロールが一つもなければ
何も書かなくても自動的にEnter=ボタンクリックになる
あと、Application.OnKeyはEnterには使えない仕様
972 :
デフォルトの名無しさん :2011/02/16(水) 18:19:07
もしスレチだったらすみません。 accessのVBAからADOでexcelに データを書きだしているのですが、 文字列扱いの数字にエラーインジケータが ついてしまいます。 これをVBAで解除することは できるのでしょうか?
>>972 最初からエラーチェックをしない設定には出来ないの?
Excelのヘルプで『エラーインジケータ』を見ると 色々出ていると思う ただ、データのコンバージョンでエラーが出た場合、 一応、すべて目を通さないとひどい目にあうかも?
975 :
972 :2011/02/16(水) 21:28:36
>>973 表示の有無設定ってツールオプションで行うので
ユーザの環境によって変わると思ってたんですけど
認識違いですかね?
>>974 ありがとうございます。
一度ヘルプも確認してみます。
976 :
デフォルトの名無しさん :2011/02/18(金) 20:55:48
VBAもいいかげんアップデートしてくれないものか せめて構造化例外とオーバーロードを・・・
GetOpenFilename等でユーザーが指定したファイルのパスをUNCパスに置き換える方法を教えてください。 自分ではパワーシェル等でネットワークドライブの一覧を取得して 割り当てられているドライブ名をコンピュータ名に置き換えるという方法しか考えつかなかったのですが、 それ以外に何かやり方はないでしょうか?
IF文で判定させたいのですが、変数 i が 60から55、55〜50のような感じで条件をだしてマクロを組んで見たのですが 上手く判定してくれません。 Dim i AS Integer i = Range("A1").Value If 60 >= i > 55 Then Range("B1").Value = "A" ElseIf 55 >= i > 50 Then .Range("B1").Value = "B" END IF どうしたら判定してくれるのでしょうか??
977です 978>> ありがとうございます!リンク先読んできました。 あるユーザーが指定したファイルを複数人で使う想定だったので 個人の環境に依存するネットワークドライブ名を使いたくなかったんです。 おかげさまでできそうです!
リンクミスった
>>978 さんありがとうございました!
>>979 If (60 >= i) And (i > 55) Then
>>982 上手く判定してくれました。
早いレスありがとうございました。
エクセル2002を使ってます。 あるセルの値をクリアしたら、その行のZ列の値もクリアしたいのですが、 Dim jissibiRow As Integer If Target.Value = "" Then 'あるセルの値をクリアしたら jissibiRow = ActiveCell.Row 'そのセルの行番号を出して Range("Z" & jissibiRow).ClearContents 'その行のZ列の値もクリアする とすると、Z列の値は消えるのですが、消えるまでに5秒程度かかってしまいます。 If Target.Value = "●" Then 'あるセルに●を入力したら(実際はプルダウンで入力) jissibiRow = ActiveCell.Row 'そのセルの行番号を出して Range("Z" & jissibiRow) = "実施済み" 'その行のZ列に実施済み"と表示 の場合は直ぐに実施済みと表示されるので、セルをクリアした場合の判定が間違っていると 思うのですが、どのようにすればよろしいのでしょうか?
985 :
984 :2011/02/19(土) 17:15:15
>>984 です。
少し状況が変わってきました。
Range("Z" & jissibiRow).ClearContents を
Range("Z" & jissibiRow) = "" にしても同じように時間が掛かったのですが、
Range("Z" & jissibiRow) = " " ”と”の間に半角スペースを入れると直ぐに反応するようになりました。
何も入れないと時間がかかるということは分かったのですが、やはり何も入れたくないです。
どのように修正すればよいかアドバイスお願いいたします。
>>985 部分的なコードを提示しちゃだめだぞぃ
Changeイベントを使っていると思うがそれだと
1.Range("Z" & jissibiRow).ClearContents
2.Range("Z" & jissibiRow) = ""
3.Range("Z" & jissibiRow) = " "半角スペースを入れる
上記1,2,3でもZ列のChangeイベントが発生する
そして、1,2では、
If Target.Value = "" Then
これに引っかかるからエンドレスになる
(実際はある回数で止まる)ので遅くなる
3では、If Target.Value = "" Then
に引っかからず即終了するから早くなる
●このようにChangeイベント内でセルに値を入れたら
そのセルのChangeイベントが発生するので
それを止めるコードを追加しなといけない
Application.EnableEvents = False '▼イベントOFF
Range("Z" & jissibiRow).ClearContents
Application.EnableEvents = True '▲イベントON
それから、
jissibiRow = ActiveCell.Row は
jissibirow = Target.Row の方がベター
csvを読み込んだんですが、数字として認識されません(セルの左上に緑が付きます) 「文字列のセルを数字にする」or「数字として読み込む」方法はあるのでしょうか?
ほ
>>987 御指摘のとおりchangeイベント使っておりました。
的確な回答ありがとうございました。
イベントを止めるコード勉強になりました。
Target.RowとActivecell.Rowの違いも調べます。
>>986 ありがとうございました。
こういうやりかたもあるのですね。勉強になりました。
次スレお願いします
自分で作ったユーザーフォームを実行中に、シートをいじれる状態にするにはどうすればいいですか 今はユーザーフォームが常に最前面に出てしまい、ユーザーフォームを消さない限りシートをスクロールすることすら出来ません
>>993 Showメソッドの引数に、 0 又は、vbModeless を指定する
UserForm1.Show 0 又は、vbModeless
詳しくはShowメソッドのヘルプをみれぃ
落ちる前に埋め
997 :
デフォルトの名無しさん :2011/02/21(月) 00:33:04.04
梅
lv低すぎてダメ
梅三郎
ありがとう。そして、さようなら。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。