以下がやりたい事ですが、わかりません。可能でしょうか?
1.シート上に作成してあるオートシェイプの選択肢を出現
(オートシェイプの選択時にはオートシェイプ名ではなく、別名で選択したい、例えばGroup3というオートシェイプをボール等。もしくは、名前ではなくオートシェイプ自体が表示され図形で選択出来る形でも良いです。)
2.選択したオートシェイプが”c20”にコピペされる
【現状】
任意のセル("A1,B5,D11,F3")に空白が無ければ("Group 3")を("C20")にコピペ
空白があった場合には確認が入り YES → コピペ実行/NO → 何もしない。
Sub sample()
If (Application.CountA(Range("A1,B5,D11,F3"))) <> 4 Then
If MsgBox("未入力の項目があります。" & vbCrLf & "承認してもいいですか?", vbYesNo) <> vbYes Then
Exit Sub
End If
End If
ActiveSheet.Shapes("Group 3").Copy
ActiveSheet.Paste Destination:=Range("C20")
End sub
【完成形】
1.任意のセル("A1,B5,D11,F3")に空白が無ければオートシェイプ選択肢から選択しコピペ
2.空白有りの場合は、確認後Yesであればオートシェイプ選択肢へ
No.1
- 回答日時:
こんにちは
UserFormを使用しているのでしょうか?
取り敢えず、ListBoxを使用しているとして
Dim shpName As String
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) = True Then
shpName = .List(i)
Exit For
End If
Next i
End With
ActiveSheet.Shapes(shpName).Copy
リストが2つならループさせる必要はないかな。
ListBoxである必要もないかも。。
>キャンセルは戻る
Unload Meの事?
御回答ありがとうございます!
ネットで見たままUser formにlistを貼り付けております。
初心者なもので…。
御回答はどこに打ち込めば良いのでしょうか。
No.2
- 回答日時:
#1です。
UserFormに下記のオブジェクトがセットされている一例です
ListBox1
CommandButton1
CommandButton2
Private Sub CommandButton1_Click()
Dim shpName As String
Dim i As Integer
If (Application.CountA(Range("A1,B5,D11,F3"))) <> 4 Then
If MsgBox("未入力の項目があります。" & _
vbCrLf & "承認してもいいですか?", vbYesNo) <> vbYes Then
Exit Sub
Else
With ListBox1
If .ListIndex = -1 Then
MsgBox "リストを選択して下さい。"
Exit Sub
Else
shpName = .List(.ListIndex, 0)
End If
End With
End If
End If
ActiveSheet.Shapes(shpName).Copy
ActiveSheet.Paste Destination:=Range("C20")
End Sub
Private Sub CommandButton2_Click()
'キャンセルボタン
Unload Me
End Sub
Private Sub UserForm_Initialize()
With ListBox1
.AddItem "図1"
.AddItem "図2"
End With
End Sub
ありがとうございます!
なぜでしょうか、そのままコピペさせて頂き、Dim I as integerを削除したのですがうまく行きません。
Worksheet上のオブジェクトにマクロを登録したいのですが出てこないのです。
初心者過ぎて上手く伝えられていないと思います。すいません。
No.4
- 回答日時:
>Worksheet上のオブジェクトにマクロを登録したいのですが出てこない
UserFormをお使いなら、下記の様に標準モジュールに書き
表示をボタンに登録すれば、UserFormが表示されます。
サンプルは、オブジェクト名UserForm1 です。
Sub 表示()
UserForm1.Show
End Sub
ありがとうございます!
マクロ登録は出来ました、後少しだと思うのですが、コンパイルエラーとなってしまいます。
ほんとに僕の頭が足りていないのだと思います。
どぉかお力を!!
もう1度完成形を見て頂けましたら。
まず、1つ目のマクロをsheet上の図形に設定します。
その図形をクリックすると、A1,B5,D11,F3の中に空白が有るか無いかで条件が分かれます。
空白無しの場合はlistを表示し"図1 図2"のどちらかを選択しコンバットボタン1をクリックすると"C20"にlistで選択した図形がコピペされる。
コンバットボタン2はキャンセル
空白があった場合にはmsgboxで続行とキャンセルを選択。
続行した場合にはlistで"図1 図2"の選択に
キャンセルはmsg box消去
と言うのが完成なのですが、もぅ訳がわからなくなってきました。
図形の名前はvbaで"図1""図2"に変更済みです。
お手間をおかけしますがお願いしたいです。
No.5
- 回答日時:
>コンパイルエラー
と言う事はタイプミスしてしまったか、、すみません。
または、コピペするところ違うとか、、?
とにかく、整理してみましょう。
ユーザーフォームを作成(UserForm1)して
各オブジェクトを配置する。
UserFormでの処理
ListBox1 シェイプの名前が設定されている。
#2の回答は図1の1が全角になっていましたので半角に変更
(実際の名前に合わせてください)
CommandButton1 実行ボタン
CommandButton2 キャンセルボタン
対象フォームモジュール内に
'実行ボタン
Private Sub CommandButton1_Click()
Dim shpName As String
With ListBox1
If .ListIndex = -1 Then
'リストを選択しなかった時の処理
MsgBox "リストを選択して下さい。"
Exit Sub
Else
'リストボックスの選択されている値を変数に代入
shpName = .List(.ListIndex, 0)
End If
End With
'対象のシェイプをコピー
ActiveSheet.Shapes(shpName).Copy
'貼り付け
ActiveSheet.Paste Destination:=Range("C20")
'UserFormを閉じる(Unload)
Unload Me
End Sub
Private Sub CommandButton2_Click()
'キャンセルボタン
Unload Me
End Sub
Private Sub UserForm_Initialize()
'UserForm インスタンス時にListBox1の値を設定
With ListBox1
.AddItem "図1"
.AddItem "図2"
End With
End Sub
UserFormを表示する条件
表示:
空白無しの場合
空白があった場合にはmsgboxで続行した場合
表示しない:
他の場合はUserFormを表示しない
UserFormを呼び出すコード(シェイプに登録)
標準モジュールで
Sub 表示()
If (Application.CountA(Range("A1,B5,D11,F3"))) <> 4 Then
' 空白あり
If MsgBox("未入力の項目があります。" & vbCrLf _
& "承認してもいいですか?", vbYesNo) <> vbYes Then
' NO
Exit Sub
Else
' 続行した場合
UserForm1.Show
End If
Else
' 空白無しの場合
UserForm1.Show
End If
End Sub
コンパイルエラーとは無関係ですが、条件の解釈が間違っていたようです。
コメントを足しているので間違いないと思います。
VBEでコンパイルしてみたので大丈夫かと、、思います。
ある程度ご自身で書いていたので大丈夫と思いますが、
処理の手順や内容を理解して、ご自身で改修できるようにしてくださいね。
ありがとうございます!
'続行した場合
UserForm1.Show ←が黄色で警告が出てしまいます。
実行時エラー’70’
書き込みできません。
何がいけないのか...。
ずっとお付き合いいただきありがとうございます。
もしもよろしければご指導お願いしたいのですが。。。
No.6
- 回答日時:
>ずっとお付き合いいただきありがとうございます。
乗りかかった事なので気になさらないでください。ただ、レスポンスは良くないかも知れませんが。
>UserForm1.Show ←が黄色で警告が出てしまいます。
ユーザーフォーム作成していますか?
参考 https://www.sejuku.net/blog/37407
作成しているなら、コンパイル出来ますでしょうか?
実行前にVBEのデバッグタグからプロジェクトのコンパイルをしてみてください。
フォームモジュール内でエラーはありませんか?
オブジェクト名など確認してください。
>実行時エラー’70’
1004でなく70となると特定は少し難しいかな、、
セキュリティソフトなどによる権限の場合もありますし、
UserForm側のコンパイルエラーなどの可能性もあります。
各コードをコピペしたモジュールを教えてください。
Sub 表示()は、標準モジュール
Private Sub CommandButton1_Click()
Private Sub CommandButton2_Click()
Private Sub UserForm_Initialize()
はフォームモジュール(ボタンなどを配置しているUserForm)
です。
画像などを補足に入れて頂けるとわかり易いかも、、です。
さらに、お使いのOS,Office、Excelのバージョンなどを教えてもらえますか?
私のローカルでは、同様の事象は発生せず処理が出来ました。
Windows10 64bit Office Home and Business 2013 32bit15.0.5319
Windows10 64bit Office Home and Business Premium 2016 32bit
一応、添付画像 (検証時)
ネット環境が悪くパソコンから回答が出来ないのでスマホからですいません。
コード全体のプリントスクリーンを貼りたいのですがやり方が分からないです。貼り付けしても出来ないです。
コンパイルは文字が薄くなっていて出来ないです。僕がやり方を分かっていないだけだと思いますが。
平日なかなかレスポンス僕も遅くなってしまいましてごめんなさい。
No.7ベストアンサー
- 回答日時:
こんばんは、
レスポンスに関してはお互い様です。許す事であれば気長に行きましょう。
時世の関係もあり、かなり高い確率でこのサイトを見るのは23時前後です。
いつずつ進んで行きましょう。
気になるのは、コンパイルエラーです。
コンパイルエラーとは、VBAプログラムの命令言語として成立しない事を
意味します。考えられる事はいくつか浮かびますが、検証する為に最小単位(すでに書かれているプログラムを外して)検証する事を提案します。
方法としては、新規ブックを作成し一旦、任意の名前および場所に保存してください。
そのブックを開きAlt+F11でVBEを表示します。
上の挿入タグよりユーザーフォームを挿入します。
同様に表示タグを選択してツールボックスを表示し、
テキストボックスをクリック、ユーザーフォーム上での十字キーを右クリックをしたまま範囲を作り、クリックを放すとテキストボックスが作成されます。 同様の手順でコマンドボタンを2つ作成します。
出来上がったら、ユーザーフォーム上でダブルクリックすると
Private Sub UserForm_Click()
と言う空のプロシージャがされます。
このプロシージャは、Delキーですべて削除してください。
このエリアに#5で回答した
'実行ボタン以下
UserFormを表示する条件までのコードをコピペします。
次に挿入タグから標準モジュールをクリックして挿入します。
カーソルのある場所に
#5で回答した
Sub 表示()
から
End Sub
までをコピペします。
コピペしたら、上のタグにあるデバッグをクリックして
VBAProjectのコンパイルをクリックします。
ここで、エラーが出なければ、一旦VBA言語として解釈されています。
次にシートの条件に出てくるセルの値などを入れVBA(表示)を実行します。
ここで処理内容はともかくとして実行されれば、(実行時の内容での)実行時エラーがないロジック、アルゴリズムが組まれている事になります。
期待している処理結果が得られれば、プログラムの完成です。
(内容の良し悪しを評価する事ではありません)
以上が、一通りのやり方の一例です。
まだ気になる点があります。OSやExcelのバージョンは何でしょう?
Macだったり、キングオフィスだったりしますか?であれば、初めから再構築しなくてはならないかも知れませんので、大事な事ですね。
補足ですが、
ファイルを提供するなどする方法がある事は、存じてい折りますが、
私は、ファイルの提供は行いません。
仮に実行コード(プロシージャとして成立する)を書いても、実行するご自身で確認、検証のもと、自己責任で行っていただきたいのと、アドバイスの範疇で実行プロシージャを書いており、あくまでも、デバッグ用サンプルとして書いています。
気にせず、解らない所があれば、出来れば具体的に補足、コメントをください。
内容を評価する気持ちは一切ありませんので、先ずこのご質問の内容に何だかの結果を出しましょう。
出来ました!!!!!!!!!!
何故#5で出来ていなかったのかの検証は少し後にします。
まだやらないといけない事が山積みでして。。。
ほんとーーーーーーーーに嬉しいです、こんなに長々とお付き合い頂き心から感謝しています。なんとお礼をしていいのか。
出来れば今後もこのど素人の先生になっていただけませんか?
1つ違いがあったのですが、それが悪さをしていたのでしょうか?
それは私はリストをリストボックスで作成し、rowsourceプロパティで”図1、”図2”を作成していました。。。レクチャー頂いたのはテキストボックスですね。すいません。初心者過ぎるのにやりたい事が複雑だったのかと反省しています。
私事なんですが、仕事で今後使えるのではとpythonの学習を始めました、vbaも出来ないのに。。。もしかすると貴方も精通していますか?
厚かましいのですが最後にもう1つ教えを請いたいのですが。もしよろしければ教えて欲しいです。
選択している列の3行目~3025行目までを今選択している右の行に一括でコピーするボタンを造りたいのです。
activesellのcolumnの値を取得,その値を変数に代入しcopy...となるのかなと思うのですが。
本当にありがとうございます!
感謝しきれません!!!!!!!!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
初心者です。gulpでコンパイル...
-
C#でボタン名を変更しても動く
-
時間稼ぎの命令文とは?
-
JavaScriptで、実行するたび値...
-
VB.netでタイマーがスタートし...
-
デザイン時のVisible=Falseは実...
-
eval()の危険性の具体例を教え...
-
VBAマクロ、パスがありませんで...
-
既存のwebサイトで、ローカルの...
-
以下のコードを実行しても、オ...
-
PowerPointで時計表示
-
[prototype.js] Ajax.Requestの...
-
C#コンストラクタが2回動く
-
PowerBuilderのDOUBLEデータ型...
-
正整数の半角数字かどうか判定する
-
JavaScriptでテキス...
-
「終了していない文字列型の定...
-
ASP(VBS) ←→ JavaScript の変数...
-
VB.NET2003 テキストボックスに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
if(1){...}とはどういうことで...
-
JSPの処理の途中で、JavaScript...
-
デザイン時のVisible=Falseは実...
-
1つのVBAコードをすべてのコア...
-
〔Excel:VBA〕マクロの実行が異...
-
以下のコードを実行しても、オ...
-
PowerPointで時計表示
-
C#でボタン名を変更しても動く
-
jQuery ui Datepicker 明日以降...
-
初心者です。gulpでコンパイル...
-
リクエスト結果が一瞬しか表示...
-
innerHTMLなどの反映タイミング
-
既存のwebサイトで、ローカルの...
-
JavaScriptで、実行するたび値...
-
VBA ステータスバー DoEvents
-
VBA SORT Applyでエラー
-
resizeToメソッドが動作しません
-
Excel VBA にて JavaScript の...
-
eval()の危険性の具体例を教え...
-
ラベルの色がかわってくれない
おすすめ情報
説明が下手ですいません。
今止まっている所はコンバットボタンのコードです。
リストには1と2と言う項目があり、コンバットボタンはOKと cancelです。
1を選択しokをした場合には"図1"
2を選択しokをした場合には"図2"をコピペ
キャンセルは戻る
としたいのですが…