• 締切済み

VBAの修正・上書きについて

下記、コードにてVBAで作成したユーザーフォームにエクセルで管理している 顧客名簿を表示させ、修正をした後、元のセルに修正したものを 上書きするというコードを書きたいのですが、 実行時エラーにて作動しません。 下記をどのように、直せばいいのかご指摘お願いします。 ※その他に、検索ボタンのプロシージャもありますが、こちらに載せたほうが いいのでしょうか? (修正ボタンを押したときのプロシージャ) Private Sub CommandButton1_Click() Dim gyou As Long Dim z As Object Dim i As Integer With Worksheets("Sheet1") gyou = z.Row For i = 1 To 16 Cells(gyou, i).Value = Me.Controls("TextBox" & i).Text Next End With TextBox1.SetFocus End Sub

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

コードだけ挙げて、何をしたいかを回答者に推測させないこと。 文章でその概略を説明すること。 >gyou = z.Row が不明。このままではエラーになるのは明らか。 エラーの個所とエラーコードも、質問に書いて質問すること。 ーー 推測でやって、下記で動くことは動くのでは。 Private Sub CommandButton1_Click() Dim gyou As Long Dim z As Object Dim i As Integer With Worksheets("Sheet1") gyou = Range("A65536").End(xlUp).Row + 1 MsgBox gyou For i = 1 To 3 Cells(gyou, i).Value = Me.Controls("TextBox" & i).Text Me.Controls("TextBox" & i).Text = "" Next End With TextBox1.SetFocus End Sub では一応動く。最終行の次に、テキストボックスの文字列を各列にセットする(追加していくような感じ) テキストボックスを3つに簡略化。質問するときは例として、テストの手間がかかるので、気を使ってそれぐらいにすべきだ。

hkdaci6ceb
質問者

補足

