2017-04-11 5 views
2

...エクセルVBAは、私は次のコードは、デバッグモードでのみ動作しますなぜ把握しようとしています

私は私の「保存」ボタンを押して、マクロでも、すべてのデータエントリが保存されますそれが同じ会社名の場合。マクロをデバッグすると、for-loopに入り、 "Company already already"というメッセージが表示されます。

ここで私のエラーIf Cells(currentAccRow, accColumn).Value = ValueToFind Then

Sub Copy_Values() 

Dim sapcolleague As String, str1 As String, str2 As String, str3 As String 

Dim i As Integer, ValueToFind As String, ValueToCheck As String 
Dim totalAccRows As Integer 
Dim accColumn As Integer 
Dim currentAccRow As Integer 

accColumn = 2 
totalAccRows = Worksheets("DB").Cells(Rows.Count, accColumn).End(xlUp).Row 
ValueToFind = Worksheets("Maintain").Range("F13").Value 

For currentAccRow = 2 To totalAccRows 
    If Cells(currentAccRow, accColumn).Value = ValueToFind Then 
     MsgBox ("Company already exists!") 
     Exit Sub 
    End If 

Next 


Worksheets("DB").Range("A8").EntireRow.Insert 

Worksheets("DB").Range("A8").Value = 
Worksheets("Maintain").Range("F11").Value 
Worksheets("DB").Range("B8").Value = 
Worksheets("Maintain").Range("F13").Value 
Worksheets("DB").Range("C8").Value = 
Worksheets("Maintain").Range("F15").Value 

str1 = Worksheets("Maintain").Range("F18").Value 
str2 = Worksheets("Maintain").Range("F19").Value 
str3 = Worksheets("Maintain").Range("F20").Value 

sapcolleague = str1 & " " & str2 & " " & str3 

Worksheets("DB").Range("D8").Value = sapcolleague 

' This MsgBox will only show if the loop completes with no success 
MsgBox "Successfully saved!" 


End Sub 
+0

保存して、このマクロの間の接続は何ですか? – sktneer

+2

'If Cells(currentAccRow、accColumn).Value = ValueToFind Then'ここでは、セルはどのシートがアクティブシートであるかを参照します。範囲/セルをワークシートオブジェクトで使用するたびにすべての*を修飾するのが最善です。デバッグする際に別のシートを選択することがあります。 'もしワークシート(" DB ")を使う。セル(currentAccRow、accColumn).Value = ValueToFind Then' –

+0

素晴らしいヒント!私は正しいワークシートを参照することを確認していませんでした。あなたの提案はうまくいった! ありがとう! –

答えて

1

Cells実行している時にActiveSheetあることを行っているので、親のワークシートを持っていません。

クイックリライト:

Option Explicit 

Sub Copy_Values() 

    Dim sapcolleague As String, valueToFind As String, accColumn As Long 

    With Worksheets("DB") 

     accColumn = 2 
     valueToFind = Worksheets("Maintain").Range("F13").Value 

     If Not IsError(Application.Match(valueToFind, .Columns(accColumn), 0)) Then 
       MsgBox ("Company already exists!") 
       Exit Sub 
     End If 


     .Range("A8").EntireRow.Insert 

     .Range("A8:C8").Value = Array(Worksheets("Maintain").Range("F11").Value, _ 
             valueToFind, _ 
             Worksheets("Maintain").Range("F15").Value) 

     sapcolleague = Join(Array(Worksheets("Maintain").Range("F18").Value, _ 
            Worksheets("Maintain").Range("F19").Value, _ 
            Worksheets("Maintain").Range("F20").Value), Chr(32)) 

     .Range("D8").Value = sapcolleague 
    End With 

    'Shouldn't it be saved somewhere around here? 

    ' This MsgBox will only show if the loop completes with no success 
    MsgBox "Successfully saved!" 

End Sub 
+0

「保存」は、「更新」シートから情報をコピーし、それを「DB」シートに「保存する」ことを指している場合があります。 – YowE3K

関連する問題