programing

Excel VBA에 개체 필요 오류가 있습니다.

megabox 2023. 8. 17. 21:06
반응형

Excel VBA에 개체 필요 오류가 있습니다.

Dim g1val, g2val As Integer

Set g1val = 0
Set g2val = 0

For i = 3 To 18
    If g1val > Cells(33, i).Value Then
        g1val = g1val
    Else
        g1val = Cells(33, i).Value
    End If
Next i

For j = 32 To 57
    If g2val > Cells(31, j).Value Then
        g2val = g2val
    Else
        g2val = Cells(31, j).Value
    End If
Next j

여기 두 번째 줄에서 개체가 필요하다고 말하는 오류가 발생합니다.저는 g1val과 g2val을 Double로 만들려고 노력했고 처음에는 그들의 값에 1을 주려고 했습니다.하지만 그것들은 잘 되지 않았습니다.도와주실 수 있나요?

정수 변수의 값을 설정하기 위해 단순히 값을 할당합니다.g1val = 0여기서 asset 키워드는 객체에 값을 할당하는 데 사용됩니다.

Sub test()

Dim g1val, g2val As Integer

  g1val = 0
  g2val = 0

    For i = 3 To 18

     If g1val > Cells(33, i).Value Then
        g1val = g1val
    Else
       g1val = Cells(33, i).Value
     End If

    Next i

    For j = 32 To 57
        If g2val > Cells(31, j).Value Then
           g2val = g2val
        Else
          g2val = Cells(31, j).Value
        End If
    Next j

End Sub

Set 문은 객체 변수에만 사용됩니다(예:Range,Cell또는WorksheetExcel)에서, 단순 등호 '='는 다음과 같은 기본 데이터 유형에 사용됩니다.Integer당신은 여기에서 언제 세트를 사용해야 하는지에 대한 좋은 설명을 찾을 수 있습니다.

또 다른 문제는 당신의 변수가g1val실제로는 로 선언되지 않았습니다.Integer하지만 타입이 있습니다.Variant이는 Dim 문이 예상대로 작동하지 않기 때문입니다(아래 예 참조).변수 뒤에 바로 해당 유형이 와야 합니다. 그렇지 않으면 유형이 다음과 같이 기본 설정됩니다.Variant다음과 같은 방법으로만 Dim 문을 단축할 수 있습니다.

Dim intColumn As Integer, intRow As Integer  'This creates two integers

이러한 이유로 시계 창에 예상되는 "0" 대신 "비어 있음"이 표시됩니다.

다음 예를 사용하여 차이점을 이해해 보십시오.

Sub Dimming()

  Dim thisBecomesVariant, thisIsAnInteger As Integer
  Dim integerOne As Integer, integerTwo As Integer

  MsgBox TypeName(thisBecomesVariant)  'Will display "Empty"
  MsgBox TypeName(thisIsAnInteger )  'Will display "Integer"
  MsgBox TypeName(integerOne )  'Will display "Integer"
  MsgBox TypeName(integerTwo )  'Will display "Integer"

  'By assigning an Integer value to a Variant it becomes Integer, too
  thisBecomesVariant = 0
  MsgBox TypeName(thisBecomesVariant)  'Will display "Integer"

End Sub

코드에 대한 두 가지 추가 공지사항:

첫 번째 발언:쓰는 대신에

'If g1val is bigger than the value in the current cell
If g1val > Cells(33, i).Value Then
  g1val = g1val   'Don't change g1val
Else
  g1val = Cells(33, i).Value  'Otherwise set g1val to the cell's value
End If

당신은 간단히 쓸 수 있습니다.

'If g1val is smaller or equal than the value in the current cell
If g1val <= Cells(33, i).Value Then
  g1val = Cells(33, i).Value  'Set g1val to the cell's value 
End If

당신이 바꾸고 싶지 않기 때문에.g1val다른 경우에는

두 번째 발언:프로그래밍할 때 프로그램의 오타를 방지하기 위해 옵션 명시적을 사용하는 것이 좋습니다.그런 다음 모든 변수를 선언해야 하며 변수를 알 수 없는 경우 컴파일러가 경고를 표시합니다.

언급URL : https://stackoverflow.com/questions/19048601/object-required-error-in-excel-vba

반응형