ご指摘頂きありがとうございます。 VBAに関してド素人の為、質問する際の様々な不足、申し訳ありませんでした。 例で挙げて頂いたとおり、コードを書き直し、実行するとエラーは出ずに 動きました。 そこで、再度質問をさせて下さい。 修正した後、元あった行に上書きをしたいのですが、 上書きはされず、追加されてしまいます。 これは何故でしょうか。 また、回答頂いたテキストボックスの文字列を各行にセットとは 番号.value ="" というようなかんじでしょうか? 知識が浅く、申し訳ありません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXCEL VBAのユーザーフォームのコマンドボタンでBSキーと同様の役割を持たせる方法について

    すいません、EXCEL VBAで教えていただきたいことがあります。 EXCEL VBAでユーザーフォームを作る。 フォーム内にはTextBox1とCommandButton1を設置。 TextBox1に書き込んだ文字をドラッグ →CommandButton1を押す →ドラッグした文字を消去 という機能をコマンドボタンに持たせたいのですが 可能でしょうか。 下記のコードを作ってみたのですが、やはりこれだと一文字づつしか消せません。 よろしくお願いします。 Private Sub CommandButton1_Click() Dim i As Integer With Me.TextBox1 i = .SelStart If i > 0 Then .Text = Left(.Text, i - 1) & Mid(.Text, i + 1) .SelStart = i - 1 End If End With TextBox1.SetFocus End Sub

  • Excel VBA SetFocus

    環境:Excel 2002です UserForm1での質問です Flame5にTextBox14とTextBox15があります TextBox14とTextBox15のBeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)後 Flame2にあるTextBox1にSetFocusしたいのですがエラーが発生します 実行時エラー 2147467259(800004005) 異なるFlameにSetFocusする方法があるのでしょうか? Flame5の中でTextBox14及びTextBox15のSetFocusはできます TextBox14とのTextBox15のBeforeUpdateのプロシージャです Private Sub TextBox14_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox14.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox14.Text) Me.TextBox15.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If Me.TextBox1.SetFocus End Sub Private Sub TextBox15_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If Len(Me.TextBox15.Text) <> 0 Then Dim a As Variant a = 100 - Val(Me.TextBox15.Text) Me.TextBox14.Text = a Dim i As Integer For i = 1 To 4 Me.Controls("TextBox" & i).Enabled = True Me.Controls("TextBox" & i).BackColor = &H80000005 '背景色(白色) Next i End If UserForm1.TextBox1.SetFocus End Sub ご支援願います

  • excel vbaの修正でアドバイスお願いします

    excel2000を利用しています。 下記のとあるプロシージャで自分で修正を試みるもどうしても出来ず投稿させていただきました。 どうか修正内容のアドバイスをお願いします。 ■やろうとしていること 下記は写真を表示させる部分のコードです。下記 「worksheetchange」 イベントプロシージャで、レコードが変わると下記「myLoadPicture」が発生し、写真を表示させて、レコードを切り替えるたびに、その写真を切り替えるというものです。 ■相談したいこと いま指定したセルが空白だと、"NoImage.jpg"が表示されるようになっていますが、指定したフォルダに一致するファイルがなかった場合も、"NoImage.jpg"が表示されるようにしたいのですが、修正方法がわかりません。 どうかご教授お願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) Dim fRange As Range Dim touroku As Long Select Case Target.Address Case "$BC$1" Call hyouji Case "$BW$1" myLoadPicture "board_Image", Target.Text, Range("BH3") Case "$CY$1" myLoadPicture "circuit_Image", Target.Text, Range("CJ3") Case Else Exit Sub End Select End Sub Private Sub myLoadPicture(folderName As String, fname As String, targetRange As Range) On Error Resume Next Dim pict As Shape, picPath As String picPath = ThisWorkbook.Path & "\" & folderName & "\" & fname If fname = "" Then picPath = ThisWorkbook.Path & "\" & folderName & "\" & "NoImage.jpg" End If With ActiveSheet For Each pict In .Shapes If pict.TopLeftCell.Address = targetRange.Address Then pict.Delete Exit For End If Next pict Set pict = .Shapes.AddPicture(picPath, msoTrue, msoFalse, _ targetRange.Left, targetRange.Top, 260, 320) End With Exit Sub End Sub

  • エクセルVBAについて質問です。

    エクセルVBAについて質問です。 ユーザーフォームのテキストボックスに数字以外を入力するとエラーメッセージが出るように関数を作ったのですが、 Private Function AA(objtextbox As MSForms.TextBox) As Boolean Dim A As String AA = False A = Trim(objtextbox.Text) If objtextbox.Text <> "" Then If IsNumeric(A) = False Then MsgBox "数値 Error", vbCritical With objtextbox .SetFocus .SelStart = 0 .SelLength = Len(.Value) End With AA = True End If End If End Function Private Sub textbox1_exit(ByVal cancel As MSForms.ReturnBoolean) cancel = AA(TextBox1) End Sub テキストボックス200近くある場合、1つ1つに Private Sub textbox1_exit(ByVal cancel As MSForms.ReturnBoolean) cancel = AA(TextBox1) End Sub と作っていかなくてはいけないのでしょうか? プロシージャ名に変数使おうとしたら上手くできませんでした。 どなたか助けてください。

  • VBAの修正を求められる

    今、このような式を作成しています。 Dim gyou As Integer Dim 金額欄 As String hyouji = "" For gyou = 2 To 100 金額欄 = Range(gyou, 5).Value 最後の行の式が「デバック」などと表示されてしまい 修正を求められています。 何が原因なのかわかりかねます。 教えていただければ助かります。

  • excel2000 vba スピンボタン

    いつもお世話になっています。 下記内容の変更をしたいのですが、自分ではうまくいかず、お力をお貸しください。 よろしくお願いします。 一枚のデータシートと一枚の入力用フォームがあります。 入力フォームのスピンボタンのNOをキーにして、データシートのレコードを一件ずつ切り替えて、表示させるようにしています。 さてデータシートのオートフィルターでフィルターをかけた時に、それにあわせて、スピンボタンのNOを飛ばすようにしたいのですが、どのように修正していいか、わかりません。 現状ですと、下記プロシージャですが、いまのままだと、スピンボタンの値が一つずつしかかわりません。 'スピンボタンの値が変わったらテキストボックスに反映 Private Sub SpinButton1_Change() TextBox1.Value = SpinButton1.Value Call hyouji End Sub Private Sub hyouji() 'データを検索して表示する Dim fRange As Range Dim fRow As Long Set fRange = Sheets("data").Columns(3).Find(what:=TextBox1.Value, _ LookIn:=xlValues, lookat:=xlWhole, SearchOrder:=xlByRows) If (fRange Is Nothing) Then ' MsgBox "Noがみつかりません", vbExclamation Exit Sub End If fRow = fRange.Row '検索されたNoの行位置を求める With Worksheets("data") TextBox2.Value = .Cells(fRow, 4).Value TextBox3.Value = .Cells(fRow, 5).Value TextBox4.Value = .Cells(fRow, 6).Value TextBox5.Value = .Cells(fRow, 7).Value TextBox6.Value = .Cells(fRow, 8).Value End With SpinButton1.SetFocus End Sub ※現物ファイルを下記に投稿(No5643)させていただきました。見ていただけると幸いです。 http://www.kent-web.com/pubc/book/test/uploader/uploader.cgi

  • VBA書き込み数値の加算?

    エクセル2000のVBAにて下記のコードを書き込み コマンドボタン1にてエクセルに入力処理後 Label8数値の加算をエクセル関数SUNを使用して =SUM(E4:E1000)を行ったのですが、加算数値が0になってしまいます。 =E4+E5+E6・・・・だと加算した数値が表示されます。 (さすがにこれは避けたいです) 何か方法があると思いますが教えていただけますでしょうか? Dim i As Integer Dim k As Integer Private Sub CommandButton1_Click() With ActiveSheet For k = 4 To 1000 If .Cells(k, 1) = "" Then .Cells(k, 1) = TextBox1 .Cells(k, 2) = Label6 .Cells(k, 3) = Label7 .Cells(k, 4) = TextBox2 .Cells(k, 5) = Label8 TextBox1 = "" Label6 = "" TextBox2 = "" Label7 = "" Label8 = "" Exit Sub End If Next k End With End Sub Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 13 Then Label8 = Application.WorksheetFunction.Round(Val(Label7) * Val(TextBox2), 0) Label8 = Format(Label8, "#,##0") End If End Sub

  • VBA 100億になると#が自動で付く

    下記のコードを見てください。 Option Explicit Sub test1() Dim i As Long i = 1000000000 End Sub Sub test2() Dim i As Long i = 10000000000# End Sub test2の#は私が付けたものではありません。 test1より一つ多く0を付けたら勝手に付きました。 どうしてなのでしょう? 不思議です。

  • Excel VBA ユーザフォームの検索について

    添付の画像のようなユーザフォームを作っています。 TextBox1に検索ワードを入力して、CommandButton1をクリックすると、下のComboBox1に一覧が出るようにしたいと思い、ほかのサイトから下記のコードを見つけて、作ってみました。参照先のsheet2を表示しているときは大丈夫なのですが、別のシートを選んでいるとエラーになります。 sheetは3つあり、それぞれ違うリストが入力されています。今回はsheet2のリストを参照したいのですが、最初はsheet1が表示されている状態で実行したいです。 エラーの内容は 実行時エラー9 インデックスが有効範囲にありません。 コチラがコードです。 Private Sub UserForm_Initialize() Dim i As Long, imax As Long Dim tbl() As Variant imax = ThisWorkbook.Worksheets("sheet2").Cells(Rows.Count, "A").End(xlUp).Row ReDim tbl(imax) For i = 1 To imax tbl(i) = Range("A" & i).Value Next i With ComboBox1 .List() = tbl() End With End Sub Private Sub CommandButton1_Click() Dim i As Long, imax As Long Dim tbl() As Variant Dim cnt As Long, j As Long j = -1 With ThisWorkbook.Worksheets("sheet2") imax = .Cells(Rows.Count, "A").End(xlUp).Row cnt = Application.CountIf(Range("A1:A" & imax), "*" & TextBox1.Text & "*") ReDim tbl(cnt) For i = 1 To imax If InStr(.Range("A" & i), TextBox1.Text) > 0 Then j = j + 1 tbl(j) = Range("A" & i).Value ←この部分がエラーになる End If Next i End With With ComboBox1 .List() = tbl() End With End Sub どこを直せば良いか、教えてください。 よろしくお願いします。

  • エクセル VBA OptionButtonからTextBox

    すいません! OptionButtonなら 下記の記述でエラー表示を 簡単にできるのですが これがOptionButtonではなく TextBoxならどのように変化したら 良いのでしょうか? すいません、教えて下さい! Private Sub 記録_Click() Dim i As Integer Dim Cnt As Integer Cnt = 0 For i = 1 To 6 Step 1 If Me.Controls("OptionButton" & i).Value Then Cnt = i Exit For End If Next i If Cnt = 0 Then MsgBox "選択されていません" Exit Sub End If If Me.Controls("Combobox" & Cnt).Value = "" Then MsgBox Me.Controls("OptionButton" & Cnt).Caption & " の内容が選択されていません" Exit Sub End If With 記入フォーム .TextBox5.Value = Me.Controls("OptionButton" & Cnt).Caption .TextBox6.Value = Me.Controls("Combobox" & Cnt).Value End With Unload Me End Sub