2017-07-21 45 views
2

我是新來的編碼(2個月),我主要是從網上抓取代碼。對於上下文,我正在按照here中的一些說明操作,以便如何使用userform更新工作表中的值。用戶表單 - 類型不匹配錯誤

第一位沒問題,我可以將數據從我的工作表中拉回到userform,在那裏我可以編輯,但試圖更新工作表中的數據給我一個「類型不匹配」錯誤。下面的代碼,當我點擊「更新」按鈕

Private Sub cmdupdate_Click() 

If Me.cmbslno.Value = "" Then 

MsgBox "SL No Can Not be Blank!!!", vbExclamation, "SL No" 

Exit Sub 

End If 

Sheets("Sheet 1").Select 

Dim rowselect As String 

rowselect = Me.cmbslno.Value 


Cells(rowselect, 2) = Me.TextBoxdate.Value 

Cells(rowselect, 3) = Me.TextBoxraisedby.Value 

Cells(rowselect, 5) = Me.ComboBoxsite.Value 

Cells(rowselect, 6) = Me.ComboBoxfacility.Value 

Cells(rowselect, 7) = Me.ComboBoxpdriver.Value 

Cells(rowselect, 8) = Me.TextBoxissue.Value 

Cells(rowselect, 9) = Me.TextBoxconsequence.Value 

Cells(rowselect, 10) = Me.TextBoxmitigation.Value 

Cells(rowselect, 11) = Me.TextBoximpact.Value 

Cells(rowselect, 12) = Me.TextBoxlikely.Value 

Cells(rowselect, 13) = Me.TextBoximpact.Value 



End Sub 

我得到的Cells(rowselect, 2) = Me.TextBoxdate.Value stage類型不匹配。 Me.cmbslno.Value是一個簡短的數字unique ID

我已經完全複製了上面的指南 - 除了重命名相應的東西 - 所以不知道問題是什麼。

幫助將不勝感激。

+0

當它崩潰時,「Me.cmbslno.Value」和「Me.TextBoxdate.Value」的當前值究竟是什麼? (我不喜歡你爲行號使用'String'的事實,但它應該**工作 - 除非'Me.cmbslno.Value'是不能轉換爲整數。) – YowE3K

+0

@ YowE3K - yup,'string'應該可以工作,VBA很聰明,可以將它解析爲'long'。 – Vityata

+0

@Vityata但它可能是一個問題,如果「短數字唯一ID」是像'153.124'類似的東西 - 不,忘了我說過,它會圓到153 – YowE3K

回答

1

2可能出現的問題:

  1. rowselect小於1
  2. 與選擇的幾個問題。

試試這樣說:

Option Explicit 

Private Sub cmdupdate_Click() 

    If Me.cmbslno.Value = "" Then 

     MsgBox "SL No Can Not be Blank!!!", vbExclamation, "SL No" 

     Exit Sub 

    End If 

    Dim rowselect As Long 
    rowselect = Me.cmbslno.Value 

    If rowselect < 1 Then MsgBox "WRONG VALUE" 

    With Worksheets("Sheet 1") 
     .Cells(rowselect, 2) = Me.TextBoxdate.Value 
     .Cells(rowselect, 3) = Me.TextBoxraisedby.Value 
     .Cells(rowselect, 5) = Me.ComboBoxsite.Value 
     .Cells(rowselect, 6) = Me.ComboBoxfacility.Value 
     .Cells(rowselect, 7) = Me.ComboBoxpdriver.Value 
     .Cells(rowselect, 8) = Me.TextBoxissue.Value 
     .Cells(rowselect, 9) = Me.TextBoxconsequence.Value 
     .Cells(rowselect, 10) = Me.TextBoxmitigation.Value 
     .Cells(rowselect, 11) = Me.TextBoximpact.Value 
     .Cells(rowselect, 12) = Me.TextBoxlikely.Value 
     .Cells(rowselect, 13) = Me.TextBoximpact.Value 
    End With 

End Sub 

這是我如何解決這些問題在上面的代碼:

  1. 我做了rowselect < 1.檢查它將給出一個錯誤,如果rowselect有一個字符串值。
  2. 我使用With Worksheets("Sheet 1")
+0

非常感謝迄今爲止的幫助。我也在下面使用了Thunderframes的建議,並解決了我的類型不匹配錯誤。我現在遇到的問題是我所做的選擇(cmbslno)將始終選擇第一行數據(如果您排除第一行是標題,則第二行)。有關信息,'cmbslno'的唯一標識是1.1小數。因此,例如,如果我選擇 – purpleaki

+0

非常感謝迄今爲止的幫助。我也在下面使用了Thunderframes的建議,並解決了我的類型不匹配錯誤。我現在遇到的問題是我所做的選擇(cmbslno)將始終選擇第一行數據(如果您排除第一行是標題,則第二行)。有關信息,「cmbslno」的唯一標識是1.1小數 - 從1.1開始。因此,例如,無論我選擇2.2,2.5還是3.1,它都會返回並更新1.1行 – purpleaki

1

Cells屬性接受2個參數,這兩者應該是數字:

您需要確保的Me.cmbslno.Value值是數字(或轉換爲數字),並您正在使用的變量rowselect被聲明爲Long

Dim rowselect As Long 
If IsNumeric(Me.cmbslno.Value) Then 
    rowselect = Me.cmbslno.Value 
    Cells(rowselect, 2) = Me.TextBoxdate.Value 
    '... 
End If 
+0

「兩者都應爲數字」 - 行需要轉換爲數字,但該列可以表示爲字符串(例如'Cells(「123」,「X」)'是有效的,因爲''123「'[我不喜歡看到它]可以轉換爲'123'來給出一個數字行,''X」'是一個完全有效的列,因爲它是) – YowE3K

+0

@ YowE3K的確,我討厭看到這個(我見過的代碼是它自己的字母索引到整數轉換,yuck),所以我想我應該說接受2 *索引*,必須解析爲行和列位置或標籤。 – ThunderFrame