[[20151124225716]] 『シートのデータを更新』(しおひび) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『シートのデータを更新』(しおひび)

本を見ながらマクロの勉強をしています。

データの修正を行いシートのデータを更新したいのですが

実行時エラー'13':
型が一致しません。
とでて
デバックをクリックすると

TargetRow = CInt(txtID.Text) + 1

この部分が黄色に示されます。

コードはこれです。

'シートのデータを更新

    Dim TargetRow As Integer
    TargetRow = CInt(txtID.Text) + 1
    Cells(TargetRow, 2).Value = txtGoods.Text
    Cells(TargetRow, 3).Value = cboCategory.Text
    Cells(TargetRow, 4).Value = txtMaker.Text
    Cells(TargetRow, 5).Value = txtPrice.Text
    Cells(TargetRow, 6).Value = txtUnit.Text
    Cells(TargetRow, 7).Value = txtRemark.Text

本の通りに入力できてると思うのですが何が悪いのかわかりません。
教えていただけないでしょうか?

< 使用 Excel:Excel2010、使用 OS:Windows7 >


txtID.Text はどのような内容でしょうか。
それはCIntで整数に変更可能なものですか?
(γ) 2015/11/24(火) 23:12

 かぶりましたが。

 黄色くなった時点で、txtID.Text にマウスをあててみてください。
 この値が表示されます。それが数字じゃないのでは?

 いずれにしても、最初に

    If Not IsNumeric(TextID.Text) Then
        MsgBox "数値で入力してください"
        Exit Sub
    End If

 といったチェックコードを追加してはいかがですか。

 ただし!
 TextID には どこかの行番号を入れるのですか?
 そういった入力を操作者にさせるというのは、ちょっと考えものですねぇ。
 上記チェックをしても、70000 なんて入力もOKになりますからね。

 そもそも、行番号変数が Integer ですか?

(β) 2015/11/24(火) 23:19


コメントありがとうございます。
txtIDとは商品IDとなっています。
黄色なった時点でマウスをあててみたら
txtID.Text=""
となっていました。

商品IDは変更ができないように
txtID.locled=True
とコードを入れてます。

そしてデータの修正のコードを入力したら黄色のエラーがでました。

ちなみにリストボックスの修正をする処理と本に書いてます。
が修正ができない・・・・

(しおひび) 2015/11/24(火) 23:46


 txtID の Locked が True ということは、操作者が入力できないということですから
 きっと、どこか別のところで、この txtID に 処理すべきシート上のデータ最終行番号をセットしているんでしょうね。
 でも、エラー時、その値が "" だったわけですから、その セットしている部分が実行されていないということでしょうね。

 コード全体が見えないのであくまで「想像」ですが。

 なお、おそらく、そのセットすべき行は、実行時のデータ最終行の次の行なんですよね。
 であれば、何も txtID にその行番号をセットし、実行時に、その値を取得せずとも、処理可能ですよ。

 いずれにしても、現在の構えで処理するなら

    Dim TargetRow As Integer
    TargetRow = CInt(txtID.Text) + 1

 これを

    Dim TargetRow As Long
    If Not IsNumeric(TextID.Text) Then
        MsgBox "最終行番号がセットされていません"
        Exit Sub
    End If
    TargetRow = Val(txtID.Text) + 1

 といったように変更しておくことが必要でしょうね。

 また、実行時のデータ最終行の次の行にセットということであればtextIDを使わず、以下のようなコードでもいいかもしれません。

    'シートのデータを更新
    With Range("A1", ActiveSheet.UsedRange)
        With .Rows(.Rows.Count + 1)
            .Range("B1").Value = txtGoods.Text
            .Range("C1").Value = cboCategory.Text
            .Range("D1").Value = txtMaker.Text
            .Range("E1").Value = txtPrice.Text
            .Range("F1").Value = txtUnit.Text
            .Range("G1").Value = txtRemark.Text
        End With
    End With

(β) 2015/11/25(水) 04:27


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.